- (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. Java 静态方法、私有方法、常量的使用

    1.静态方法 2.私有方法 3.常量 4.接口小结

  2. Flutter-stack層疊樣式

    alignment調整佈局 var stack = new Stack( alignment: Alignment.center,//元素居中 //alignment: Alignment (1,1) ...

  3. Java第二阶段笔记

    抽象类不能创建对象 抽象类可以有构造方法成员变量成员方法静态方法final修饰的方法(只能被子类调用,不能被重写)抽象方法(可以有0个或多个) 抽象方法不能有方法体,只能以:结尾,只能存在于抽象方法中 ...

  4. TreeMap定制排序和自然排序

    TreeMap定制排序和自然排序自然排序是实现Comparable接口的方法.代码如下: @Override public int compareTo(Object o) { if (o instan ...

  5. spring security权限架架mvn坐标

    <!-- spring security start --> <dependency> <groupId>org.springframework.security& ...

  6. KindEditor 完全复制word内容

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...

  7. C#[WinForm]实现自动更新

    C#[WinForm]实现自动更新 winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个 ...

  8. SQL利用Case When Then Else End 多条件判断

    Select Case When a is not null then a When b is not null then b When c is not null then c When d is ...

  9. ubuntu14编译安装qt5.0.1

    http://hi.baidu.com/houxn22/item/d652f29dec4a701f924f41a0 1.进入官网:http://qt-project.org/downloads下载对应 ...

  10. 1.安装TypeScrpit

    https://www.tslang.cn/index.html 1.vs安装 之前网上的查的安装方法是先安装nodejs,之后执行 npm install -g typescript 但是从官网的下 ...