原文标题是,IOS UIScrollview UIImageView点击事件处理

原文出自:http://blog.sina.com.cn/s/blog_bd98ffe20101bz7z.html

开发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 = 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 各种手势用法相关推荐

  1. iOS 九宫格手势密码

    代码地址如下: http://www.demodashi.com/demo/11490.html 一.准备工作 需要准备什么环境 xcode,iOS8+ 本例子实现什么功能 主要实现手势密码设置,验证 ...

  2. IOS NSUserDefaults 讲解 用法

    IOS NSUserDefaults 讲解 用法    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...

  3. iOS开发——手势识别器(用手势实现图片旋转和缩小放大)

    iOS开发中,除了有关触摸的这组方法来控制用户的手指触控外,还可以用UIGestureRecognize的衍生类来进行判断,方便了开发. UIGestureRecognize的子类类别有以下几种: U ...

  4. Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放

    前几篇文章介绍了很多Unity3D引擎自身的一些问题, 今天我们在回到IOS设备上讨论一些触摸屏幕手势,本章的目标是通过触摸iPhone屏幕手势 实现模型左右的旋转,与模型的缩放. 大家想一想模型的旋 ...

  5. IOS 定义手势监听器详解,利用 UIGestureRecognizer 进行捏合、旋转、平移、点击、长按手势事件响应

    IOS中我们可以通过UITouch进行触摸事件监听,但是UITouch实现捏合.旋转.长按等手势事件监听非常麻烦.IOS中提供 UIGestureRecognizer 的子类帮我们简洁等实现捏合.旋转 ...

  6. ios pan手势滑动消失动画_解析Color OS全面屏手势,操作丝滑,操作逻辑帮了大忙...

    安卓手机真的越来越流畅了!这是我在重度使用OPPO Reno4一段时间后得到的结论. 在使用手机时,我们对手机体验的感知首先就来自于系统.而其中,手机使用是否顺手,反应是否快的第一表现,就是手机操作上 ...

  7. ios pan手势滑动消失动画_iOS仿抖音—评论视图滑动消失

    iOS仿抖音短视频 前言 这是仿抖音短视频的第三篇-评论视图滑动消失,先来看下效果图: comment.gif 说明 通过观察可以发现抖音的评论视图是从底部弹出的,包括顶部视图和UITableView ...

  8. ios pan手势滑动消失动画_IOS UIPanGestureRecognizer手势使用及识别状态UIGestureRecognizerState...

    UIGestureRecognizerState -- 手势识别器状态 1.先来看官方文档 定义UIGestureRecognizer.h 英文: typedef NS_ENUM(NSInteger, ...

  9. IOS 开发 手势使用

    首先为了防止看我的博客的人刚打开就关闭,所以就先给个手势的例子 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] ...

最新文章

  1. Matlab学习笔记——图形绘制
  2. python 拓扑排序正确版
  3. 北恒生物获德诚资本约1亿元A轮融资,德诚资本投资
  4. Ext JS 4 Beta 3 今天可以下载了
  5. 也说说TIME_WAIT状态
  6. Ubuntu 16.04安装Memcached(单机)
  7. rust 睡袋怎么用_婴儿晚上用睡袋好吗?带过娃的告诉你正确答案!
  8. 【嘟嘟早教卡】 小程序源码分享带后台管理
  9. DML和DQL 总结
  10. 【日志】调频调占空比电路的设计
  11. Android应用案例开发大全 吴亚峰 苏亚光
  12. matlab中如何定义数组,matlab中如何定义一个数组为全局变量?
  13. 控制教程 —— 介绍篇:6.状态空间控制器设计
  14. linux windows拷贝文件,把linux上的文件拷贝到windows下
  15. android 数据线有几种,安卓数据线有几种
  16. 规范的计算机网络规模分类,就计算机网络按规模分类而言,下列说法中规范的是( )。...
  17. 微软服务器上市时间,微软Office 2010全球发布会时间确定
  18. python将视频帧转化成图片时,出来的是灰色图像
  19. 如何在Windows 11上的WSL2做到GPU直通,并用Deepracer本地训练炸干电脑的资源(显卡降价了,618等等党还等什么,一起来加入Deepracer的比赛学习交流吧)
  20. 国家自然科学基金 计算机视觉,【科研新成果】我院2019年国家自然科学基金项目取得新突破...

热门文章

  1. 为什么现在很多人在用影刀,影刀突然火起来了?
  2. java中的lt;和gt;分别是什么意思
  3. php云打印类,PHP应用:PHP云打印类完整示例
  4. 为什么你应聘不上或试用期被开?
  5. play框架用起来(1)
  6. android菜鸡提升之路---实现一个积木拼图游戏
  7. “有心杀敌,无力回天”的无奈
  8. grpc---客户端流式
  9. 【阿里云镜像】使用阿里云Docker CE 镜像安装Docker
  10. 【iOS】遍历相册照片