做IM聊天功能的时候,有个录制语音并发送的需求,用到了录制语音按钮的点击事件,按照不同的UIControlEvents类型,进行不同的操作来满足需求。
typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
UIControlEventTouchDown = 1 << 0, // on all touch downs
UIControlEventTouchDownRepeat = 1 << 1, // on multiple touchdowns (tap count > 1)
UIControlEventTouchDragInside = 1 << 2,
UIControlEventTouchDragOutside = 1 << 3,
UIControlEventTouchDragEnter = 1 << 4,
UIControlEventTouchDragExit = 1 << 5,
UIControlEventTouchUpInside = 1 << 6,
UIControlEventTouchUpOutside = 1 << 7,
UIControlEventTouchCancel = 1 << 8,
UIControlEventValueChanged = 1 << 12, // sliders, etc.
UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13, // semantic action: for buttons, etc.
UIControlEventEditingDidBegin = 1 << 16, // UITextField
UIControlEventEditingChanged = 1 << 17,
UIControlEventEditingDidEnd = 1 << 18,
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing
UIControlEventAllTouchEvents = 0x00000FFF, // for touch events
UIControlEventAllEditingEvents = 0x000F0000, // for UITextField
UIControlEventApplicationReserved = 0x0F000000, // range available for application use
UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use
UIControlEventAllEvents = 0xFFFFFFFF
};
上面是整个UIControlEvents枚举,接下来结合做录音的经历,简单总结常用的UIControlEvents类型:
先贴上项目中做发送语音功能时用到的UIControlEvents元素
[_recordBtn addTarget:self action:@selector(holdDownButtonTouchDown) forControlEvents:UIControlEventTouchDown];
[_recordBtn addTarget:self action:@selector(holdDownButtonTouchUpOutside) forControlEvents:UIControlEventTouchUpOutside];
[_recordBtn addTarget:self action:@selector(holdDownButtonTouchDragExit) forControlEvents:UIControlEventTouchDragExit];
[_recordBtn addTarget:self action:@selector(holdDownButtonTouchDragEnter) forControlEvents:UIControlEventTouchDragEnter];
[_recordBtn addTarget:self action:@selector(holdDownButtonTouchUpInside) forControlEvents:UIControlEventTouchUpInside];
1. UIControlEventTouchDown
手指按下(注:只是“按下”)的动作,触发holdDownButtonTouchDown
方法,此时开始进行录音操作
2. UIControlEventTouchDragInside
手指按下,手指位于控件边界范围内拖动(UIControlEventTouchDown --> UIControlEventTouchDragInside ),项目中没用到这个类型。
3. UIControlEventTouchDragExit
手指按下,手指从控件边界内拖动到外时产生的事件(UIControlEventTouchDown --> UIControlEventTouchDragInside --> UIControlEventTouchDragExit)。
触发holdDownButtonTouchDragExit
方法,此时暂停录音
4. UIControlEventTouchDragOutside
手指按下,手指位于控件边界范围之外拖动(UIControlEventTouchDown --> UIControlEventTouchDragInside --> UIControlEventTouchDragExit --> UIControlEventTouchDragOutside),项目中没用到这个类型。
5. UIControlEventTouchDragEnter
指拖动动作中,从控件边界外到内时产生的事件(UIControlEventTouchDown --> UIControlEventTouchDragInside --> UIControlEventTouchDragExit --> UIControlEventTouchDragOutside --> UIControlEventTouchDragEnter)。
触发holdDownButtonTouchDragEnter
方法,此时继续录音
6. UIControlEventTouchUpInside
手指在控件边界范围内抬起,触发holdDownButtonTouchUpInside
方法,录音结束并发送语音。
7. UIControlEventTouchUpOutside
手指在控件边界范围外抬起,触发holdDownButtonTouchUpOutside
方法,录音取消,清除缓存。
网友评论