UI进阶--手势识别

为了完成手势识别,必须借助于手势识别器----UIGestureRecognizer

利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势

UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势

UITapGestureRecognizer(敲击)

UIPinchGestureRecognizer(捏合,用于缩放)

UIPanGestureRecognizer(拖拽)

UISwipeGestureRecognizer(轻扫)

UIRotationGestureRecognizer(旋转)

UILongPressGestureRecognizer(长按)

手势识别的状态:

 1 typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
 2     // 没有触摸事件发生,所有手势识别的默认状态
 3     UIGestureRecognizerStatePossible,
 4     // 一个手势已经开始但尚未改变或者完成时
 5     UIGestureRecognizerStateBegan,
 6     // 手势状态改变
 7     UIGestureRecognizerStateChanged,
 8     // 手势完成
 9     UIGestureRecognizerStateEnded,
10     // 手势取消,恢复至Possible状态
11     UIGestureRecognizerStateCancelled,
12     // 手势失败,恢复至Possible状态
13     UIGestureRecognizerStateFailed,
14     // 识别到手势识别
15     UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
16 };

每一个手势识别器的用法都差不多,比如UITapGestureRecognizer的使用步骤如下

 1 //创建手势识别器对象
 2 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
 3 //设置手势识别器对象的具体属性
 4 // 连续敲击2次
 5 tap.numberOfTapsRequired = 2;
 6 // 需要2根手指一起敲击
 7 tap.numberOfTouchesRequired = 2;
 8 //添加手势识别器到对应的view上
 9 [self.iconView addGestureRecognizer:tap];
10 //监听手势的触发
11 [tap addTarget:self action:@selector(tapIconView:)];

敲击手势--UITapGestureRecognizer
①敲击手势对象相关属性

1 @property (nonatomic) NSUInteger  numberOfTapsRequired; //敲击次数,默认是1
2 @property (nonatomic) NSUInteger  numberOfTouchesRequired;//多点敲击,默认是1

②代理方法 "实现左半边才接收触摸事件"

1 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;//是否接受触摸事件 

长按手势--UILongPressGestureRecognizer
长按手势对象相关属性

1 @property (nonatomic) CFTimeInterval minimumPressDuration; //长按的时间,默认是0.5.
2 @property (nonatomic) CGFloat allowableMovement; //触摸点周围多远的距离内长按有效,默认是50(CGPoint)

轻扫手势--UISwipeGestureRecognizer
轻扫手势对象相关属性

1 @property(nonatomic) UISwipeGestureRecognizerDirection direction; //轻扫的方向,是一个枚举型
1 typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {
2     UISwipeGestureRecognizerDirectionRight = 1 << 0,//向右轻扫,默认为向右轻扫
3     UISwipeGestureRecognizerDirectionLeft  = 1 << 1,//向左轻扫
4     UISwipeGestureRecognizerDirectionUp    = 1 << 2,//向上轻扫
5     UISwipeGestureRecognizerDirectionDown  = 1 << 3//向下轻扫
6 };

捏合手势--UIPinchGestureRecognizer
捏合手势对象相关属性

1 @property (nonatomic)          CGFloat scale; //缩放比例,是一个累加的过程,如果想不累加,把scale设为1即可
2 //例子:
3 - (void)pinvhView:(UIPinchGestureRecognizer *)pinch {
4     self.pinView.transform = CGAffineTransformScale(self.pinView.transform,pinch.scale,pinch.scale);
5     pinch.scale = 1;
6 }

旋转手势--UIRotationGestureRecognizer
①旋转手势对象相关属性

1 @property (nonatomic)          CGFloat rotation;  //旋转角度,也是一个累加的过程,如果想它不累加,把其设为0即可。
2 //例子
3 - (void)rotationView:(UIRotationGestureRecognizer *)pinch {
4     self.pinView.transform = CGAffineTransformRotate(self.pinView.transform,pinch.rotation);
5     pinch.rotation = 0;
6 }

②如果捏合和旋转想同时使用,设置其中一个手势的代理并实现代理的一个方法

1 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;//实现该方法,返回YES即可,允许跟其它手势一起发生

拖拽手势--UIPanGestureRecognizer

拖拽手势对象相关方法和属性:

