全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

IOS中各种手势操作实例代码

先看下效果

手势相关的介绍

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 ()<UIGestureRecognizerDelegate>
@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;
}

以上所述是小编给大家介绍的IOS中各种手势操作实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# ios  # 手势操作  # iOS实现手势滑动解锁功能简析  # iOS左滑手势失效的解决方法  # IOS开发之手势响应事件优先级的实例详解  # IOS 开发之swift中手势的实例详解  # IOS开发笔记之禁用手势滑动返回功能的示例  # IOS中多手势之间的冲突和解决办法  # IOS 单击手势的添加实现代码  # 开发绘图、手势综合App注意点  # 多个  # 每次都  # 清空  # 是从  # 就得  # 双击  # 小编  # 单击  # 坐标点  # 最多只能  # 默认为  # 往右  # 几个  # 太多  # 子类  # 在此  # 基础上  # 点击数  # 可以用  # 几次 


相关文章: 如何做静态网页,sublimetext3.0制作静态网页?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  制作公司内部网站有哪些,内网如何建网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  网站制作模板下载什么软件,ppt模板免费下载网站?  如何在服务器上配置二级域名建站?  Swift中swift中的switch 语句  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何正确选择百度移动适配建站域名?  高防服务器如何保障网站安全无虞?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  如何获取免费开源的自助建站系统源码?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  nginx修改上传文件大小限制的方法  公司网站设计制作厂家,怎么创建自己的一个网站?  表情包在线制作网站免费,表情包怎么弄?  如何快速登录WAP自助建站平台?  网站制作员失业,怎样查看自己网站的注册者?  C#怎么创建控制台应用 C# Console App项目创建方法  如何通过西部建站助手安装IIS服务器?  如何在自有机房高效搭建专业网站?  建站之星免费模板:自助建站系统与智能响应式一键生成  Python如何创建带属性的XML节点  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  大连网站设计制作招聘信息,大连投诉网站有哪些?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何高效完成独享虚拟主机建站?  如何选择可靠的免备案建站服务器?  如何制作一个表白网站视频,关于勇敢表白的小标题?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何通过wdcp面板快速创建网站?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  广州建站公司哪家好?十大优质服务商推荐  简历在线制作网站免费版,如何创建个人简历?  如何登录建站主机?访问步骤全解析  ,想在网上投简历,哪几个网站比较好?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  山东网站制作公司有哪些,山东大源集团官网?  如何基于云服务器快速搭建个人网站?  自助网站制作软件,个人如何自助建网站?  建站之星如何助力网站排名飙升?揭秘高效技巧  微课制作网站有哪些,微课网怎么进?  深入理解Android中的xmlns:tools属性  建站之星安装提示数据库无法连接如何解决? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。