博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS各种手势操作实例
阅读量:7051 次
发布时间:2019-06-28

本文共 6770 字,大约阅读时间需要 22 分钟。

先看下效果

手势相关的介绍

IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种:

1、点击  UITapGestureRecognizer

2、平移  UIPanGestureRecognizer

3、缩放  UIPinchGestureRecognizer

4、旋转  UIRotationGestureRecognizer

5、轻扫  UISwipeGestureRecognizer

我们上面这个实例中就用到了上面这5种手势,不过其中 点击与轻扫没有体现出来,只是输出了下日志而已,一会看代码

下面我们来分别介绍下这几种手势

1、UITapGestureRecognizer 点击手势

UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)];// 点击次数,默认为1,1为单击,2为双击tapGes.numberOfTapsRequired = 2;

这个点击手势类有一个属性 numberOfTapsRequired 用于设置点击数,就是点击几次才触发这个事

2、UIPanGestureRecognizer 平移手势

// 平移手势- (void)initPanGes{        UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)];        [self.imgView addGestureRecognizer:panGes];}- (void)panGes:(UIPanGestureRecognizer*)ges{        // 获取平移的坐标点    CGPoint transPoint =  [ges translationInView:self.imgView];}

平移手势本身没太多可设置的属性,在平移事件触发手,可以用  translationInView 方法获取当前平移坐标点

3、UIPinchGestureRecognizer 缩放手势

// 缩放手势- (void)initPinGes{        UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)];    [self.imgView addGestureRecognizer:pinGes];}- (void)pinGes:(UIPinchGestureRecognizer*)ges{        // 缩放    self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale);}

缩放手势在事件里面可以获取 scale 属性,表示当前缩放值

4、UIRotationGestureRecognizer 旋转手势

// 旋转手势- (void)initRotation{        UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)];    [self.imgView addGestureRecognizer:rotationGes];}- (void)rotationGes:(UIRotationGestureRecognizer*)ges{        // 旋转图片    self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation);}

旋转手势在事件里面可以通过获取 rotation 属性获取当前旋转的角度

5、UISwipeGestureRecognizer 轻扫手势

// 轻扫手势- (void)initSwipeGes{        // 创建 从右向左 轻扫的手势    UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)];    // 方向,默认是从左往右    // 最多只能开启一个手势,如果要开启多个就得创建多个手势    // 监听从右向左的方向    swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft;    [self.imgView addGestureRecognizer:swipeLeftGes];}- (void)swipeGes:(UISwipeGestureRecognizer*)ges{        // ges.direction方向值    NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction);}

轻扫手势对象需要设置 direction 属性,默认是只监听从左向右,这是一个枚举值 UISwipeGestureRecognizerDirection

UISwipeGestureRecognizerDirectionRight  从左向右(默认值)

UISwipeGestureRecognizerDirectionLeft    从右向左

UISwipeGestureRecognizerDirectionUp    从下向上

UISwipeGestureRecognizerDirectionDown  从上向下

 

下面看一下我们上面那个效果图实现代码吧

