如有错误,请多多指点
一个UIEvent对象(或者,一个简单的事件对象)表示在iOS的一个事件。有三种类型的事件:触摸事件、摇晃事件和遥控事件。遥控控制事件允许响应对象接收来自外部附件或耳机的命令,以便它可以管理音频和视频的管理。例如播放视频或跳转到下一个音轨。摇晃事件iOS3被引入和遥控事件iOS4被引入。
一个触摸类型的事件对象包含一个或多个触摸(即,在屏幕上的手指手势),有一定的关系的事件。一个触摸被一个UITouch对象所表示。当一个触摸事件被触发时,系统将会传给适合的相应对象并通过发送一个消息调用UIResponder方法如:touchesBegan : withEvent : 。响应对象可以分配触摸事件到合适的触摸类型并正确的处理它们。 UIEvent中的方法允许让你回去所有的触摸事件( allTouchs) 或者给定的视图或窗口(touchesForView: or touchesForWindow:)。它也可以分辨从响应对象传递过来的事件对象发生的时间(timestamp)。
一个UIEvent对象代表一个触摸事件贯穿可多个触摸事件的序列。UIKit 重用同一个UIEvent实例来分配每一个事件到应用程序。你不需要保持一个事件对象或者任何从事件对象返回的对象。如果你需要保存事件对象然后传递到另外一个对象,你需要从UITouch 或者UIEvent 对象中复制信息。
你可以通过类型(type)属性和子类型(subtype)属性获取事件类型和事件子类型。UIEvent定义了事件的类型为触摸、摇晃和遥控事件。它也定义了遥控事件的子类型,以及为遥控事件定义一系列的子类型,例如“播放”或“上一曲目”。在响应链中第一响应或任意响应者都能够实现关于UIResponder(例如, motionBegan:withEvent:)去处理摇动-摇晃事件。一个响应者去处理遥控事件,必须实现 remoteControlReceivedWithEvent:的UIResponder方法:
touchesForGestureRecognizer: 的方法被 引入是在iOS3.2,它允许你能查询所有触摸的一个正在处理的一个手势对象(一个UIGestureRecognizer 子类的实例)。
获取事件中的触摸对象
/* 1. - allTouches
* 返回值:返回与接收器相关联的所有触摸对象。
* iOS2.0之后可以用
* Objective-C
*/
- (nullable NSSet <UITouch *> *)allTouches;
/* 2. – touchesForView:
* 返回值:返回属于一个给定视图的触摸对象,用于表示由接收器所表示的事件。
* iOS2.0之后可以用
* Objective-C
*/
- (nullable NSSet <UITouch *> *)touchesForWindow:(UIWindow *)window;
/* 3. – touchesForWindow:
* 返回值:返回属于一个给定窗口的接收器的事件响应的触摸对象。
* iOS2.0之后可以用
* Objective-C
*/
- (nullable NSSet <UITouch *> *)touchesForView:(UIView *)view;</span>
获取事件属性
/* 事件发生的时间。(只能读取)
* iOS2.0之后可以用
*/
@property(nonatomic,readonly) NSTimeInterval timestamp
获取事件类型
/* 类型事件 (只读)
* iOS3.0之后可以用
*/
@property(nonatomic,readonly) UIEventType type NS_AVAILABLE_IOS(3_0);
/* 子类型事件 (只读)
* iOS3.0之后可以用
*/
@property(nonatomic,readonly) UIEventSubtype subtype NS_AVAILABLE_IOS(3_0);
获取触摸的一个手势
/* 返回值:返回触摸对象被传递到特殊手势识别
* iOS3.2之后可以用
*
*/
- (nullable NSSet <UITouch *> *)touchesForGestureRecognizer:(UIGestureRecognizer *)gesture NS_AVAILABLE_IOS(3_2);
数据类型
/* UIEventTypeTouches:触摸事件类型 iOS3.0之后可以用
* UIEventTypeMotion :摇晃事件类型 iOS3.0之后可以用
* UIEventTypeRemoteControl:遥控事件类型 iOS4.0之后可以用
* UIEventTypePresses:物理按钮事件类型 iOS9.0之后可以用
*/
typedef NS_ENUM(NSInteger, UIEventType) {
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
UIEventTypePresses NS_ENUM_AVAILABLE_IOS(9_0),
};
2.UIEventSubtype
typedef NS_ENUM(NSInteger, UIEventSubtype) {
//事件没有子类型 iOS3.0之后可以用
UIEventSubtypeNone = 0,
//事件子类型晃动的设备 iOS3.0之后可以用
UIEventSubtypeMotionShake = 1,
//遥控播放的事件子类型 iOS4.0之后可以用
UIEventSubtypeRemoteControlPlay = 100,
//遥控暂停的事件子类型 iOS4.0之后可以用
UIEventSubtypeRemoteControlPause = 101,
//遥控停止的事件子类型 iOS4.0之后可以用
UIEventSubtypeRemoteControlStop = 102,
//遥控播放和暂停之间的事件子类型 iOS4.0之后可以用
UIEventSubtypeRemoteControlTogglePlayPause = 103,
//遥控下一个的事件子类型 iOS4.0之后可以用
UIEventSubtypeRemoteControlNextTrack = 104,
//遥控上一个的事件子类型 iOS4.0之后可以用
UIEventSubtypeRemoteControlPreviousTrack = 105,
//遥控子类事件开始后寻找 iOS4.0之后可以用
UIEventSubtypeRemoteControlBeginSeekingBackward = 106,
//遥控子类事件结束后寻找 iOS4.0之后可以用
UIEventSubtypeRemoteControlEndSeekingBackward = 107,
//遥控子类事件开始前寻找 iOS4.0之后可以用
UIEventSubtypeRemoteControlBeginSeekingForward = 108,
//遥控子类事件开始前寻找 iOS4.0之后可以用
UIEventSubtypeRemoteControlEndSeekingForward = 109,
};