先看下效果
手势相关的介绍
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注意点
# 多个
# 每次都
# 清空
# 是从
# 就得
# 双击
# 小编
# 单击
# 坐标点
# 最多只能
# 默认为
# 往右
# 几个
# 太多
# 子类
# 在此
# 基础上
# 点击数
# 可以用
# 几次
相关文章:
如何用PHP工具快速搭建高效网站?
详解jQuery停止动画——stop()方法的使用
网站企业制作流程,用什么语言做企业网站比较好?
h5在线制作网站电脑版下载,h5网页制作软件?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何在万网ECS上快速搭建专属网站?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
开封网站制作公司,网络用语开封是什么意思?
如何快速上传自定义模板至建站之星?
宝塔建站助手安装配置与建站模板使用全流程解析
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
建站之星如何防范黑客攻击与数据泄露?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
高性价比服务器租赁——企业级配置与24小时运维服务
平台云上自助建站如何快速打造专业网站?
青岛网站建设如何选择本地服务器?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何高效完成独享虚拟主机建站?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何在万网开始建站?分步指南解析
如何在IIS中新建站点并解决端口绑定冲突?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
中山网站制作网页,中山新生登记系统登记流程?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
建站主机与服务器功能差异如何区分?
C++如何编写函数模板?(泛型编程入门)
怀化网站制作公司,怀化新生儿上户网上办理流程?
想学网站制作怎么学,建立一个网站要花费多少?
教学网站制作软件,学习*后期制作的网站有哪些?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何在Tomcat中配置并部署网站项目?
Android自定义控件实现温度旋转按钮效果
Android滚轮选择时间控件使用详解
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
微信小程序 五星评分(包括半颗星评分)实例代码
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
建站之星Pro快速搭建教程:模板选择与功能配置指南
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
建站之星后台密码遗忘或太弱?如何重置与强化?
寿县云建站:智能SEO优化与多行业模板快速上线指南
建站168自助建站系统:快速模板定制与SEO优化指南
移民网站制作流程,怎么看加拿大移民官网?
南京网站制作费用,南京远驱官方网站?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。