iOS开发-UITapGestureRecognizer手势
手势在iOS开发中是一个比较常用的功能,不过相对来说大家用的比较少,经常刷网易新闻,上次用了一下捏合手势才发现可以调整字体大小。昨天看到一个介绍摇一摇这个功能的,没看到之前一直都觉得摇一摇是微信的专有的,昨天测试了一下知乎,感觉像发现了一个新大陆,随便截了图,效果如下:
扯的有点远了,很多应用的很多功能其实对于大多数而言是没有用到的,不过作为程序员我们还是应该多研究一下。
基础概念
常见的手势有六种,如下图所示:
UITapGestureRecognizer(点击,轻触摸)、UIPinchGestureRecognizer(二指往內或往外拨动,捏合手势)、UIPanGestureRecognizer(拖移)、UISwipeGestureRecognizer(滑动,快速移动)、UIRotationGestureRecognizer(旋转)和UILongPressGestureRecognizer(长按),由于微信的缘故应该大多数人对长按比较熟悉,Tap点击也是高频用到的手势。
苹果官方给出了Tap和Pinch的手势的效果图,其他的效果可以私下试一试:
Demo实战
由于有六种手势,基本上大同小异,其中一种会实战,其他的应该也没问题,接下来的的介绍都是以UITapGestureRecognizer为基准的,先来个简单的单击手势:
UITapGestureRecognizer *oneTapGestureReognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTapGestureRecognizer:)];
oneTapGestureReognizer.delegate = self;
oneTapGestureReognizer.numberOfTapsRequired = 1;//触摸次数
[self.view addGestureRecognizer:oneTapGestureReognizer];
响应事件:
-(void)oneTapGestureRecognizer:(UITapGestureRecognizer *)tapGestureRecognizer{
UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"单指单击" message:@"iOS技术交流群:228407086" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil];
[alertView show];
}
效果如下:
单击手势显得稍微有点弱,我们可以继续修改手指和触摸的次数,来个双指双击看下代码:
UITapGestureRecognizer *twoTapGestureReognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(twoTapGestureRecognizer:)];
twoTapGestureReognizer.delegate = self;
twoTapGestureReognizer.numberOfTouchesRequired =2;//手指数
twoTapGestureReognizer.numberOfTapsRequired=2;//触摸次数
[self.view addGestureRecognizer:twoTapGestureReognizer];
响应事件如下:
-(void)twoTapGestureRecognizer:(UITapGestureRecognizer *)tapGestureRecognizer{
UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"手势点击" message:@"iOS技术交流群:228407086" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil];
[alertView show];
}
效果就不需要截图了,基本上UITapGestureRecognizer点击差不多就是设置一下手指数量和触摸次数,不过有的时候会出现同一个View上需要手势,按钮需要点击,就是事件被覆盖,需要通过UIGestureRecognizerDelegate中的方法防止事件覆盖。
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
//设置为NO则不响应
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UILabel"]) {
return NO;
}
return YES;
}
上面的代码是为了让截图上的标签不响应触摸的事件,标签其实默认的是没有点击响应事件的,我们可以在标签上面加入触摸事件:
UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(10, 44, 380, 30)];
label.text=@"原文地址:http://www.cnblogs.com/xiaofeixiang";
[label setUserInteractionEnabled:YES];
[label addGestureRecognizer:tapGestureRecognizer];
[self.view addSubview:label];
响应事件:
-(void)tapJumpLink:(UITapGestureRecognizer *)tapGestureRecognizer{
UILabel *label=(UILabel *)tapGestureRecognizer.view;
NSURL *url=[[NSURL alloc]initWithString:[label.text substringFromIndex:5]];
[[UIApplication sharedApplication] openURL:url];
}
最终效果如下:
附赠iOS技术交流群:228407086,如果关于博客或者iOS有什么问题,欢迎入群讨论~
iOS开发-UITapGestureRecognizer手势的更多相关文章
- 【转】 iOS开发之手势gesture详解
原文:http://www.cnblogs.com/salam/archive/2013/04/30/iOS_gesture.html 前言 在iOS中,你可以使用系统内置的手势识别 (Gesture ...
- iOS开发之手势gesture详解(一)
前言 在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象 ...
- iOS开发摇动手势实现详解
1.当设备摇动时,系统会算出加速计的值,并告知是否发生了摇动手势.系统只会运动开始和结束时通知你,并不会在运动发生的整个过程中始终向你报告每一次运动.例如,你快速摇动设备三次,那只会收到一个摇动事件. ...
- iOS开发之手势gesture详解(二)
与其他用户界面控件交互 UIControl子类会覆盖parentView的gesture.例如当用户点击UIButton时,UIButton会接受触摸事件,它的parentView不会接收到.这仅适用 ...
- ios开发之手势处理 之手势识别一
#import "ViewController.h" @interface ViewController ()<UIGestureRecognizerDelegate> ...
- iOS开发 UIPanGestureRecognizer手势抽象类
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@sel ...
- iOS开发: 向右滑动手势功能实现
在navigationController中实现向右滑动 返回功能 系统提供的backbarbuttonitem,不用添加任何代码即可实现向右滑动后退功能,但是往往要对按钮修改样式等时,就需要自定义l ...
- ios开发之手势动作状态细分state,同一视图加入两个手势
1.比方拖拽一个视图.形成类似scrollView的翻页形式 在拖拽的方法里推断拖拽的状态state属性,依据状态不同运行自己须要的效果. 2.同一视图加入两个手势,须要使用手势的代理方法.同意此操作 ...
- iOS开发拓展篇—xib中关于拖拽手势的潜在错误
iOS开发拓展篇—xib中关于拖拽手势的潜在错误 一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行 ...
随机推荐
- Android动态获取权限
android权限的变化 在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的.然而这往往会造成一些安全的问题. Google的解决办法: 将Android中的 ...
- 懒人的福利?教你用set维护斜率优化凸包
斜率优化题目大家肯定都做得不少了,有一些题目查询插入点的x坐标和查询斜率都不单调,这样就需要维护动态凸包并二分斜率.(例如bzoj1492) 常规的做法是cdq分治或手写平衡树维护凸包,然而如果我不愿 ...
- FHQ Treap及其可持久化与朝鲜树式重构
FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap.splay等能支持的操作(只有在LCT中会比splay复杂度多一个log).最重要的是,它是OI中唯一一种 ...
- How to detect the types of executable files
How to detect the types of executable files type { IMAGE_DOS_HEADER: DOS .EXE header. } IMAGE_DOS_HE ...
- SAE J1850 VPW Implement
---恢复内容开始--- OBDII Interface Project When I can ever find enough time away from schoolwork, I try to ...
- [Go] 如何正确地 抛出 错误 和 异常(error/panic/recover)?
序言 错误 和 异常 是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从表面上看,一切皆错误的思路 ...
- 突破 BTrace 安全限制
http://blog.csdn.net/alivetime/article/details/6548615
- Why I Left the .NET Framework
The .NET Framework was good. Really good. Until it wasn't. Why did I leave .NET? In short, it constr ...
- 任务失败,因为未找到“AxImpexe”,或未安装正确的 Microsoft Windows SDK
jenkins自动构建.net时发生错误,查看Console Output看到如下错误: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft ...
- Java String练习题及答案
1. 编写程序将 “jdk” 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕 /** * 编写程序将 “jdk” 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕 */ publ ...