1. 从iOS9开始的常见报错
objc Application windows are expected to have a root view controller at the end of application launch
- 从iOS9开始, 在程序启动完毕那一刻显示出来的窗口必须要设置根控制器(在程序启动完成后,在显示窗口则可以不设置根控制器)
2.应用程序的图标
旧项目中的图标只要符合1个条件即可
图片名叫做Icon.png
3.有些图片显示出来会自动渲染成蓝色
比如:
设置tabBarItem的选中图片
bjc vc.tabBarItem.selectedImage = image;
设置UIButtonTypeSystem样式按钮的image时
[btn setImage:image forState:UIControlStateNormal];```
### 4.tabarItem按钮选中时,图片会被系统渲染的解决方案:
- 4.1 再次产生一张不会进行渲染的图片
```objc
// 加载图片
UIImage *tempImage = [UIImage imageNamed:@"tabBar_essence_click_icon"];
// 产生一张不会进行自动渲染的图片
UIImage *selectedImage = [tempImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
vc.tabBarItem.selectedImage = selectedImage;
-
4.2 直接在xcassets文件中配置
5.设置TabBarItem的文字属性
直接设置每一个tabBarItem对象
// 普通状态下的文字属性
NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor]; [vc.tabBarItem setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
// 选中状态下的文字属性
NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
[vc.tabBarItem setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];
// 字典中用到的key 1.iOS7之前(在UIStringDrawing.h中可以找到) - 比如UITextAttributeFont\UITextAttributeTextColor - 规律:UITextAttributeXXX
- iOS7开始(在NSAttributedString.h中可以找到)
比如:
NSFontAttributeName\NSForegroundColorAttributeName - 规律:NSXXXAttributeName ```
6. 通过UITabBarItem的appearance对象统一设置
/**** 设置所有UITabBarItem的文字属性 ****/
UITabBarItem *item = [UITabBarItem appearance];
// 普通状态下的文字属性
NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
[item setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
// 选中状态下的文字属性
NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
[item setTitleTextAttributes:normalAttrs forState:UIControlStateSelected];
7.项目的图片资源
- 可以利用一个Mac软件解压(解压ipa或者car文件里的资源,特别是图片资源)
https://github.com/devcxm/iOS-Images-Extractor
8.颜色相关的一些知识
8.1颜色的基本组成
一种颜色由N个颜色通道组成
颜色通道
1个颜色通道占据8bit
1个颜色通道的取值范围
10进制 : [0, 255]
16进制 : [00, ff];常见的颜色通道
红色 red R
绿色 green G
蓝色 blue B
透明度 alpha A
R\G\B一样的是灰色
8.2颜色的种类
- 24bit颜色
由R\G\B组成的颜色
常见的表示形式
10进制(仅仅是用在CSS)
红色 : rgb(255,0,0)
绿色 : rgb(0,255,0)
蓝色 : rgb(0,0,255)
黄色 : rgb(255,255,0)
黑色 : rgb(0,0,0)
白色 : rgb(255,255,255)
灰色 : rgb(80,80,80)
16进制(可以用在CSS\android)
红色 : #ff0000 #f00
绿色 : #00ff00 #0f0
蓝色 : #0000ff #00f
黄色 : #ffff00 #ff0
黑色 : #000000 #000
白色 : #ffffff #fff
灰色 : #979797
- 32bit颜色
由R\G\B\A组成的颜色
常见的表示形式
10进制(仅仅是用在CSS)
红色 : rgba(255,0,0,255)
绿色 : rgba(0,255,0,255)
蓝色 : rgba(0,0,255,255)
黄色 : rgba(255,255,0,255)
黑色 : rgba(0,0,0,255)
白色 : rgba(255,255,255,255)
16进制(#AARRGGBB, 仅仅是用在android)
红色 : #ffff0000
绿色 : #ff00ff00
蓝色 : #ff0000ff
黄色 : #ffffff00
黑色 : #ff000000
白色 : #ffffffff
9.PCH文件可能引发的错误
(报错原因: 将pch文件的内容拷贝到非OC源代码中,如: c语言文件)
- 解决方案
ifndef PrefixHeader_pch
define PrefixHeader_pch
/ 如果希望某些内容能拷贝到任何源代码文件(OC\C\C++等), 那么就不要写在#ifdef OBJC和#endif之间 /
/ 在#ifdef OBJC和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 /
ifdef OBJC
endif
/ 在#ifdef OBJC和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 /
endif
10.在Build Setting中配置宏
- 如果项目中有些宏找不到, 可能是配置在Build Setting中(如:command + 点击, 未能跳入该宏定义文件,就可能在:Preprocessing中的Proprocessor Macros定义了该宏, 编译前宏定义, 在这里可以在调试和发布两种情况下,定义不同值的宏)
注意点:宏的名字不能全部都是小写字母(加数字,或者变为大写都可以)
-
如果宏的名字全部是小写, 会出现以下错误:
宏定义的中,参数都要用"( )"括住,不然会出问题
11.Appearance的使用场合
- 只要后面带有
UI_APPEARANCE_SELECTOR
的方法或者属性,都可以通过appearance对象统一设置 - 比如
@interface UISwitch : UIControl
@property(nullable, nonatomic, strong) UIColor *onTintColor NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
@end
UISwitch *s = [UISwitch appearance];
s.onTintColor = [UIColor redColor];
12.其他配置项目时需要注意的问题
创建项目时要勾选git管理, 每次开始项目时,提交一下git,下次查看项目时,着重看add和modify部分
创建项目时根据需要勾选UITesting(慕课网上有具体的介绍: http://www.imooc.com/learn/560)
配置好类前缀
选择好使用启动图片还是lauchScreen
使用人为warning
#warning 这是人为warning
废弃的方法是指苹果不推荐使用,不是指方法不能用
如果控制器之间有继承关系,则不建议使用Storyboard,因为Storyboard中的部分控件是不能被继承到
在Scheme中选择Debug和Release模式,可以测试在两种模式下打印的情况,可通过宏定义将Release模式下的打印都替换成空,减少Release模式的性能消耗