iOS 各种手势用法
原文标题是,IOS UIScrollview UIImageView点击事件处理
原文出自:http://blog.sina.com.cn/s/blog_bd98ffe20101bz7z.html
开发ios应用时我们经常用到多手势来处理事情,如给scrollView增加点击事件,scrollView不能响应view的touch事件,但有时候却要用到多手势事件,那么我们可以给这个scrollView增加自己的手指事件。给imageView增加点击、放大、旋转等都可以通过多手势来完成。下面就介绍下各种的手势的使用方法,及注意事项。
{
[super viewDidLoad];
//为了能响应多手势事件,imageView的userInteractionEnabled属性要设为YES.
self.imageView.userInteractionEnabled=YES;
//1、手指点击事件
//单指单击
UITapGestureRecognizer *singleFingerOne= [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
//手指数
singleFingerOne.numberOfTouchesRequired = 1;
//点击次数
singleFingerOne.numberOfTapsRequired = 1;
//设置代理方法
singleFingerOne.delegate= self;
//增加事件者响应者,
[self.imageView addGestureRecognizer:singleFingerOne];
//单指双击
UITapGestureRecognizer *singleFingerTwo=[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
singleFingerTwo.numberOfTouchesRequired = 1;
singleFingerTwo.numberOfTapsRequired = 2;
singleFingerTwo.delegate= self;
[self.imageView addGestureRecognizer:singleFingerTwo];
//双指单击
UITapGestureRecognizer *doubleFingerOne= [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
doubleFingerOne.numberOfTouchesRequired = 2;
doubleFingerOne.numberOfTapsRequired = 1;
doubleFingerOne.delegate= self;
[self.imageView addGestureRecognizer:doubleFingerOne];
//双指双击
UITapGestureRecognizer *doubleFingerTwo= [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(fingerIncident:)];
doubleFingerTwo.numberOfTouchesRequired = 2;
doubleFingerTwo.numberOfTapsRequired = 2;
doubleFingerTwo.delegate= self;
[self.imageView addGestureRecognizer:doubleFingerTwo];
//如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理
[singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];
//同理双指也是如此
[doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo];
//2、手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上
UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:selfaction:@selector(handlePinchGesture:)];
[self.imageViewaddGestureRecognizer:pinchGesture];//imageView添加手势识别
[pinchGesture release];
//3、旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上
UIRotationGestureRecognizer *rotateGesture=[[UIRotationGestureRecognizer alloc]initWithTarget:selfaction:@selector(handleRotateGesture:)];
[self.imageView addGestureRecognizer:rotateGesture];
[rotateGesture release];
//4、拖手势
UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:selfaction:@selector(handlePanGesture:)];
[self.imageView addGestureRecognizer:panGesture];
[panGesture release];
//当实现上面拖手势(UIPanGestureRecognizer)后将不能响应下面的左右划(UISwipeGestureRecognizer)事件,事件会被拖手势栏截,所以左右划和拖手势只能选其一
//右划
UISwipeGestureRecognizer *swipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:selfaction:@selector(handleSwipeGesture:)];
[self.imageView addGestureRecognizer:swipeGesture];
[swipeGesture release];
//左划
UISwipeGestureRecognizer *swipeLeftGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:selfaction:@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=3;
//所需触摸1次
longpressGesutre.numberOfTouchesRequired=1;
[self.imageView addGestureRecognizer:longpressGesutre];
[longpressGesutre release];
}
//手指点击事件
- (void)fingerIncident:(UITapGestureRecognizer *)sender
{
if (sender.numberOfTouchesRequired==1){
//单指点击事件
if(sender.numberOfTapsRequired == 1){
//单指单击
NSLog(@"单指单击");
[sender.view.layer removeAllAnimations];
}
else if(sender.numberOfTapsRequired ==2 ){
//单指双击
NSLog(@"单指双击");
}
}
else if (sender.numberOfTouchesRequired==2){
//双指点击事件
if(sender.numberOfTapsRequired == 1){
//双指单击
NSLog(@"双指单击");
}
else if(sender.numberOfTapsRequired ==2 ){
//双指双击
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=0;
}
//手指拖事件
-(void)handlePanGesture:(UIPanGestureRecognizer *)sender{
NSLog(@"拖");
NSLog(@"sender=%@",sender);
CGPoint translation=[(UIPanGestureRecognizer*)sendertranslationInView: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_ = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.z"];
//角度转弧度
rotationAnimation_.fromValue =[NSNumbernumberWithFloat:(-0.02)];
rotationAnimation_.toValue =[NSNumbernumberWithFloat:(0.02)];
//动画时间
rotationAnimation_.duration = 0.1f;
//动画次数
rotationAnimation_.repeatCount=FLT_MAX;
//回退动画
rotationAnimation_.autoreverses = YES;
//动画开始结束的快慢,设置为加速
rotationAnimation_.timingFunction =[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[[sender.view layer]
iOS 各种手势用法相关推荐
- iOS 九宫格手势密码
代码地址如下: http://www.demodashi.com/demo/11490.html 一.准备工作 需要准备什么环境 xcode,iOS8+ 本例子实现什么功能 主要实现手势密码设置,验证 ...
- IOS NSUserDefaults 讲解 用法
IOS NSUserDefaults 讲解 用法 NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...
- iOS开发——手势识别器(用手势实现图片旋转和缩小放大)
iOS开发中,除了有关触摸的这组方法来控制用户的手指触控外,还可以用UIGestureRecognize的衍生类来进行判断,方便了开发. UIGestureRecognize的子类类别有以下几种: U ...
- Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放
前几篇文章介绍了很多Unity3D引擎自身的一些问题, 今天我们在回到IOS设备上讨论一些触摸屏幕手势,本章的目标是通过触摸iPhone屏幕手势 实现模型左右的旋转,与模型的缩放. 大家想一想模型的旋 ...
- IOS 定义手势监听器详解,利用 UIGestureRecognizer 进行捏合、旋转、平移、点击、长按手势事件响应
IOS中我们可以通过UITouch进行触摸事件监听,但是UITouch实现捏合.旋转.长按等手势事件监听非常麻烦.IOS中提供 UIGestureRecognizer 的子类帮我们简洁等实现捏合.旋转 ...
- ios pan手势滑动消失动画_解析Color OS全面屏手势,操作丝滑,操作逻辑帮了大忙...
安卓手机真的越来越流畅了!这是我在重度使用OPPO Reno4一段时间后得到的结论. 在使用手机时,我们对手机体验的感知首先就来自于系统.而其中,手机使用是否顺手,反应是否快的第一表现,就是手机操作上 ...
- ios pan手势滑动消失动画_iOS仿抖音—评论视图滑动消失
iOS仿抖音短视频 前言 这是仿抖音短视频的第三篇-评论视图滑动消失,先来看下效果图: comment.gif 说明 通过观察可以发现抖音的评论视图是从底部弹出的,包括顶部视图和UITableView ...
- ios pan手势滑动消失动画_IOS UIPanGestureRecognizer手势使用及识别状态UIGestureRecognizerState...
UIGestureRecognizerState -- 手势识别器状态 1.先来看官方文档 定义UIGestureRecognizer.h 英文: typedef NS_ENUM(NSInteger, ...
- IOS 开发 手势使用
首先为了防止看我的博客的人刚打开就关闭,所以就先给个手势的例子 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] ...
最新文章
- Matlab学习笔记——图形绘制
- python 拓扑排序正确版
- 北恒生物获德诚资本约1亿元A轮融资,德诚资本投资
- Ext JS 4 Beta 3 今天可以下载了
- 也说说TIME_WAIT状态
- Ubuntu 16.04安装Memcached(单机)
- rust 睡袋怎么用_婴儿晚上用睡袋好吗?带过娃的告诉你正确答案!
- 【嘟嘟早教卡】 小程序源码分享带后台管理
- DML和DQL 总结
- 【日志】调频调占空比电路的设计
- Android应用案例开发大全 吴亚峰 苏亚光
- matlab中如何定义数组,matlab中如何定义一个数组为全局变量?
- 控制教程 —— 介绍篇:6.状态空间控制器设计
- linux windows拷贝文件,把linux上的文件拷贝到windows下
- android 数据线有几种,安卓数据线有几种
- 规范的计算机网络规模分类,就计算机网络按规模分类而言,下列说法中规范的是( )。...
- 微软服务器上市时间,微软Office 2010全球发布会时间确定
- python将视频帧转化成图片时,出来的是灰色图像
- 如何在Windows 11上的WSL2做到GPU直通,并用Deepracer本地训练炸干电脑的资源(显卡降价了,618等等党还等什么,一起来加入Deepracer的比赛学习交流吧)
- 国家自然科学基金 计算机视觉,【科研新成果】我院2019年国家自然科学基金项目取得新突破...