IOS 应用运动事件分析

作者:朱克锋

邮箱:zhukefeng@iboxpay.com

转载请注明出处:http://blog.csdn.net/linux_zkf


当用户以特定方式移动设备,比如摇摆设备时,iPhone或者iPod touch会产生运动事件。运动事件源自设备加速计。系统会对加速计的数据进行计算,如果符合某种模式,就将它解释为手势,然后创建一个代表该手势的UIEvent对象,并发送给当前活动的应用程序进行处理。
请注意:在iPhone 3.0上,只有摇摆设备的动作会被解释为手势,并形成运动事件。
运动事件比触摸事件简单得多。系统只是告诉应用程序动作何时开始及何时结束,而不包括在这个过程中发生的每个动作的时间。而且,触摸事件中包含一个触摸对象的集合及其相关的状态,而运动事件中除了事件类型、子类型、和时间戳之外,没有其它状态。系统以这种方式来解析运动手势,避免和方向变化事件造成冲突。
为了处理运动事件,UIResponder的子类必须实现motionBegan:withEvent:或motionEnded:withEvent:方法之一,或者同时实现这两个方法。举例来说,如果用户希望赋以水平摆动和垂直摆动不同的意义,就可以在motionBegan:withEvent:方法中将当前加速计轴的值缓存起来,并将它们和motionEnded:withEvent:消息传入的值相比较,然后根据不同的结果进行动作。响应者还应该实现motionCancelled:withEvent:方法,以便响应系统发出的运动取消的事件。有些时候,这些事件会告诉您整个动作根本不是一个正当的手势。
应用程序及其键盘焦点窗口会将运动事件传递给窗口的第一响应者。如果第一响应者不能处理,事件就沿着响应者链进行传递,直到最终被处理或忽略,这和触摸事件的处理相类似(详细信息请参见“事件的传递”部分)。但是,摆动事件和触摸事件有一个很大的不同,当用户开始摆动设备时,系统就会通过motionBegan:withEvent:消息的方式向第一响应者发送一个运动事件,如果第一响应者不能处理,该事件就在响应者链中传递;如果摆动持续的时间小于1秒左右,系统就会向第一响应者发送motionEnded:withEvent:消息;但是,如果摆动时间持续更长,如果系统确定当前的动作不是摆动,则第一响应者会收到一个motionCancelled:withEvent:消息。

如果摆动事件沿着响应者链传递到窗口而没有被处理,且UIApplication的applicationSupportsShakeToEdit属性被设置为YES,则iPhone OS会显示一个带有撤消(Undo)和重做(Redo)的命令。缺省情况下,这个属性的值为NO。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值