一.iOS程序概述
1.iOS系统概述、系统架构
2.应用程序生命周期
3.APPDelegate方法
//
进入前台非活跃状态,在此期间,应用程序不接收消息或事件
- (void)applicationWillResignActive:(UIApplication *)application {
//如果程序支持后台,程序
进入后台时调用
- (void)applicationDidEnterBackground:(UIApplication *)application
//
程序将要返回前台时调用
- (void)applicationWillEnterForeground:(UIApplication *)application
//
程序
已经处于活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application
//
程序退出时调用,通常是用来保存数据和一些退出前的清理工作
- (void)applicationWillTerminate:(UIApplication *)application
4.应用程序的文件组织
二.UIView与UIWindow
1.UIKit框架概述
2.UIView详解(坐标系、层次结构、常用的属性含义)
常用属性:alpha:透明度;backgroundColor:背景色;subViews:子视图集合;hidden:是否隐藏;
tag:标签值;superView:父视图;multipleTouchEnabled:是否开启多点触摸;
userInteractionEnabled:是否响应触摸事件
3.UIWindow和UIView的关系
4.UIWindow常用方法,使用方式
5.UIScreen,分辨率和frame、bounds的关系
三.其它常用控件
四.高级控件一UITableView
1.表视图的概念和样式
两种风格:UITableViewStylePlain、UITableViewStyleGrouped
NSIndexPath:indexPath section row
2.表视图的常用属性和方法
3.常用数据源方法(dataSource)和委托方法(delegate)
4.表视图的单元格(cell)
4种风格:UITableViewCellStyleDefault(默认)
UITableViewCellStyleSubtitle
UITableViewCellStyleValue1
UITableViewCellStyleValue2
常用cell的属性
5.单元格的重用
6.单元格的定制
其中,xib定制比较常用
7.表视图编辑模式
编辑模式常用方法
编辑模式数据源方法
编辑多选模式
五.高级控件二UICollectionView
1.掌握UIScrollView的使用与常用方法
UIScrollView包含两个子类:UITableView and UICollectionView
2.掌握UICollectionView的常用属性设置
3.熟练运用UICollectionView的常用代理方法
六.屏幕适配
1.理解屏幕适配的意义
通过屏幕的尺寸适配,使其可以更好的应用在多种屏幕尺寸不同的设备上
2.掌握Autoresizing的使用
3.掌握AutoLayout的使用
4.掌握SizeClass的使用
⭐️七.导航控制器
1.视图控制器的概念和使用
UIViewController:视图控制器是所有视图控制器的父类
模态视图的使用
视图控制器的生命周期
2.导航控制的基本概念
UINavigationController:导航控制器是 管理类的控制器,用来管理视图控制器间的切换,
可以认为是管理视图切换的大管家
用来管理子控制器的视图显示,本身不显示视图内容
主要用于多控制器的连续切换
3.导航控制器的用法
4.导航栏的结构 属性和基本用法
5.自定义导航栏
八.标签控制器
1.标签视图控制器的基本概念和用法
UITabBarController和UINavigationController一样是用来管理视图控制器的
UINavigationController是用来管理视图控制器之间导航,
UITabBarController是管理固定的几个视图控制器,子控制器是并列的,可以任意切换显示
很多应用都是使用UITabBarController来做整体布局的
2.标签视图控制器的结构
3.标签视图控制器的常用方法
4.自定义视图控制器
九.自定义ViewController管理器
1.标签视图控制器的基本概念和用法
1⃣️.可使用第三方的框架 2⃣️自定义视图控制器
2.标签视图控制器的结构
3.标签视图控制器的常用方法
4.自定义标签视图控制器
5.标签控制器中使用导航控制器的组合使用,理解两个控制组合后的层级结构
十.Quart2D
1.掌握Quartz2D绘图引擎的使用
2.认识Core Graphic框架
3.掌握Graphics Context的使用
4.掌握图像绘制的方法
Quartz2D绘图的基本步骤
1.获取与视图相关联的上下文对象:CGContextRef
2.创建及设置路径:CGMutablePathRef
3.将路径添加到上下文
4.设置上下文属性
5.绘制路径
6.释放路径
十一.核心动画
1 CALayer的基本使用
2 核心动画的概念与基本动画
3 动画的暂停与恢复
4 关键帧动画
5 动画组的使用
十二.触摸手势、手势、响应者链
1 事件的类型
1⃣️触摸事件
通过复写响应者类的上述方法,可以监听触摸事件
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;//一个多多个手指触碰屏幕是调用
-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event;//手指在屏幕上移动时使用
-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event;//手指离开屏幕是调用
-(void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event;// 触摸事件被系统事件,如电话呼入打断取消时调用
2⃣️运动事件
运动事件又叫做加速计事件,是指用户以特定的方式移动设备,如摇摆设备,
设置会产生运动事件调用以上方法进行处理
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent*)event;//运动开始时执行
-(void)motionEnd:(UIEventSubtype)motion withEvent:(UIEvent*)event;//运动结束时执行
-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent*)event;//运动被取消时执行
3⃣️远程控制事件
-(void)remoteControlReceivedWithEvent:(UIEvent*)event;//开始远程控制时执行:如耳机的线控功能、蓝牙传输等
2 触摸事件的处理方式
当用户触摸屏幕时,触摸事件会被封装成一个event实例,其中包含了触摸事件的相关信息;
event实例对应一个touches的集合
3 事件的传递过程
4 响应者链的基本概念
5 手势识别器的基本概念和用法
UITapGestureRecognize:轻击
UIPinchGestureRecognize;捏合
UIPanGestureRecognize:平移
UISwipeGestureRecognize:轻扫
UIRotationGestureRecognize:旋转
UILongPressGestureRecognize长按
十三.UIDynamic
1 UIDynamic概述
在最需要引入逼真的交互设计时,使用UIKit动力学可作为现有交互设计和现实的一种补充
三要素:
Dynamic Animator:动力学元素与底层iOS物理引擎之间的中介
Dynamic Animator Item :遵守UIDynamicItem协议的对象
UIDynamicBehavior:动力学行为的父类,
2 UIKit动力学行为
.1 重力运动:UIGravityBehavior
.2 碰撞行为:UICollisionBehavior
.3 附着行为:UIAttachmentBehavior
.3 吸附行为:UISnapBehavior
.4 推行为 :UIPushBehavior
.5 动力学元素行为:UIDynamicItemBehavior
3 UIDynamic中的物理学
4 碰撞运动演练
类目 协议 代理
声明property的语法为:
@property (参数1,参数2) 类型 名字;
如:
@property(nonatomic,retain) UIWindow *window;
其中参数主要分为三类:
读写属性: (readwrite/readonly/setter = /getter = )
setter语意:(strong/weak/assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite
产生setter\getter方法
readonly
只产生简单的getter,没有setter, 默认的读写属性.
setter =
指定生成setter方法的名字
getter =
指定生成getter方法的名字
assign
默认类型,setter方法直接赋值,而不进行retain操作, 适用于基本数据类型, 对对象类型, 不会发生引用计数变化.
retain
setter方法对参数进行release旧值,再retain新值。
copy
setter方法进行Copy操作,与retain一样
atomic
保证多线程访问下的安全, 但浪费系统资源, 原子性控制的默认设置.
nonatomic
禁止多线程,变量保护,提高性能
strong与weak是由ARC新引入的对象变量属性.
强引用与弱引用的广义区别:
强引用也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡。如果不存在指向一个对象的引用,并 且此对象不再显示列表中,则此对象会被从内存中释放。
弱引用除了不决定对象的存亡外,其他与强引用相同。即使一个对象被持有无数个若引用,只要没有强引用指 向他,那麽其还是会被清除。没办法,还是 “强哥” 有面子。
简单讲strong等同retain
[1] weak比assign多了一个功能,当对象消失后自动把指针变成nil,好处不言而喻
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
4.@property的特性
@property还有一些关键字,它们都是有特殊作用的,比如上述代码中的nonatomic,strong:
1
2
|
@property(nonatomic,strong) NSString *carName;
@property(nonatomic,strong) NSString *carType;
|
我把它们分为三类,分别是:原子性,存取器控制,内存管理。
4.1 原子性
atomic(默认):atomic意为操作是原子的,意味着只有一个线程访问实例变量。atomic是线程安全的,至少在当前的存取器上是安全的。它是一个默认的特性,但是很少使用,因为比较影响效率,这跟ARM平台和内部锁机制有关。
nonatomic:nonatomic跟atomic刚好相反。表示非原子的,可以被多个线程访问。它的效率比atomic快。但不能保证在多线程环境下的安全性,在单线程和明确只有一个线程访问的情况下广泛使用。
4.2 存取器控制
readwrite(默认):readwrite是默认值,表示该属性同时拥有setter和getter。
readonly: readonly表示只有getter没有setter。
有时候为了语意更明确可能需要自定义访问器的名字:
1
|
@property (nonatomic, setter = mySetter:,getter = myGetter ) NSString *name;
|
最常见的是BOOL类型,比如标识View是否隐藏的属性hidden。可以这样声明:
1
|
@property (nonatomic,getter = isHidden ) BOOL hidden;
|
4.3 内存管理
@property有显示的内存管理策略。这使得我们只需要看一眼@property声明就明白它会怎样对待传入的值。
assign(默认):assign用于值类型,如int、float、double和NSInteger,CGFloat等表示单纯的复制。还包括不存在所有权关系的对象,比如常见的delegate。
1
|
@property(nonatomic) int running;
|
1
|
@property(nonatomic,assign) int running;
|
以上两段代码是相同的。
在setter方法中,采用直接赋值来实现设值操作:
1
2
3
|
-(void)setRunning:(int)newRunning{
_running = newRunning;
}
|
retian:在setter方法中,需要对传入的对象进行引用计数加1的操作。
简单来说,就是对传入的对象拥有所有权,只要对该对象拥有所有权,该对象就不会被释放。如下代码所示:
1
2
3
4
5
6
7
8
|
-(void)setName:(NSString*)_name{
//首先判断是否与旧对象一致,如果不一致进行赋值。
//因为如果是一个对象的话,进行if内的代码会造成一个极端的情况:当此name的retain为1时,使此次的set操作让实例name提前释放,而达不到赋值目的。
if
( name != _name){
[name release];
name = [_name retain];
}
}
|
strong:strong是在IOS引入ARC的时候引入的关键字,是retain的一个可选的替代。表示实例变量对传入的对象要有所有权关系,即强引用。strong跟retain的意思相同并产生相同的代码,但是语意上更好更能体现对象的关系。
weak:在setter方法中,需要对传入的对象不进行引用计数加1的操作。
简单来说,就是对传入的对象没有所有权,当该对象引用计数为0时,即该对象被释放后,用weak声明的实例变量指向nil,即实例变量的值为0。
注:weak关键字是IOS5引入的,IOS5之前是不能使用该关键字的。delegate 和 Outlet 一般用weak来声明。
copy:与strong类似,但区别在于实例变量是对传入对象的副本拥有所有权,而非对象本身。