1、contentFlie: 凡是带file的需要填写全路径。
2、App的安装时是需要打包成一个bundle文件,所以获取资源的时候是通过[NSBundle mainbundle]
- 获取程序包资源文件路径方式:
pathforResource
相关参考:https://yq.aliyun.com/articles/26977
3、自定义控件
思路:先搭建UI界面、显示数据、特殊处理、优化
- 纯代码自定义控件
在initWithFrame中进行初始化、添加控件
在layoutSubViews中设置控件大小 - 通过xib自定义控件
在initWithCoder(xib初始化时调用)或awakeFromeNib(xib加载完毕时调用。推荐使用)进行初始化。在initWithCoder方法中,控件为null。
在layoutSubViews中设置控件大小
注意:layoutSubViews只有当控件大小改变时才会执行该方法,改变控件的x或y时不会执行该方法。
4、设置类方法,需要创建改类对象实例时,使用self完成创建。以便继承该类的子类调用此类方法时创建的对象实例为子类本身。
5、返回任意对象类型是最好使用instancetype,会自动检测返回的对象类型。
6、动画
帧动画
渐变动画
核心动画
转场动画
- alpha属性可以做动画
- hidden属性不可以做动画
7、设置控件半透明:将背景颜色改成半透明
8、调整按钮image和title的位置
- 第一种方法
在UIButton子类中重写
imageRectForContentRect:
titleRectForContentRect: - 第二种方法
在UIButton子类中重写
layoutSubViews
9、按钮adjustsImageWhenDisabled属性
disable状态下要不要调整按钮显示的图片
10、按钮的内边距
contentEdgeInsets属性
- title和image的左右内边距分别设置为10可以拉开间隙同时实现居中效果
11、image图片
1)图片的拉伸
-
第一种方法
resizableImageWithCapInsets:(UIEdgeInsets)设置需要保护起来不参与拉伸的上左下右的范围,只拉伸图片中间的内容
resizingMode:分平铺和拉伸效果(默认平铺)
屏幕快照 2018-08-02 18.19.21.png
-
第二种方法(已废弃)
image 图片拉伸第二种方法.png
-
第三种方法通过xib拉伸图片
这种方法有时候会出现bug,保护区域不够,自己可以调整一下。一般的为拉伸背景图片
通过xib拉伸图片.png
2)加载无缓存的图片
加载无缓存的图片.png
3)image的contentMode属性
image的contentModel属性.png
12、内存管理
读取代码从右往左
- 对象放在堆中
- 局部变量是在栈中
13、分类
给系统自带的类扩充方法
14、weak的使用
UI控件最好用weak
15、KVC键值编码
- 给对象简单属性赋值
- 给对象复杂属性赋值

-
快速的字典转模型
KVC 字典转模型.png
- 可以直接修改私有的成员变量,可以给私有的成员变量赋值(最核心的价值)
-
获取value对应的key数组
KVC 获取key数组.png
16、KVO键值观察
作用: 可以监听某一个对象属性值的改变

17、UIScrollView
- UIScrollView无法滚动
1)没有设置contentSize或者设置的contentSize的值小于或者等于scrollView的尺寸
2)scrollEnabled的值为NO
3)userInteractionEnabled(决定是否能跟用户交互)为NO - 没有设置contentSize,scrollView不能滚动,想让scrollView出现下拉效果,将alwaysBounceHorizontal 、alwaysBounceVertical设置成YES,实现弹簧效果
- scrollView的内边距可以增加额外的滚动区域(更改内边距时会调用didscroll的代理方法)
- scrollView的delegate
1)即将开始拖拽、即将停止拖拽、已经停止拖拽
2)正在滚动
3)减速完毕(停止滚动) - delegate 为什么使用weak 防止循环引用
-
图片缩放 捏合手势(按住option+shift键可以移动鼠标)
UIScrollView的图片缩放.png
-
轮播图设置pageControl显示图片
pageControl显示图片.png
18、适配
- 系统适配
-
屏幕适配
设备屏幕.png
1)Autoresizing(跟AutoLayout 、SizeClass不兼容)
- 使用时需要去掉AutoLayout
-
外面四根设置相对于父控件的位置,里面俩根设置宽度和高度跟随父控件进行拉伸。
Autoresing.png
转换成代码
Autoresing 代码适配.png
2)AutoLayout - 约束:确定一个控件的(x,y, w,h)
-
参照:所添加的约束是相对于谁来说的
AotuLayout在xib中的使用.png
父控件跟随子控件伸缩.png
通过autolayout实现UILabel包裹内.png
约束的优先级.png
3)SizeClass
19、给约束添加动画

