1.UIResponder对象
- 响应者对象,能与用户交互的就是响应者对象
- UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件
注意:
- 如果两根手指同时触摸一个View,那么View只会调用一次touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象
- 如果这两根手指一前一后分开触摸同一个View,那么View会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象。
- 根据touches中UITouch的个数可以判断出是单点触摸还是多点触摸
* 如果一根手指触摸屏幕叫做单点触摸
* 如果多根手指同时触摸屏幕叫做多点触摸
2.总结:在一次完整的触摸事件中touches集合中的UITouch对象也是在各个阶段共享的
3.介绍控件不能接受用户交互的情况
*演示要求:在控制器View中创建多个View,并且为每个UIView指定一个自定义View,实现touchesBegan方法。
1>控件的userInteractionEnabled = NO的情况下不能与用户交互(如果父容器不能与用户交互,那么在该容器中的所有子控件也不能与用户交互)
2>透明度小于等于0.01,alpha <= 0.01。
3>控件被隐藏的时候,hidden = YES。
4>如果子视图的位置超出了父视图的有效范围,那么子视图也是无法与用户交互的,即使设置了父视图的clipsToBounds = NO,也是无法与用户进行交互的。
5>默认情况下,从控件库中拖拽的UIImageView是无法接受用户的触摸事件的。
*UIImageView 默认是不支持多点触摸,也不响应用户事件的。
注意:直接从媒体库中把图片拖拽出进来(通过这种方式拖进来的UIImageView,默认即支持多点触摸也支持用户交互,并且图片框大小就是图片的实际大小)
4.手势识别:
- 触摸事件只有4个:
1>touchesBegan (按下)
2>touchesMoved(移动)
3>touchesEnded(抬起)
4>touchesCanceled(取消)
- iOS3.2之后,把触摸事件做了封装,对常用的手势进行了处理,封装了6种常见的手势
UITapGestureRecognizer(敲击)
UILongPressGestureRecognizer(长按)
UISwipeGestureRecognizer(轻扫)
UIRotationGestureRecognizer(旋转)
UIPinchGestureRecognizer(捏合,用于缩放)
UIPanGestureRecognizer(拖拽)