UI复习大纲

一.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类似,但区别在于实例变量是对传入对象的副本拥有所有权,而非对象本身。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值