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 设计模式将这些手势操作绑定到这些对象上,比如
一个事件按照特定的路径寻找处理它的对象 当 iOS 识别一个事件后,它会将这个事件发送给和它最近的对象,比如一个被触摸的视图,如果这个对象不能处理它,它会传递给下一级的对象,走到有人可以处理它,这是一种响应链设计模式。
一个 UIEvent 包括了触摸(Touch), 摇晃(Shake-Motion), 或远程控制(Remote-Control)事件 很多事件都是 UIEvent 类的实例。一个 UIEvent 对象包括了很多你如何响应用户的事件. 一个用户动作,比如手指触摸和在屏幕移动上移动,都会不断有事件对象发向App 去处理它们。每个事件都有一个触摸类型,比如摇晃,远程控制等。
当用户触摸视图时,APP 会接收到 Multitouch 事件
APP 本身的 UIKit 控制器和手势识别基本满足你所有的触摸事件操作,甚至你可以自定义 UIView 实现自己的手势识别规则
当用户移动他们的设备时,APP 会接收到 Motion 事件
Motion 事件支持的信息包括设备位置,方向,动作,他们都会被记录到。你还可以通过加速度和陀螺仪添加微妙强大的功能应用程序
Motion 事件适用于不同的场景,我可以通过不同的框架操作它们。当你摇晃设备时,你可以通过 UIKit 框架收到 UIEvent 对象到你的 app. 如果你想app 可以接收,灵敏持续的加速计或陀螺仪数据 ,你可以使用 Core Motion Framework
APP 可接来自多媒体控件器发出的远程控制事件
这些事件可以控制声音和视频
Last updated