ios多手势事件
开发ios应用时我们经常用到多手势来处理事情,如给scrollView增加点击事件,scrollView不能响应view的touch事件,但有时候却要用到多手势事件,那么我们可以给这个scrollView增加自己的手指事件。给imageView增加点击、放大、旋转等都可以通过多手势来完成。
下面就介绍下各种的手势的使用方法,及注意事项。
- (void)viewDidLoad {
[super viewDidLoad];
//为了能响应多手势事件,imageView的userInteractionEnabled属性要设为YES.
self.imageView.userInteractionEnabled=YES; //1、手指点击事件
//单指单击
UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
//手指数
singleFingerOne.numberOfTouchesRequired = ;
//点击次数
singleFingerOne.numberOfTapsRequired = ;
//设置代理方法
singleFingerOne.delegate= self;
//增加事件者响应者,
[self.imageView addGestureRecognizer:singleFingerOne]; //单指双击
UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
singleFingerTwo.numberOfTouchesRequired = ;
singleFingerTwo.numberOfTapsRequired = ;
singleFingerTwo.delegate= self;
[self.imageView addGestureRecognizer:singleFingerTwo]; //双指单击
UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
doubleFingerOne.numberOfTouchesRequired = ;
doubleFingerOne.numberOfTapsRequired = ;
doubleFingerOne.delegate= self;
[self.imageView addGestureRecognizer:doubleFingerOne]; //双指双击
UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
doubleFingerTwo.numberOfTouchesRequired = ;
doubleFingerTwo.numberOfTapsRequired = ;
doubleFingerTwo.delegate= self;
[self.imageView addGestureRecognizer:doubleFingerTwo]; //如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理
[singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];
//同理双指也是如此
[doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo]; //2、手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上
UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinchGesture:)];
[self.imageView addGestureRecognizer:pinchGesture];//imageView添加手势识别
[pinchGesture release]; //3、旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上
UIRotationGestureRecognizer *rotateGesture=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(handleRotateGesture:)];
[self.imageView addGestureRecognizer:rotateGesture];
[rotateGesture release]; //4、拖手势
UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanGesture:)];
[self.imageView addGestureRecognizer:panGesture];
[panGesture release]; //当实现上面拖手势(UIPanGestureRecognizer)后将不能响应下面的左右划(UISwipeGestureRecognizer)事件,事件会被拖手势栏截,所以左右划和拖手势只能选其一
//右划
UISwipeGestureRecognizer *swipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];
[self.imageView addGestureRecognizer:swipeGesture];
[swipeGesture release];
//左划
UISwipeGestureRecognizer *swipeLeftGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];
swipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;//不设置黑夜是右
[self.imageView addGestureRecognizer:swipeLeftGesture];
[swipeLeftGesture release]; UILongPressGestureRecognizer *longpressGesutre=[[UILongPressGestureRecognizer alloc]initWithTarget:self
action:@selector(handleLongpressGesture:)];
//长按时间为1秒
longpressGesutre.minimumPressDuration=0.5;
//允许15秒中运动
longpressGesutre.allowableMovement=;
//所需触摸1次
longpressGesutre.numberOfTouchesRequired=;
[self.imageView addGestureRecognizer:longpressGesutre];
[longpressGesutre release];
} //手指点击事件
- (void)fingerIncident:(UITapGestureRecognizer *)sender
{
if (sender.numberOfTouchesRequired==) {
//单指点击事件
if(sender.numberOfTapsRequired == ) {
//单指单击
NSLog(@"单指单击");
[sender.view.layer removeAllAnimations];
}
else if(sender.numberOfTapsRequired == ){
//单指双击
NSLog(@"单指双击");
}
}
else if (sender.numberOfTouchesRequired==) {
//双指点击事件
if(sender.numberOfTapsRequired == ) {
//双指单击
NSLog(@"双指单击");
}
else if(sender.numberOfTapsRequired == ){
//双指双击
NSLog(@"双指双击");
}
}
} //手指左右滑动事件
-(void)handleSwipeGesture:(UISwipeGestureRecognizer *)sender{
if (sender.direction==UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"左滑");
}
else{
NSLog(@"右滑");
}
} //手指捏事件
-(void)handlePinchGesture:(UIPinchGestureRecognizer *)sender{
NSLog(@"捏"); if([sender state] == UIGestureRecognizerStateEnded) {
lastScale = 1.0;
return;
} CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]); CGAffineTransform newTransform = CGAffineTransformScale(sender.view.transform, scale, scale); [sender.view setTransform:newTransform];
lastScale = [sender scale];
} //手指旋转事件
-(void)handleRotateGesture:(UIRotationGestureRecognizer *)sender{
NSLog(@"旋转"); NSLog(@"sender.scale=%f",sender.rotation);
NSLog(@"sender.velocity=%f",sender.velocity); sender.view.transform=CGAffineTransformRotate(sender.view.transform, sender.rotation);
sender.rotation=;
} //手指拖事件
-(void)handlePanGesture:(UIPanGestureRecognizer *)sender{
NSLog(@"拖");
NSLog(@"sender=%@",sender);
CGPoint translation=[(UIPanGestureRecognizer*)sender translationInView:self.view]; //开始
if (sender.state==UIGestureRecognizerStateBegan) {
x=sender.view.center.x;
y=sender.view.center.y;
}
//进行中
if (sender.state==UIGestureRecognizerStateChanged) {
sender.view.center=CGPointMake(x+translation.x, y+translation.y);
}
//结束
if (sender.state==UIGestureRecognizerStateEnded) {
sender.view.center=CGPointMake(x+translation.x, y+translation.y);
}
} //手指长按事件
-(void)handleLongpressGesture:(UILongPressGestureRecognizer *)sender{
NSLog(@"长按");
if (sender.state==UIGestureRecognizerStateBegan) {
CABasicAnimation* rotationAnimation_ = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//角度转弧度
rotationAnimation_.fromValue = [NSNumber numberWithFloat:(-0.02)];
rotationAnimation_.toValue = [NSNumber numberWithFloat:(0.02)];
//动画时间
rotationAnimation_.duration = 0.1f;
//动画次数
rotationAnimation_.repeatCount=FLT_MAX;
//回退动画
rotationAnimation_.autoreverses = YES;
//动画开始结束的快慢,设置为加速
rotationAnimation_.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[[sender.view layer] addAnimation:rotationAnimation_ forKey:@"revItUpAnimation"];
}
}
ios多手势事件的更多相关文章
- 点击事件touches与ios的手势UIGestureRecognizer
.h文件 @property (weak,nonatomic) IBOutlet UILabel *messageLabel;@property (weak,nonatomic) IBOutlet U ...
- IOS 手势事件的冲突
关于手操作需要强调几点: UIImageView默认是不支持交互的,也就是userInteractionEnabled=NO ,因此要接收触摸事件(手势识别),必须设置userInteractionE ...
- IOS开发中长按的手势事件编程
长按手势事件: 长按按钮1S后改变按钮颜色: // 长按事件 #import "ViewController.h" @interface ViewController (){ UI ...
- ios 的touch事件分析
IOS之触摸事件和手势 13.1 事件概述 13.2 触摸事件 13.3 手势 13.1 事件概述 事件是当用户手指触击屏幕及在屏幕上移动时,系统不断发送给应用程序的对象. 系统将事件按照特定的路 ...
- surface上的手势事件
surface上的手势事件 1.surface上的触控事件测试. 手指触控在CHROME和FIREFOX下会触发touch事件,而IE10是不支持touch事件的. 手指触控在三个浏览器下均会触发全部 ...
- [BS-25] IOS中手势UIGestureRecognizer概述
IOS中手势UIGestureRecognizer概述 一.概述 iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式: - (void)touches ...
- windows phone和android,ios的touch事件兼容
1.开发背景 最近用html5写了个小游戏,中间踩过无数坑,有很多甚至百度都百度不到答案,可见html5还真是不成熟,兼容性的复杂度比ie6有过之而无不及,性能那个渣简直无力吐槽.. 好了,吐槽结束, ...
- iOS中—触摸事件详解及使用
iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...
- JavaScript触摸与手势事件
JavaScript触摸与手势事件 发表于 2012-12-10 由 admin iOS版Safari为了向开发人员传达一些特殊信息,新增了一些专有事件.因为iOS设备既没有鼠标也没有键盘,所以在为移 ...
随机推荐
- js调试-定位到函数所在文件位置
原文:http://www.cnblogs.com/52cik/p/js-console-show-source.html 在控制台输入要查找的函数名如votePost 然后回车: 函数源码粗显啦,并 ...
- iOS第三方语音-讯飞语音
官方网站:http://www.xfyun.cn/ 注册还要绑定微信,坑啊,识别率感觉没得微信语音好,但是微信语音审核一直不过,研究下这个 1.下载sdk,主要就下面几个文件,我主要用的是语音识别
- ASP 中调用函数关于Call使用注意的问题
Function TestFun(Tstr) TStr = "Fun2" End Function Sub TestSub(TStr) Tstr = "Sub2" ...
- 2014多校第六场 1005 || HDU 4925 Apple Tree
题目链接 题意 : 给你一块n×m的矩阵,每一个格子可以施肥或者是种苹果,种一颗苹果可以得到一个苹果,但是如果你在一个格子上施了肥,那么所有与该格子相邻(指上下左右)的有苹果树的地方最后得到的苹果是两 ...
- 从.NET 1.1 升级到.NET 4.0 遇到 线程间操作无效: 从不是创建控件 [XX] 的线程访问它.
有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数 问题原因是 .NET2.0 以后拒绝 ...
- 【BZOJ1878】[SDOI2009]HH的项链 离线BIT
1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...
- copy
拷贝文件,不覆盖重复文件 yes no|cp -i a b
- hdu2022(water~~)海选女主角
http://acm.hdu.edu.cn/showproblem.php?pid=2022 二B了,没读题直接错了两次....郁闷 #include <iostream> #includ ...
- Tomcat日志问题
[Tomcat日志设定][tomcat控制台日志][log4j日志] 1 Tomcat 日志概述 Tomcat 日志信息分 为 两 类 : 一是运行中的日志,它主要 记录 运行的一些信息,尤其是一些异 ...
- weblogic 安装与配置
Weblogic 安装 从官网 下载 需要的weblogic 版本, 解压缩后得到 wls1036_generic.jar [fmw_12.1.3.0.0_wls.jar , fmw_12.2.1.1 ...