• iOS-项目配置(新项目)


    下载更多Xcode版本:

    https://developer.apple.com/download/more/

     

    1.App类型:社交、电商、视频、娱乐、新闻

    2.App开发模式

    ①迭代开发(原有基础上开发)

    ②独立开发

    项目开发方式:①storyboard ②纯代码

    其他:需求文档、原型图、接口文档、开发设计文档

    3.Target-General配置

    Display Name                  展示名称

    Bundle Identifier              捆绑标识符  

    Info.plist

    version:                            AppStore版本

    build:                                工程的构建版本

    Deployment Target :      开发所支持的最低版本

    Devices:                            支持的设备(universal、iPhone、iPad)

    Main Interface               入口

    Device Orientation :       支持设备方向

    Status Bar Style :           设置程序启动时的状态栏样式(一般隐藏)

    Embedded Binaries :     .a 文件

    Linked Frameworks and Libraries .添加依赖库

    AppIcons and LaunchImages         设置AppIcon和启动图

    其他配置

    ①启动图配置(LaunchScreen>LaunchImage)

    /*
    启动图配置优先级:
     优先级:LaunchScreen > LaunchImage Xcode配置了,不起作用
     删掉 LaunchScreenFile-> LaunchScreen.storyboard
     1.清空xcodew缓存 2.直接删掉程序 重新运行
     如果是通过LaunchImage设置启动界面,那么屏幕的可视范围由图片决定
     注意:如果使用launchImage,必须让你的美工设置各种尺寸的启动图片
     LaunchScreen Xcode 6 开始才有的
     好处:
     1.自动识别当前真机或者模拟器的尺寸
     2.只要让美工提供一个可拉伸的图片就可以了
     LaunchScreen底层实现:把launchScreen截屏,生成一张图片,作为启动界面
    */

    ②项目结构搭建(框架)

    UITabBarController+导航控制器

    封装谁的事情谁管理、方便代码维护

    ③UIApplication作用

        /*
         1.创建UIApplication(1.打开网页,发短信,打电话 2.设置应用程序提醒数字 3.设置联网状态 4.设置状态栏)
         2.创建AppDelegate代理对象,并且成为UIApplication代理,(监听整个app生命周期,处理内存警告)
         3.开启主运行循环,保证程序一直运行(runloop:每一个线程都有runloop,主线程有一个runloop自动开启)
         4.加载info.plist,判断是否指定了main.storyboard,如果指定,就会去加载
         //AppDelegate设置根视图步骤
         1.创建窗口
         2.设置根控制器
         3.显示窗口
         */

    ④插件路径

      /*
        1.改插件 -> 如何去查找插件 -> 插件开发知识 -> 插件代码肯定有个地方指定安装在什么地方
        1.打开插件 2.搜索plug 3.就能找到安装路径
     */

    ⑤load方法和initialize方法的区别

    initialize :这个方法会在第一次初始化这个类之前调用,我们用它来初始化静态变量.

    调用时机: 类似懒加载,如果没有使用这个类,那么系统默认不会调用这个方法,且默认只加载一次。(在init之前)当向该类发送第一个消息时,先调用类中的,再调用类别中的(类别中如果有重写),如果该类只是引用,没有调用,则不会执行initialize方法。

    load :在加载类的时候就被调用,也就是iOS应用启动的时候,就会加载所有的类,就会调用每个类的 +load方法。

    调用时机:默认执行且在main函数之前,先调用类中的,再调用类别中的(类别中如果有重写)

    共同点:自动调用父类的,不需要super操作,自动调用且仅仅会调用一次(不包括外部显示调用)

    注意:initialize可能会执行多次

    在创建子类对象时,首先要创建父类对象,所以会调用一次父类的initialize方法,然后创建子类时,尽管自己没有实现initialize方法,但还是会调用父类的方法。

    正确使用:

    // In Person.m
    + (void)initialize {
        if (self == [Person class]) {
            NSLog(@"Initialize Person, caller Class %@", [self class]);
        }
    }

    ⑥Appearance

        /*
         appearance:
         1.只要遵守了UIAppearance协议,还要实现这个方法
         2.哪些属性可以通过appearance 设置,只有被UI_APPEARANCE_SELECTOR宏修饰的属性,才能设置
         3.[UITabBarItem appearance] 默认设置全局(先remove 然后设置appearance 最后再addSubView)
         [self.view removeFromSuperView];
         
         UISwitch *switchView = [UISwitch appearance];
         switchView.onTinColor = [UIColor redColor];
         [[UIApplication sharedApplication].keyWindow addSubView:self.view];
         */
        
        //获取整个程序下的TabBarItem
    //    UITabBarItem * tabBarItem = [UITabBarItem appearance];
        //开发中建议使用这种 只在某个类设置统一属性
        //iOS 9.0之前
        //UITabBarItem * tabBarItem = [UITabBarItem appearanceWhenContainedIn:self, nil];
        //iOS 9.0之后
        UITabBarItem * tabBarItem = [UITabBarItem appearanceWhenContainedInInstancesOfClasses:@[HKTabBarController.self]];
        //设置按钮选中标题的颜色:富文本 、颜色、字体、阴影、空心、图文混排
        //创建一个描述文本属性的字典
        NSMutableDictionary * attrs = [NSMutableDictionary dictionary];
        attrs[NSForegroundColorAttributeName] = kBlackColor;
        [tabBarItem setTitleTextAttributes:attrs forState:UIControlStateSelected];

     ⑦滑动返回

    在HKNavigationController中设置

    - (void)viewDidLoad {
        [super viewDidLoad];
        // 控制手势什么时候触发,只有非根控制器才需要触发手势
        self.interactivePopGestureRecognizer.delegate = self;
        //FIXME:BUG:假死状态:程序还在运行,但是界面死了.
    }
    #pragma mark - UIGestureRecognizerDelegate
    // 决定是否触发手势
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        return self.childViewControllers.count > 1;
    }

     

     ⑧全屏滑动返回

    在HKNavigationController中设置

    - (void)viewDidLoad {
        [super viewDidLoad];
        //设置全屏滑动返回
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wundeclared-selector"
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
    #pragma clang diagnostic pop
        [self.view addGestureRecognizer:pan];
        // 控制手势什么时候触发,只有非根控制器才需要触发手势
        pan.delegate = self;
        // 禁止之前手势
        self.interactivePopGestureRecognizer.enabled = NO;
    }

     

     

     

     

     

     

     

  • 相关阅读:
    java的继承---包装器与自动装箱
    linux开机启动过程,很多人说的不太清楚的看看。
    黑盒测试/三角形(OC)
    git 忽略一些文件的提交
    volley 框架的使用
    如何通过阿里百川的集成,以及manifest的权限配置完成淘客商品详情页的链接
    抓取网站访问者的QQ号码
    写写东西吧
    Android 强制实现下线功能
    Android 新闻显示界面且适应平板
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/ProjectConfig.html
Copyright © 2020-2023  润新知