iOS TipsiOS 好东西

UIControlEvents 中各种event被触发的方式详解

2017-04-20  本文已影响108人  90de46ea2b08

做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方法,录音取消,清除缓存。

上一篇 下一篇

猜你喜欢

热点阅读