已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京尚学堂提供感觉有必要把iOS开发中的手势识别做一个小小的总结。在上一篇iOS开发之自定义表情键盘(组件封装与自动布局)博客中用到了一个轻击手势,就是在轻击Textview时从表情键盘回到系统键盘,在TextView中的手是用storyboard添加的。下面会先给出如何用storyboard给相应的控件添加手势,然后在用纯代码的方式给我们的控件添加手势,手势的用法比较简单。和button的用法类似,也是目标动作回调,话不多说,切入今天的正题。总共有六种手势识别:轻击手势(TapGestureRecognizer),轻扫手势(SwipeGestureRecognizer), 长按手势(LongPressGestureRecognizer), 拖动手势(PanGestureRecognizer), 捏合手势(PinchGestureRecognizer),旋转手势(RotationGestureRecognizer);其实这些手势用touche事件完全可以实现,苹果就是把常用的触摸事件封装成手势,来提供给用户。读者完全可以用TouchesMoved来写拖动手势等一,用storyboard给控件添加手势识别,当然啦用storyboard得截张图啦1.用storyboard添加手势识别,和添加一个Button的步骤一样,首先我们得找到相应的手势,把手势识别的控件拖到我们要添加手势的控件中,截图如下2.给我们拖出的手势添加回调事件,和给Button回调事件没啥区别的,在回调方法中添加要实现的业务逻辑即可,截图如下:二,纯代码添加手势识别用storyboard可以大大简化我们的操作,不过纯代码的方式还是要会的,就像 要Dreamwear编辑网页一样(当然啦,storyboard的拖拽功能要比Dreamwear的拖拽强大的多),用纯代码敲出来的更为灵活,更加便 于维护。不过用storyboard可以减少我们的工作量,这两个要配合着使用才能大大的提高我们的开发效率。个人感觉用storyboard把框架搭起 来(Controller间的关系),一下小的东西还是用纯代码敲出来更好一些。下面就给出如何给我们的控件用纯代码的方式来添加手势识别。1.轻击手势(TapGestureRecognizer)的添加初始化代码TapGestureRecongnizer的代码如下: /新建tap手势 UITapGestureRecognizer *tapGesture = UITapGestureRecognizer alloc initWithTarget:self action:selector(tapGesture:); /设置点击次数和点击手指数 tapGesture.numberOfTapsRequired = 1; /点击次数 tapGesture.numberOfTouchesRequired = 1; /点击手指数 self.view addGestureRecognizer:tapGesture;在回调方法中添加相应的业务逻辑: /轻击手势触发方法 -(void)tapGesture:(id)sender /轻击后要做的事情 2.长按手势(LongPressGestureRecognizer)初始化代码:/添加长摁手势 UILongPressGestureRecognizer *longPressGesture = UILongPressGestureRecognizer alloc initWithTarget:self action:selector(longPressGesture:); /设置长按时间 longPressGesture.minimumPressDuration = 0.5; /(2秒) self.view addGestureRecognizer:longPressGesture;在对应的回调方法中添加相应的方法(当手势开始时执行): /常摁手势触发方法 -(void)longPressGesture:(id)sender UILongPressGestureRecognizer *longPress = sender; if (longPress.state = UIGestureRecognizerStateBegan) UIAlertView *alter = UIAlertView alloc initWithTitle:提示 message:长按触发 delegate:nil cancelButtonTitle:取消 otherButtonTitles: nil; alter show; 代码说明:手势的常用状态如下开始:UIGestureRecognizerStateBegan改变:UIGestureRecognizerStateChanged结束:UIGestureRecognizerStateEnded取消:UIGestureRecognizerStateCancelled失败:UIGestureRecognizerStateFailed3.轻扫手势(SwipeGestureRecognizer)在初始化轻扫手势的时候得指定轻扫的方向,上下左右。 如果要要添加多个轻扫方向,就得添加多个轻扫手势,不过回调的是同一个方法。添加轻扫手势,一个向左一个向右,代码如下: /添加轻扫手势 UISwipeGestureRecognizer *swipeGesture = UISwipeGestureRecognizer alloc initWithTarget:self action:selector(swipeGesture:); /设置轻扫的方向 swipeGesture.direction = UISwipeGestureRecognizerDirectionRight; /默认向右 self.view addGestureRecognizer:swipeGesture; /添加轻扫手势 UISwipeGestureRecognizer *swipeGestureLeft = UISwipeGestureRecognizer alloc initWithTarget:self action:selector(swipeGesture:); /设置轻扫的方向 swipeGestureLeft.direction = UISwipeGestureRecognizerDirectionLeft; /默认向右 self.view addGestureRecognizer:swipeGestureLeft;回调方法如下: /轻扫手势触发方法 -(void)swipeGesture:(id)sender UISwipeGestureRecognizer *swipe = sender; if (swipe.direction = UISwipeGestureRecognizerDirectionLeft) /向左轻扫做的事情 if (swipe.direction = UISwipeGestureRecognizerDirectionRight) /向右轻扫做的事情 4.捏合手势(PinchGestureRecognizer)捏合手势初始化 /添加捏合手势 UIPinchGestureRecognizer *pinchGesture = UIPinchGestureRecognizer alloc initWithTarget:self action:selector(pinchGesture:); self.view addGestureRecognizer:pinchGesture;捏合手势要触发的方法(放大或者缩小图片): /捏合手势触发方法 -(void) pinchGesture:(id)sender UIPinchGestureRecognizer *gesture = sender; /手势改变时 if (gesture.state = UIGestureRecognizerStateChanged) /捏合手势中scale属性记录的缩放比例 _imageView.transform = CGAffineTransformMakeScale(gesture.scale, gesture.scale); /结束后恢复 if(gesture.state=UIGestureRecognizerStateEnded) UIView animateWithDuration:0.5 animations: _imageView.transform = CGAffineTransformIdentity;/取消一切形变 ; 5.拖动手势(PanGestureRecognizer)拖动手势的初始化/添加拖动手势 UIPanGestureRecognizer *panGesture = UIPanGestureRecognizer alloc initWithTarget:self action:selector(panGesture:); self.view addGestureRecognizer:panGesture;拖动手势要做的方法(通过translationInView获取移动的点,和TouchesMoved方法类似) /拖动手势 -(void) panGesture:(id)sender UIPanGestureRecognizer *panGesture = sender; CGPoint movePoint = panGesture translationInView:self.view; /做你想做的事儿 6.旋转手势(RotationGestureRecognizer)旋转手势的初始化/添加旋转手势 UIRotationGestureRecognizer *rotationGesture = UIRotationGestureRecognizer alloc initWithTarget:self action:selector(rotationGesture:); self.view addGestureRecognizer:rotationGesture;旋转手势调用的方法: /旋转手势 -(void)rotationGesture:(id)sender UIRotationGestureRecognizer *gesture = sender; if (gesture.state=UIGestureRecognizerStateChanged) _imageView.transform=CGAffineTransformMakeRotation(gesture.rotation); if(gesture.state=UIGestureRecognizerStateEnded) UIView animateWi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国网广西电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题含答案详解(新)
- 2026秋季国家管网集团油气调控中心高校毕业生招聘14人笔试参考题库(浓缩500题)含答案详解(培优)
- 2026秋季国家管网集团浙江省天然气管网有限公司高校毕业生招聘笔试模拟试题(浓缩500题)及答案详解(历年真题)
- 2025国网河北省电力校园招聘(提前批)笔试模拟试题浓缩500题及答案详解(名校卷)
- 2026秋季国家管网集团广西公司高校毕业生招聘笔试参考题库(浓缩500题)及答案详解(基础+提升)
- 2026国网江苏省电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题附答案详解(a卷)
- 2026秋季国家管网集团西北公司高校毕业生招聘考试参考试题(浓缩500题)附答案详解(巩固)
- 2025国网湖北省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题及答案详解1套
- 2026秋季国家管网集团华中公司高校毕业生招聘笔试模拟试题(浓缩500题)含答案详解(综合卷)
- 2026届国家管网集团高校毕业生招聘考试备考试题(浓缩500题)及参考答案详解(完整版)
- 新标准大学英语综合教程3课文翻译(1-10单元30篇)
- ABPA诊治进展(张家港中医院冯高华)
- 高等数学同济第七版上册课后习题答案(全套)
- 驯龙高手优质获奖课件
- 安全- 中国移动认证考试L1题库(附答案)
- 广告及宣传用品设计申请单
- 教师职称考试试题
- 2023年云南交投集团招聘笔试题库及答案解析
- GB/T 13275-1991一般用途离心通风机技术条件
- 高效课堂教学模式培训(数学)课件
- 焊接中凝固温度场
评论
0/150
提交评论