手势UIGestureRecognizer
UIGestureRecognizer抽象类,六大手势是其子类;
- UITapGestureRecognizer 点击
- UIPinchGestureRecognizer 缩放
- UIRotationGestureRecognizer 旋转
- UISwipeGestureRecognizer 轻扫
- UIPanGestureRecognizer 拖动
- UILongPressGestureRecognizer 长按
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {//手势当前的状态
UIGestureRecognizerStatePossible, (默认)
UIGestureRecognizerStateBegan, (开始)
UIGestureRecognizerStateChanged,(已经改变)
UIGestureRecognizerStateEnded, (结束)
UIGestureRecognizerStateCancelled, (取消)
UIGestureRecognizerStateFailed, (失败)
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
}
一、拖动手势 UIPanGestureRecognizer
UIPanGestureRecognizer *panGesture =[[UIPanGestureRecognize alloc] initWithTarget:self action:@selection(handlePan:)];
[view addGestureRecognizer:panGesture];
- (void)handlePan:(UIPanGestureRecognizer *)panGesture{
CGPoint translation = [panGesture translationInView:self.view];
CGPoint point = CGPointMake(panGesture.view.center.x + translation.x,panGesture.view.center.y + translation.y);
panGesture.view.center = point;
[panGesture setTranslation:CGPointZero inView:self.view];
}
1、确保view是可交互的 view.userInteractionEnabled = yes;
2、translationInView (相对点击点的偏移量) locationInView(相对屏幕实时坐标);
3、setTranslation:CGPointZero inView(每次初始化位置) 和translationInView同时使用;
4、velocityInView (获取速度矢量)
二、捏合手势 UIPinchGestureRecognizer
UIPinchGestureRecognizer *phinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget: self action:@selector(handlePinch:)];
[view addGestureRecognizer:pinchGesture];
- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer{
CGFloat scale = recognizer.scale;
recognizer.view.transform = CGAffineTransformMakeScale(scale, scale);// 每次缩放都回复原来基础下变化
// recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, scale, scale);//在已经缩放大小基础下累加变化
// recognizer.scale = 1.0;
}
scale 缩放倍数 ,velocity 缩放速率;
三、旋转手势 UIRotationGestureRecognizer
UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotaton:)];
[view addGestureRecognizer:rotationGesture];
- (void)handleRotation:(UIRotationGestureRecognizer *)recognizer {
recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
recognizer.rotation = 0.0;
}
四、点击手势 UITapGestureRecognizer
@property (nonatomic) NSUInteger numberOfTapsRequired; // 点击次数(默认一次)
@property (nonatomic) NSUInteger numberOfTouchesRequired __TVOS_PROHIBITED; // 需要手字数(默认一个点击点)
五、长按手势 UILongPressGestureRecognizer
@property (nonatomic) NSUInteger numberOfTapsRequired; // Default is 0. The number of full taps required before the press for gesture to be recognized
@property (nonatomic) NSUInteger numberOfTouchesRequired __TVOS_PROHIBITED; // Default is 1. Number of fingers that must be held down for the gesture to be recognized @property (nonatomic) CFTimeInterval minimumPressDuration; // Default is 0.5. 最小长按时间
@property (nonatomic) CGFloat allowableMovement; // Default is 10. 长按时允许移动的距离
六、轻扫手势 UISwipeGestureRecognizer
typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {
UISwipeGestureRecognizerDirectionRight = << ,
UISwipeGestureRecognizerDirectionLeft = << ,
UISwipeGestureRecognizerDirectionUp = << ,
UISwipeGestureRecognizerDirectionDown = <<
};
@property(nonatomic) UISwipeGestureRecognizerDirection direction; //轻扫方向
号外:同时响应多种手势
设置手势delegate实现方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
手势UIGestureRecognizer的更多相关文章
- 点击事件touches与ios的手势UIGestureRecognizer
.h文件 @property (weak,nonatomic) IBOutlet UILabel *messageLabel;@property (weak,nonatomic) IBOutlet U ...
- [BS-25] IOS中手势UIGestureRecognizer概述
IOS中手势UIGestureRecognizer概述 一.概述 iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式: - (void)touches ...
- iOS手势UIGestureRecognizer的使用失效问题
问题:视图正常展示在界面中,父层是放在window上的,底部的一个控件的点击事件失效(所有设置都正常) 解决思路:虽然视图能够正常展示,但是发现父类视图的底部尺寸比子类的视图的尺寸小,也就是说上层视图 ...
- IOS手势UIGestureRecognizer
UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有6个子类处理具体的手势: 1.UITapGestureRecognizer (任意手指任意次数的点击) // 点击次数 ...
- 使用iOS手势UIGestureRecognizer
UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势 ...
- 屏蔽手势UIGestureRecognizer 先后响应
在iOS5一下对于手势的识别能力并不强,比如iOS6上面按钮的一个tap事件,最先接收的是uiview,并相应,而不是最上面的button,这时候就需要判断手势所在的位置和手势所在的控制器了 如下例子 ...
- iOS手势UIGestureRecognizer的使用及手势冲突的解决办法【转】
转自:iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 关于手势的一篇很好的帖子,转载过来免得丢失.你可能最感兴趣的是手势间的互斥处理,那么就搜索 4.手势间的互斥处 ...
- IOS中手势UIGestureRecognizer
通常在对视图进行缩放移动等操作的时候我们可以用UIScrollView,因为它里边自带了这些功能,我们要做的就是告诉UIScrollView的几个相关参数就可以了 但是没有实现旋转的手势即UIRota ...
- 关于iOS的手势UIGestureRecognizer问题
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) { UIGestureRecognizerStatePossible, // 尚未识别是何种手 ...
随机推荐
- 【POJ】1611 The Suspects
题目链接:http://poj.org/problem?id=1611 题意:有学生感染了SARS.一个学生可以加入很多小组.n个学生m个小组,每个小组有k个组内成员,后跟着k个成员的组内编号.让你求 ...
- 解决通过vmware克隆虚拟机后,无法上网的问题
注意:如果源主机是CentOS 6.8,复制出来的机器会出现无法上网. 如果源主机是CentOS 7,复制出来的机器可以正常上网.复制后,只要改下IP地址即可上网. 出现该问题的原因是,我们克隆后,将 ...
- Python学习笔记(五)——异常处理
Python 异常总结 异常名称 解释 AssertionError 断言语句(assert)失败:当assert关键字后边的条件为假时,程序将抛出该异常,一般用于在代码中置入检查点 OSError ...
- Java Queue队列
前言 Queue队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. ...
- react添加多个域名proxy代理,跨域
在package.json中加入如下: { "name": "demo", "version": "0.1.0", &q ...
- js实现F5键刷新后菜单保持之前状态以及监听F5页面刷新子iframe 而父页面不刷新
利用layui实现菜单效果时,刷新页面仍回到首页状态,需要 实现iframe子页面刷新父元素不刷新,下面是代码 //刷新时禁用F5的默认事件 $(document).keydown(function ...
- jquery高级编程学习
jquery高级编程 第1章.jQuery入门 类型检查 对象 类型检查表达式 String typeof object === "string" Number typeof ob ...
- JVM中堆栈
1.JVM是基于堆栈的虚拟机.JVM为每个新创建的线程都分配一个堆栈.也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的.堆栈以帧为单位保存线程的状态.JVM对堆栈只进行两种操作 ...
- oracle将查询结果横转纵
SELECT '残疾人|民政|综合治理|计划生育|物业监管|安全生产|环境类|司法信访|党建|社会组织|文化体育|社保' D , '53|52|51|50|49|48|47|5|4|3|2|1' g ...
- webpack官方文档学习
一.webpack是什么? webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 二.安装 前提条 ...