////  ViewController.m//  各种手势操作////  Created by xgao on 16/3/24.//  Copyright © 2016年 xgao. All rights reserved.//#import "ViewController.h"@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imgView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; [self initTapGes]; [self initPanGes]; [self initPinGes]; [self initRotation]; [self initSwipeGes];}// 点击手势- (void)initTapGes{ UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)]; // 点击次数,默认为1,1为单击,2为双击 tapGes.numberOfTapsRequired = 2; tapGes.delegate = self; [self.imgView addGestureRecognizer:tapGes];}- (void)tapGes:(UITapGestureRecognizer*)ges{ NSLog(@"%s",__func__);}// 平移手势- (void)initPanGes{ UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)]; panGes.delegate = self; [self.imgView addGestureRecognizer:panGes];}- (void)panGes:(UIPanGestureRecognizer*)ges{ // 获取平移的坐标点 CGPoint transPoint = [ges translationInView:self.imgView]; // 在之前的基础上移动图片 self.imgView.transform = CGAffineTransformTranslate(self.imgView.transform, transPoint.x, transPoint.y); // 复原,必需复原 // 每次都清空一下消除坐标叠加 [ges setTranslation:CGPointZero inView:self.imgView]; NSLog(@"%s",__func__);}// 缩放手势- (void)initPinGes{ UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)]; pinGes.delegate = self; [self.imgView addGestureRecognizer:pinGes];}- (void)pinGes:(UIPinchGestureRecognizer*)ges{ // 缩放 self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale); // 复原 // 每次都清空一下消除叠加 ges.scale = 1;}// 旋转手势- (void)initRotation{ UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)]; rotationGes.delegate = self; [self.imgView addGestureRecognizer:rotationGes];}- (void)rotationGes:(UIRotationGestureRecognizer*)ges{ // 旋转图片 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation); // 复原 // 每次都清空一下消除叠加 ges.rotation = 0; NSLog(@"%s",__func__);}// 轻扫手势- (void)initSwipeGes{ // 创建 从右向左 轻扫的手势 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 方向,默认是从左往右 // 最多只能开启一个手势,如果要开启多个就得创建多个手势 // 监听从右向左的方向 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft; swipeLeftGes.delegate = self; [self.imgView addGestureRecognizer:swipeLeftGes]; // 创建 从下向上 轻扫的手势 UISwipeGestureRecognizer* swipeUpGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 监听从下向上的方向 swipeUpGes.direction = UISwipeGestureRecognizerDirectionUp; swipeUpGes.delegate = self; [self.imgView addGestureRecognizer:swipeUpGes];}- (void)swipeGes:(UISwipeGestureRecognizer*)ges{ // ges.direction方向值 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction);}#pragma mark - UIGestureRecognizerDelegate// 判断是否能触发手势- (BOOL)gestureRecognizerShouldBegin:(UITapGestureRecognizer *)gestureRecognizer{ return YES;}// 是否允许多手势操作,不是多触摸点- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES;}@end

 

这里需要注意的有两点:

1、对于 平移、缩放、旋转 这3个手势,我们如果要用它的值去处理的话,要记得复原!复原!复原!这点很重要!重要的事说3遍~~

  平移手势里面我们需要设置 setTranslation:CGPointZero 来复原它的坐标值,不然下一次事件触发这个坐标值会叠加

  缩放手势里面设置 ges.scale = 1 来复原它的缩放值
  旋转手势里面设置 ges.rotation = 0 来复原它的角度值

2、假如我们需要多手势一起用的时候就需要设置下delegate 里面的一个返回参数的方法了

  

// 是否允许多手势操作,不是多触摸点- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{        return YES;}

这次分享就到这里~~有什么不清楚的,就留言吧 ^_^

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/xgao/p/6626446.html

你可能感兴趣的文章
Windows系统下JSP程序开发环境配置
查看>>
Spring Cloud的前世今生
查看>>
Android Studio 教程(干货)
查看>>
hadoop datanode 不能连接 namenode
查看>>
VyOS--企业软路由推荐
查看>>
Winform动态创建控件对DPI的处理
查看>>
new关键字与malloc的区别
查看>>
《Just For Fun》阅读摘抄
查看>>
hibernate4.3.5.Final入门1
查看>>
python 发送邮件模块
查看>>
unqlite安装/使用/测试
查看>>
SQLite 查询或更新上一条插入的数据
查看>>
Win7下搭建android环境
查看>>
那些年不上运维自动化 NO ZUO NO DIE 写下的关机脚本
查看>>
Centos7下安装samba
查看>>
debian7 sudo失效
查看>>
逻辑运算符-||,即或
查看>>
扩展阅读- redis 配置参数详解
查看>>
Apr、Apr-Util 安装
查看>>
Blender中文版下载及相关资料
查看>>