1.触摸是ios交互核心,每次触摸都包括包含下列信息:触摸发生在何处,处于哪个阶段,点击次数,触摸操作的时间

2.iOS使用响应者链条来决定哪个对象来处理触摸,响应者是响应事件的对象,而响应者链则是一条由可以处理这种事件的对象所组成的链,触摸事件在视图之间,直到某个对象开始负责响应该事件为止

3.每个触摸操作及其信息都保存在UITouch中,一组的UITouch保存在UIEvent中传递

4.应用程序可以在视图类或视图控制器类里接收到触摸事件,都继承于UIResponder,当处理多个能够处理触摸事件的子视图时使用视图类,或者到需要处理绘制操作时,因为视图控制器类没有drawRect:方法;使用视图控制器类可以使用标准代码解析触摸,使代码保持集中

5.触摸所处的阶段:began开始,moved在屏幕上移动,stationary自上一个事件发生之后,用户仍然在触摸着屏幕表面,但并未移动,cancel系统终端触摸了,ended触摸结束了

6.所有UIResponder的子类都可以响应触摸,每个类可以决定自己如何响应,覆写回调方法,建议全部重写,UITouchPhaseStationary并不会触发回调

    起步阶段touchesBegan:withEvent ;移动时touchMoved ;结束时touchEnded;取消时cancelled

7.视图有个模式,可以阻止系统将触摸投递给同一个视图里的子视图,exclusiveTouch属性设为YES,在某个视图上面发生了触摸并不意味着非要这个视图去处理触摸,每个视图都可以经由hittest来选择是否处理‘

8.手势识别器,有点击,滑动,缩放,旋转,拖动,长按,开发的重点在视图,如果是图片,需注意打开人机交互

9.self.superView bringSubviewToFont:self //将视图显示在最前方,获取触摸点 [[touched anyobject]locationInView:self]

10.拖动手势,原来的位置保存在previousLocation实例变量中,仿射变换/setTransLation:inView,仿射变换与简单的偏移量不同,它可以同时达到旋转,缩放和平移操作,手势识别器以绝对量的方式来描述坐标改变,而不是给出两次改变之间的绝对差值,参照的坐标系是当前视图的上级视图的坐标系,拖动手势有状态UIGestureRecognizerStateEnded,拖动偏移量 [pan translationInView:self.superView]

11.同时使用多个手势识别器,将代理协议shouldRecognizeSimultaneouslyWithGestureRecognizer:返回YES,UITouch对象保存含有手势识别器的数组

12.updateTransformWithOffset方法合成仿射变换,可以将平移,旋转,缩放三种操作合成一个效果,恒等变换是没有经过任何平移,旋转及缩放的变换效果

13.解决手势冲突,requireGestureRecognizerToFail:方法指明了必须等某个手势无法触发后才去触发另一个手势,两个手势建立了依赖关系,为了适应这种规则,GUI的响应能力会有所下降,界面的延迟现象

14.限制移动,UIKit Dynamics API 对真实的物理现象进行建模,包含物理模拟及响应式动画,重力,碰撞,力,附着,弹簧,伸缩

15.判断点是否在圆圈范围内,重写UIView的pointInside:WithEvent方法来实现,几何运算

16.根据触摸情况绘制内容,drawRect:使用Quartz 2D API,在TouchesMoved:withEvent方法调用setNeedsDisPlay,又会触发drawRect:  //moveToPoint:;addLineToPoint,stroke

17.触摸的采样率受限于CPU的能力,可以在点之间进行插值,平滑算法来环节这些限制

18.启用多点触摸,UIView的multipleTouchEnaled,或者isMultipleTouchEnaled方法,每当发生新的触摸操作时,系统会调用touchesBegan方法,开启新的生命周期,与目前仍在进行中的触摸操作互不干扰

19.手势分为连续和不连续,状态机 [NSValue valueWithCGPoint:],每个识别器刚开始都处于possible状态,对于连续手势,会经历一系列的changed状态,对于不连续手势,如果识别出来就进入Recognized状态,不能就进入Failed状态,reset状态时points = nil;firstTouchDate = nil;self.state = UIGestureRecognizerStatePossible;

20.滚动视图通过UIGestureRecognizer实现同步识别,由于不能重新设置滚动视图的委托,必须对应类遵循代理

21.屏幕上能实现触摸反馈效果,是因为它拦截了触摸事件,并据此创建了叠加图样重写sendEvent方法

22.像视图中添加菜单UIMenuController可以向身为第一响应者的任何物件之中添加弹出式菜单,一般,菜单是与文本视图及文本框结合起来使用的,使用户可以执行选取,拷贝,黏贴操作

23.小结:把ios平台的互动性质体现出来;在屏幕大小容许情况下,尽可能多的添加多点触摸式操作,drawRect:可以绘制各种各样的内容,自定义识别器的时候将可能经历的状态都涵盖在内