DO RUBY
Search…
Mobile
Modularization
Fundamental
iOS 13 兼容性适配检查
从头梳理内存与内存管理
ARC 与内存管理
iOS 上的蓝牙框架 - Core Bluetooth for iOS [译]
UIKit Class Hierarchy
事件交付: 响应链
iOS 手势操作详解
iOS 手势识别
Performance
Debug
Issue Review
Tips
3rd Party
Computer Science
重头梳理网络协议栈
Tools Guide
Git
Security
Debugger
Others
TECH MANAGER
Google VP 聊职场干货
无身份建立影响力 Influence without Authority
Powered By
GitBook
iOS 手势操作详解
为什么要有手势
在我们拿起手机时,除了语音外,最重要的交互操作就是通过手指触摸了。就如游戏机的手柄,电脑的键盘一样。在iPhone设备里,因为它没有物理键盘,所以每一个手势动作,必须准确的覆盖到每一个用户想要表达的真实意图。手势的重要性也不言而喻。
苹果如何设计手势
什么时候开始识别
当我们手机里的App启动时,它就运行在一个无限循环里,这样使它不会在打开后立即退出(NSRunloop),不过它也提供了打断这个循环的条件,比如触摸( UITrackingRunLoopMode )。当它发生时,会立即被App 接收到,可以让能响应手势事件的对象捕获到它,并根据用户的触摸动作作出回应。
捕捉用户触摸流程
当用户触摸屏幕或摇晃设备等操作时,iOS 会将这些操作信息,包括发生时间,动作等传递给你的App, 然后你可以根据这些信息、更自然的响应用户操作,并带来真实的体验。
关于 iOS 上的事件分类 (event)
事件被包装为一个对象发给你的APP, 在 iOS 设备里,事件有下面几类
多点触摸事件 (Multi-Touch events)
动作事件 (Motion events)
远程控制事件 (Remote control events)
UIKit 对手势的封装
iOS APP 可以识别多种手势操作,比如放大,捏合,滚动等。实际上一些常用的手势操作被封装到了 UIKit 框架里,比如UIControl的子类,如 UIButton 或 UISlider, 他们可以响应点击或滚动。你可以通过苹果设计的 target-action 设计模式将这些手势操作绑定到这些对象上,比如
[button addTarget:self action:@selector(pressedButton:) forControlEvents:UIControlEventTouchUpInside];
你也可以使用这种方式在一个普通的视图里添加手势绑定,这样他就可以像一个控件器样响应你的手势操作。
手势识别是对复杂的触摸动作,做出的一种抽像封装。你可以自己定制和识别特殊的手势动作,有不少第三方库提供了开源的代码,比如利用手势识别算法 [$1 Unistroke Recognizer](http://depts.washington.edu/aimgroup/proj/dollar/)实现复杂的手势识别操作。让它可以识别文字,手势密码等。
[iOS 的手势识别文档](/ios/gesture/recognizer/2014/08/28/ios-gesture-recognizers/)
一个事件按照特定的路径寻找处理它的对象 当 iOS 识别一个事件后,它会将这个事件发送给和它最近的对象,比如一个被触摸的视图,如果这个对象不能处理它,它会传递给下一级的对象,走到有人可以处理它,这是一种响应链设计模式。
iOS 事件交付: 响应链
一个 UIEvent 包括了触摸(Touch), 摇晃(Shake-Motion), 或远程控制(Remote-Control)事件 很多事件都是 UIEvent 类的实例。一个 UIEvent 对象包括了很多你如何响应用户的事件. 一个用户动作,比如手指触摸和在屏幕移动上移动,都会不断有事件对象发向App 去处理它们。每个事件都有一个触摸类型,比如摇晃,远程控制等。
多点触摸事件(Multitouch Events)
位移事件(Motion Events)
远程控制事件(Remote Control Events)
当用户触摸视图时,APP 会接收到 Multitouch 事件
APP 本身的 UIKit 控制器和手势识别基本满足你所有的触摸事件操作,甚至你可以自定义 UIView 实现自己的手势识别规则
当用户移动他们的设备时,APP 会接收到 Motion 事件
Motion 事件支持的信息包括设备位置,方向,动作,他们都会被记录到。你还可以通过加速度和陀螺仪添加微妙强大的功能应用程序
Motion 事件适用于不同的场景,我可以通过不同的框架操作它们。当你摇晃设备时,你可以通过 UIKit 框架收到 UIEvent 对象到你的 app. 如果你想app 可以接收,灵敏持续的加速计或陀螺仪数据 ,你可以使用 Core Motion Framework
APP 可接来自多媒体控件器发出的远程控制事件
这些事件可以控制声音和视频
Previous
事件交付: 响应链
Next
iOS 手势识别
Last modified
2yr ago
Copy link
Outline
为什么要有手势
苹果如何设计手势
什么时候开始识别
捕捉用户触摸流程
关于 iOS 上的事件分类 (event)
UIKit 对手势的封装