iOS 学习笔记 手势识别
来源:互联网 发布:sql 函数调用存储过程 编辑:程序博客网 时间:2024/05/20 18:48
一、UIGestureRecognizer简单介绍
我们已经学习了触摸事件处理,但触摸事件处理起来很麻烦,每个触摸事件处理都需要实现3个touches方法,比较繁琐,实际上我们可以使用更加简单的触摸事件处理操作,那就是手势识别UIGestureRecognizer
。
手势识别操作基类UIGestureRecognizer
不能直接使用,我们常使用的是它的子类,这些手势操作类都继承自UIGestureRecognizer
类
常用手势识别子类:
- 点按手势
UITapGestureRecognizer
- 捏合手势
UIPinchGestureRecognizer
- 拖动手势
UIPanGestureRecognizer
- 轻扫手势
UISwipeGestureRecognizer
【4个方向分离】- 旋转手势
UIRotationGestureRecognizer
- 长按手势
UILongPressGestureRecognizer
二、UIGestureRecognizer属性
对象属性:
@property (nonatomic , readonly) UIGestureRecognizerState state;/*< 手势状态 */@property (nonatomic , getter=isEnabled) BOOL enabled;/*< 手势是否可用 */@property (nonatomic , readonly) UIView *view;/*< 触发手势的视图 */@property (nonatomic , assign) BOOL delaysTouchesBegan;/*< 手势识别失败前不执行触摸开始事件,默认为NO */
手势识别状态state:
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) { UIGestureRecognizerStatePossible, // 尚未识别是何种手势操作(但可能已经触发了触摸事件),默认状态 UIGestureRecognizerStateBegan, // 手势已经开始,此时已经被识别,但是这个过程中可能发生变化,手势操作尚未完成 UIGestureRecognizerStateChanged, // 手势状态发生转变 UIGestureRecognizerStateEnded, // 手势识别操作完成(此时已经松开手指) UIGestureRecognizerStateCancelled, // 手势被取消,恢复到默认状态 UIGestureRecognizerStateFailed, // 手势识别失败,恢复到默认状态 UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手势识别完成,同UIGestureRecognizerStateEnded};
三、UIGestureRecognizer方法
#pragmX mark 添加触摸执行事件- (void)addTarget:(id)target action:(SEL)action;#pragma mark 移除触摸执行事件- (void)removeTarget:(id)target action:(SEL)action;#pragma mark 触摸点的个数(同时触摸的手指数)- (NSUInteger)numberOfTouches;#pragma mark 在指定视图中的相对位置- (CGPoint)locationInView:(UIView*)view;#pragma mark 触摸点相对于指定视图的位置- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView*)view;#pragma mark 指定一个手势需要另一个手势执行失败才会执行- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;
四、UIGestureRecognizer使用
# 创建手势识别器对象UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];# 设置手势识别器对象的具体属性tap.numberOfTapsRequired = 2; // 连续敲击2次 tap.numberOfTouchesRequired = 2;// 需要2根手指一起敲击 # 添加手势识别器到对应的view上[self.myView addGestureRecognizer:tap]; # 监听手势的触发[tap addTarget:self action:@selector(tapView:)];
五、多手势冲突
在iOS中,如果一个手势A的识别部分是另一个手势B的子部分,默认情况下A就会先识别,B就无法识别了,
比如拖动手势A和轻扫手势B,轻扫手势只在手势结束状态才能执行,而拖动手势在手势开始的时候执行,这两个手势一起触发,轻扫手势就成了牺牲品。
解决手势冲突,就是利用一个方法:-(void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer
该方法指定一个手势需要另外一个手势识别失败才会执行
比如解决拖动手势和轻扫手势冲突:
// 拖动手势的执行需要右轻扫手势的失败为前提[panGesture requireGestureRecognizerToFail:swipeGestureToRight];// 拖动手势的执行需要左轻扫手势的失败为前提[panGesture requireGestureRecognizerToFail:swipeGestureToLeft];
六、UIGestureRecognizerDelegate代理
代理方法:
#pragma mark 一个控件识别手势后是否沿着响应者链条继续传播手势识别,默认返回NO- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
用该代理方法可以实现两个不同控件的手势同时执行,需要让该方法返回YES,手势识别就能传递给不同控件
文/执着_执念(简书作者)
原文链接:http://www.jianshu.com/p/9abbe985e636
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/9abbe985e636
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
- iOS 学习笔记 手势识别
- IOS学习笔记(14)手势识别
- ios学习笔记之手势识别
- iOS学习笔记06-手势识别
- ios自用学习笔记-触摸事件与手势识别
- ios手势学习笔记
- iOS手势学习笔记
- iOS学习笔记-068.手势识别02——捏合、拖拽、旋转手势
- iOS 笔记五:手势识别 UIGestureRecognizer
- iOS学习,手势识别,storyboard简化版
- ios学习之UISwipeGestureRecognizer手势识别
- iOS学习项目(23-手势识别)
- Android学习笔记_28_手势识别
- Android学习笔记之手势识别
- 学习笔记 - 触摸事件&手势识别
- iOS学习笔记--手势事件
- ios点击手势学习笔记
- 2011斯坦福大学iOS应用开发教程学习笔记(第五课)Protocols,手势识别
- Spring定时任务的几种实现
- JQuery之对DOM的操作
- 1.1Android的发展和历史
- hdu 5889 Barricade【最短路SPFA+最小割--------Dinic】
- DB9 公头母头引脚定义及连接
- iOS 学习笔记 手势识别
- String、StringBuffer、StringBuilder源码比较
- rocksdb 编译安装 日志
- java源码分析之集合框架AbstractMap 08
- CONSUL VS. SMARTSTACK
- Android学习笔记(一)--FirstBlood
- 大小端模式
- Linux总结(五):文件权限
- CString 转 char*