1 @property (nonatomic)          NSUInteger minimumNumberOfTouches;   // default is 1. the minimum number of touches required to match
2 @property (nonatomic)          NSUInteger maximumNumberOfTouches;   // default is UINT_MAX. the maximum number of touches that can be down
3
4 - (CGPoint)translationInView:(UIView *)view;                        // translation in the coordinate system of the specified view
5 - (void)setTranslation:(CGPoint)translation inView:(UIView *)view;
6
7 - (CGPoint)velocityInView:(UIView *)view;                           // velocity of the pan in pixels/second in the coordinate system of the specified view
时间: 2024-12-15 18:08:53

UI进阶--手势识别的相关文章

UI进阶 即时通讯之XMPP好友列表、添加好友、获取会话内容、简单聊天

这篇博客的代码是直接在上篇博客的基础上增加的,先给出部分代码,最后会给出能实现简单功能的完整代码. UI进阶 即时通讯之XMPP登录.注册 1.好友列表 初始化好友花名册 1 #pragma mark - 管理好友 2 // 获取管理好友的单例对象 3 XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance]; 4 // 用管理好友的单例对象初始化Roster花名册 5 // 好友操

UI进阶 XML解析适配 &#39;libxml/tree.h&#39;file not found 错误解决办法

Xcode 'libxml/tree.h'file not found 错误解决办法 在工程的"Build Settings"页中找到"Header Search Path"项,添加"/usr/include/libxml2".在"Other Linker Flags"项,添加"-lxml2" UI进阶 XML解析适配 'libxml/tree.h'file not found 错误解决办法

Android更新Ui进阶精解(二)

<代码里的世界> 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/45115047 Android更新Ui进阶精解(一) android ui线程检查机制 Android更新Ui进阶精解(二) android 线程更新UI机制 1.回顾 第一篇讲了对Ui线程更新的方法和见解,然后接着讲了线程检查机制,这里来详细分析下更新Ui的核心--Android中消息系统模型.当然,这里要

IOS之--UI进阶-- 多控制器管理第一天

 iOS之--UI进阶-- 多控制器管理第一天 01-项目中常见的文件(LaunchScreen) Xcode5 框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架. Xcode6 会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架. LaunchScreen.xib:用来设置启动界面. Xcode7 会自动导入一些觉见的框架.在项目结构当中,看不到已经导入的框架. LaunchScreen.storyBoard LaunchScreen原理: 会自动加载Launch

UI进阶 XML解析适配 引入GDataXML文件时候 &#39;libxml/tree.h&#39;file not found 错误解决办法

在工程的"Build Settings"页中找到"Header Search Path"项,添加"/usr/include/libxml2". 在"Other Linker Flags"项,添加"-lxml2" 同理引入别的类型文件不匹配的时候也可以用这种方法 UI进阶 XML解析适配 引入GDataXML文件时候 'libxml/tree.h'file not found 错误解决办法

android UI进阶之实现listview中checkbox的多选与记录

今天继续和大家分享涉及到listview的内容.在很多时候,我们会用到listview和checkbox配合来提供给用户一些选择操作.比如在一个清单页面,我们需要记录用户勾选了哪些条目.这个的实现并不太难,但是有很多朋友来问我如何实现,他们有遇到各种各样的问题,这里就一并写出来和大家一起分享. ListView的操作就一定会涉及到item和Adapter,我们还是先来实现这部分内容. 首先,写个item的xml布局,里面放置一个TextView和一个CheckBox.要注意的时候,这里我设置了C

android UI进阶之实现listview的分页加载

 分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现. 首先,

IOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别

触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 二.UIResponder UIResponder内部提供了以下方法来处理事件触摸事件- (v

[iOS UI进阶 - 0] Quiartz2D

A.简介 1. 需要掌握的 drawRect:方法的使用 常见图形的绘制:线条.多边形.圆 绘图状态的设置:文字颜色.线宽等 图形上下文状态的保存与恢复 图形上下文栈 1.基本图形绘制* 线段(线宽.线段样式)* 矩形(空心.实心.颜色)* 三角形.梯形等形状* 椭圆\圆* 圆弧* 文字绘制* 图片绘制(pattern)* 图形上下文栈 2.练习(画人) 3.模仿UIImageView 4.自定义checkbox 5.图片裁剪 6.图片水印 7.条纹背景 8.截图     2.概念 Quartz