1
事件的基本概念
UIEvent:事件,是由硬件捕捉的?个表示用户操作设备的对象。
分三类:触摸事件、晃动事件、远程控制事件
2、
【触摸事件】
触摸事件:用户通过触摸设备屏幕操作对象、输入数据。支持多点触摸,包含1个到多个触摸点
UIView支持触摸事件(因为继承于UIResponder),而且支持多点触摸。
需要定义UIView子类,实现触摸相关的方法。
touches..began、touches..moved、touches...ended、 touches..canceled。
UITouch代表触摸在屏幕上的一根手指。可以获取触摸时间和触摸位置。
如何获取touch对象。touches集合中包含了视图上的所有手势。
3、
【响应者链】
由多个响应者对象组成的链。
UIResponder。响应者类。
iOS中所有能响应事件(触摸、晃动、远程事件)的对象都是响应者。
系统定义了一个抽象的父类UIResponder来表示响应者。其子类都是响应者。
检测触碰视图
硬件检测到触摸操作,会将信息交给UIApplication,开始检测。
UIApplication -> window -> viewController -> view(视图控制器的view) -> 检测所有子视图
最终确认触碰位置,完成响应者链的查询过程。
处理触碰事件
检测到响应者后,实现touchesBegan:withEvent:等方法,即处理事件。
如果响应者没有处理事件,事件会向下传递。如果没有响应者处理,则丢弃触摸事件。
事件处理的顺序与触摸检测查询相反。
触摸的子视图 -> view(视图控制器的view) -> viewController -> window -> UIApplication
响应者链可以被打断。无法完成检测过程。
例如:视图类的属性 : userInteractionEnabled。关闭后能阻断查询过程。
4、
一个类 可以有 多个 初始化方法 其中一定会被调用的初始化方法 称为 指定初始化方法
1、
耦合是衡量一个程序写的好坏的标准之一, 耦合是衡量模块与模块之间关联程度的指标 “高内聚,低耦合”是面向对象编程的核心思想,便于后期开发维护。
2、
代理设计模式
当一个类的某些方法需要被别的类来实现,但是既不明确是些什么方法,又不明确谁来实现这些方法的时候,代理模式就可以派上?场。目的是为了降低模块之间的耦合性。
3、
delegate也是用来解耦的,它不再简简单单让目标去执行一个动作了而是delegate去处理一些列事件、就像UITextFieldDelegate一样,能监测将要开始编辑,已经开始编辑、return按钮点击等等。
代理使用场景
控件有一些列时间点,控制器可以实现这个代理?方法,以便在适当的时机做适当的事
5、
uiimage 是图片,不是控件;他的父类为NSObject;UIImageView是加载图片的控件,父类为UIView
6、
【手势识别器】
手势识别器是对触摸事件做了封装,我们无需?己去判断某个手势是否触发,手势识别器本身起到了识别作用,我们把重心放在识别之后要做什么操作上面。 手势识别器是iOS中比较抽象的一个类,用于识别一个手势,所谓手势:有规律的触摸。
UITapGestureRecognizer是轻拍手势识别器,能识别轻拍操作
UILongPressGestureRecognizer是长按手势识别器,能识别长按操作。
UIRotationGestureRecognizer是旋转手势识别器,能识别旋转操作。
UIPinchGestureRecognizer是捏合手势识别器,能识别捏合操作。
UIPanGestureRecognizer是平移?势识别器,能识别拖拽操作。
UISwipeGestureRecognizer是轻扫手势识别器,能识别拖拽操作。
UIScreenEdgePanGestureRecognizer是屏幕边缘轻扫识别器,是iOS7中新增的?手势。
手势识别器的使用
我们不会直接使用手势识别器这个抽象父类,而是根据需要使用特定的手势识别器创建对象。
【记住这五步】
1、创建UIxxxGestureRecognizer对象,使用initWithTarget:action:?法;
2、配置要识别的手势的相关信息;
3、将?势添加到某个视图上;
4、实现手势识别器里定义的方法
5、将对象release掉
7、
view的transform属性
transform是view的一个重要属性,它在矩阵层面上改变view的显?状态,能实现view的缩放、旋转、平移等等功能。
8、
【总结】
target...action和delegate是很重要的设计模式,务必理解原理以及熟练使用 ,手势识别器是很常用的类,在日常开发中经常使用,需要牢记每个手势识别器的特点以及注意事项 transform是view的重要属性,在屏幕旋转?面用的比较多。
9、
为了降低一个类的耦合性,我们通常可以使用target/action设计模式或者Delegate设计模式,他们都有自己显著的特征和不同点
1.target/action设计模式:为一个类绑定对象以及其响应方法,其灵活之处在于响应方法可以完成全自定义,当该类的对象需要做出相关操作或者响应时,就由绑定的对象去执行对应的方法,Target-action----这个设计模式用按钮,等控件把用户的交互变成代码,让程序可以执行;
2.delegate设计模式:通过为一个类提供相关协议,并指定代理对象来完成解耦,即当该类的对象需要做出响应时,会去判断自己的代理对象是否存在并且判断是否能够响应指定的协议方法,若条件成立,则让代理对象执行该协议方法,相比较target/action,处理操作的方法是固定的协议方法,但是多参方法可以通过参数传递更多的数据给代理对象
栈内存的管理方式
地址:从低到高分配
从高到低存取(即从当前最高的地址往低开始取数据)
10想要使用一个类的私有变量,可以在本类中#import这个类的.h文件