服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - IOS中各种手势操作实例代码

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

2021-03-11 15:54这酸爽! IOS

IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种,具体哪几种大家通过本文学习吧,本文重点给大家介绍IOS中各种手势操作实例代码,一起看看吧

先看下效果

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

手势相关的介绍

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

1、点击  uitapgesturerecognizer

2、平移  uipangesturerecognizer

3、缩放  uipinchgesturerecognizer

4、旋转  uirotationgesturerecognizer

5、轻扫  uiswipegesturerecognizer

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

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

1、uitapgesturerecognizer 点击手势

?
1
2
3
uitapgesturerecognizer* tapges = [[uitapgesturerecognizer alloc]initwithtarget:self action:@selector(tapges:)];
// 点击次数,默认为1,1为单击,2为双击
tapges.numberoftapsrequired = 2;

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

2、uipangesturerecognizer 平移手势

?
1
2
3
4
5
6
7
8
9
// 平移手势
- (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 缩放手势

?
1
2
3
4
5
6
7
8
9
// 缩放手势
- (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 旋转手势

?
1
2
3
4
5
6
7
8
9
// 旋转手势
- (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 轻扫手势

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 轻扫手势
- (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

?
1
2
3
4
uiswipegesturerecognizerdirectionright  从左向右(默认值)
uiswipegesturerecognizerdirectionleft   从右向左
uiswipegesturerecognizerdirectionup    从下向上
uiswipegesturerecognizerdirectiondown  从上向下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//
// 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 里面的一个返回参数的方法了

?
1
2
3
4
// 是否允许多手势操作,不是多触摸点
- (bool)gesturerecognizer:(uigesturerecognizer *)gesturerecognizer shouldrecognizesimultaneouslywithgesturerecognizer:(uigesturerecognizer *)othergesturerecognizer{
 return yes;
}

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

原文链接:http://www.cnblogs.com/xgao/archive/2017/03/27/6626446.html

延伸 · 阅读

精彩推荐
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25