- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor]; _imageView = [[UIImageView alloc]initWithFrame:CGRectMake((self.view.frame.size.width-)/, (self.view.frame.size.height-)/, , )];
_imageView.userInteractionEnabled = YES;//交互使能,允许界面交互
_imageView.image = [UIImage imageNamed:@"cat.png"];
[self.view addSubview:_imageView]; // 单击的 TapRecognizer
UITapGestureRecognizer *singleTap;
singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(SingleTap:)];
singleTap.numberOfTapsRequired = ; //点击的次数 =1 单击 [_imageView addGestureRecognizer:singleTap];//给对象添加一个手势监测; // 双击的 TapRecognizer
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(DoubleTap:)];
doubleTap.numberOfTapsRequired = ; //点击的次数 =2 双击
[_imageView addGestureRecognizer:doubleTap];//给对象添加一个手势监测; /*
1.双击手势确定监测失败才会触发单击手势的相应操作,否则双击时第一击时会响应单击事件
2.会造成单击时要判断是否是双击,调用单击会有所延时。属正常现象。
*/
[singleTap requireGestureRecognizerToFail:doubleTap]; //捏合缩放手势 Pinch
UIPinchGestureRecognizer *pinch;
pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)];
// [_imageView addGestureRecognizer:pinch];//添加到_imageView的时候,是要把手指放到_imageView操作
[self.view addGestureRecognizer:pinch];//是self的时候,操作整个view都可以捏合_imageView(在响应事件中操作)
pinch.delegate = self; //旋转手势 Rotation
UIRotationGestureRecognizer *rotateRecognizer = [[UIRotationGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleRotate:)];
[self.view addGestureRecognizer:rotateRecognizer];//是self的时候,操作整个view都可以捏合_imageView(在响应事件中操作)
rotateRecognizer.delegate = self; //滑动手势 SwipeRecognizer
UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleSwipe:)];
[self.view addGestureRecognizer:swipeRecognizer];//是self的时候,操作整个view都可以捏合_imageView(在响应事件中操作)
swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;//操作为左滑
swipeRecognizer.delegate = self; //拖动手势 PanRecognizer
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc]
initWithTarget:self
action:@selector(handlePan:)];
[_imageView addGestureRecognizer:panRecognizer];//关键语句,添加一个手势监测;
panRecognizer.maximumNumberOfTouches = ;
panRecognizer.delegate = self; //长按手势 LongPressRecognizer
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handlelongPress:)];
[_imageView addGestureRecognizer:longPressRecognizer];
longPressRecognizer.minimumPressDuration = 1.0f;//触发长按事件时间为:1.0秒
longPressRecognizer.delegate = self; } -(void)SingleTap:(UITapGestureRecognizer*)recognizer
{
//处理单击操作
NSLog(@"单击操作");
} -(void)DoubleTap:(UITapGestureRecognizer*)recognizer
{
//处理双击操作
NSLog(@"双击操作");
} - (void)handlePinch:(UIPinchGestureRecognizer*)recognizer
{
NSLog(@"缩放操作");//处理缩放操作
//对imageview缩放
_imageView.transform = CGAffineTransformScale(_imageView.transform, recognizer.scale, recognizer.scale);
//对self.view缩放,因为recognizer是添加在self.view上的
//recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = ;
} - (void)handleRotate:(UIRotationGestureRecognizer*) recognizer
{
NSLog(@"旋转操作");//处理旋转操作
//对imageview旋转
_imageView.transform = CGAffineTransformRotate(_imageView.transform, recognizer.rotation);
//对self.view旋转,因为recognizer是添加在self.view上的
// recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
recognizer.rotation = ;
} - (void)handleSwipe:(UISwipeGestureRecognizer*) recognizer
{
//处理滑动操作
if(recognizer.direction==UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"左滑滑动操作");
}else if(recognizer.direction==UISwipeGestureRecognizerDirectionRight){
NSLog(@"右滑滑动操作");
}
} -(void)handlePan:(UIPanGestureRecognizer*)recognizer
{
NSLog(@"拖动操作");
//处理拖动操作,拖动是基于imageview,如果经过旋转,拖动方向也是相对imageview上下左右移动,而不是屏幕对上下左右
CGPoint translation = [recognizer translationInView:_imageView];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:_imageView];
} -(void)handlelongPress:(UILongPressGestureRecognizer*)recognizer
{
//处理长按操作,开始结束都会调用,所以长按1次会执行2次
if(recognizer.state == UIGestureRecognizerStateBegan){
NSLog(@"开始长按操作");
}else if(recognizer.state == UIGestureRecognizerStateEnded){
NSLog(@"结束长按操作");
}
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

UIGestureRecognizer 手势的更多相关文章

  1. 【学习总结】UIGestureRecognizer(手势识别器)

    基本知识点 : -> IOS 3.2之后 , 苹果推出了手势识别功能 ( Gesture Recognizer ) 在触摸事件处理方面 , 简化开发难度. -> UIGesture Rec ...

  2. UIGestureRecognizer 手势浅析

    目录[-] iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 一.引言 二.手势的抽象类——UIGestureRecognizer 1.统一的初始化方法 2.手势状态 ...

  3. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

  4. IOS 响应者链条 and UIGestureRecognizer 手势识别器)

    一次完整的触摸事件的传递响应的过程 UIAppliction --> UIWiondw -->递归找到最适合处理事件的控件 控件调用touches方法-->判断是否实现touches ...

  5. UIGestureRecognizer手势

    常用手势: 滑动,轻点,捏合,旋转,拖拽,长按 1.滑动(快速滑动) let swipeUp = UISwipeGestureRecognizer(target: self, action: Sele ...

  6. UI中的七种手势

    // // GestureRecognizerViewController.m #import "GestureRecognizerViewController.h" #impor ...

  7. iOS_38_手势

    Pan平移手势 终于效果图: Swipe轻扫手势 LongPress长按手势 Pinch和Rotation手势 捏合(缩放)和旋转 终于效果图: 涂鸦 终于效果图: 事件分3大类:触摸.加速计.远程遥 ...

  8. UI中各种手势的使用点击,捏合,清扫,旋转,平移,边缘移动,长按

    #import "RootViewController.h" @interface RootViewController (){    UIImageView *imageView ...

  9. DesignModeler GestureRecgin…

    DesignModeler : 设计模式     GestureRecginzer:手势识别 作者:韩俊强 原创版权地址:http://blog.sina.com.cn/s/blog_814ecfa9 ...

随机推荐

  1. pandas数据查询(数值、列表、区间、条件、函数)

    import pandas as pd # 0 读取数据 df = pd.read_csv("文件路径")#例子是北京一年的天气情况 df.head()#查看表头 # 设定索引为日 ...

  2. alert(1) to win 5

    function escape(s) { var text = s.replace(/</g, '<').replace(/"/g, '"'); // URLs tex ...

  3. 远程连接Linux相关操作

    1.远程连接的步骤 编译网卡配置文件,修改onboot参数 vi /etc/sysconfig/network-scripts/ifcfg-ens33进入命令之后将onboot改成onboot=yes ...

  4. 英语单词leading

    leading 来源——https://www.docker.com/products/docker-hub 翻译 a. 领导的,指导的:最主要的 词根词缀词源 leader汉语英译为了“领导”

  5. Chronograf启动(Influxdb的管理平台)

    1.创建一个bat文件,文件内容如下 @echo off:: 开启chronograf服务,服务监听端口9084echo 开启chronograf服务chronograf.exe /port 9084 ...

  6. OC + RAC (二) Command 命令的用法

    -(void)_test2{ ///////////////////////////////////////Command 命令的用法 注意使用command.executionSignals去订阅时 ...

  7. PHP中什么是数组

    PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型. 此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集 ...

  8. ubuntu 18.04设置系统自带系统截图快捷键

    0.前言 ubuntu 18.04自带一个截图工具gnome-screenshot,有三种模式,全屏截图.当前活动窗口截图.选取活动区域截图 1.设置快捷键 Setting->Devices-& ...

  9. next_permutation():按字典序输出下一个排列

    #include<iostream> #include<algorithm> using namespace std; int main() { int data[4]={5, ...

  10. Java 内部类“覆盖"

    Think in Java  P269 如果子类中的内部类和父类中内部类一样,这好像子类内部类“覆盖”了父类的内部类,但其实没有代表着什么. public class BigEgg extends E ...