20、Masonry
equalTo 和 mas_equalTo,mas_equalTo是对基本数据类型进行的包装。
21、UITableView
-
设置索引文字
tableView 设置索引文字.png
- 自定义UITableViewCell
- 计算文字高度
-
纯代码
1)计算一行文字高度
计算一行文字高度.png
2)计算多行文字高度
计算多行文字高度.png
-
xib或者storyboard
cell 自动调节高度(1).png
cell 自动调节高度(2).png
-
-
局部刷新,动画刷新(使用条件:数组长度没有变)
tableView 局部刷新.png
22、启动图片

23、pch文件

24、UIApplication 代理

25、应用程序的启动原理



26、通过storyboard加载控制器


27、通过xib加载控制器的View
1)绑定类
2)连线

28、LoadView

29、UIWindow

30、自定义选择键盘
- 自定义PickerView
- 将自定义的PickerView赋值给UITextField的inputView
31、UINavigationController
- push控制器是压栈
- pop控制器是出栈
32、控制器View的生命周期

33、监听UITextField文本框内容的改变

34、通过storyboard跳转 自动型跳转 手动型跳转
1)手动跳转
从VC1控制器push到VC2控制器,然后添加identifier

2)自动跳转
通过需要支持响应的控件,直接跳转到下一个控制器

-
通过storyboard跳转传递数据(自动跳转和手动跳转都会调用)
从storyboard加载控制器传递属性.png
-
prepareForSegue的实现原理
prepareForSegue的实现原理.png
35、iOS 应用数据的存储方式
-
XML属性列表(plist文件)
在plist当中是没有办法存放自定义对象的
plist存储.png
-
Preference (偏好设置)
偏好设置存储.png
-
NSKeyedArchiver归档
归档.png
解档.png
注意:需要遵守NSCoding协议
归解档.png
initWithCoder方法(调用[super initWithCoder]方法,需父类遵守了NSCoding协议)

- SQLite3
- Core Data
36、应用沙盒结构分析

37、modal控制器

38、UIView的transform属性

39、iOS中的事件



40、事件的产生和传递
-
事件是由队列管理的
1)事件的传递(由父控件传递到子控件,如果父控件不能接收事件,子控件就不能接收事件)
按照层次结构寻找最合适的View
UIView不接收事件.png
不能接收事件原因.png
hitTest 和pointInside.png
hitTest底层实现.png
2)事件的响应和传递的完整过程
事件的传递和响应.png

42、手势



43、手势的使用
-
侧滑菜单
扩展工具类.png
44、Quartz2D
Quartz2D 二维绘图引擎(画图表 第三方库 charts)
最主要的价值是自定义UI控件










45、NavigationBar


46、字符串 copy

47、通知和代理的选择
跨级之间用通知
上下级之间用代理
48、Block
Block保存一段代码

49、多线程












50、原子属性和非原子属性

51、UIView+frame


52、设置子控制器

53、设置是否响应手势事件

54、调整按钮图片和文字


55、调整cell分割线


56、设置App新特性界面

57、自定义UISegmentedControl

58、设置UICollectionFlowLayout

59、造成循环引用的原因

网友评论