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;
}

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/StevenHuSir/p/ProjectConfig.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值