在任何地方使用手势的自定义代码?

时间:2017-08-05 18:00:40

标签: ios objective-c uigesturerecognizer

为简单起见,假设我想在每次触发特定的长按手势时记录,但我不想在手势可能定位的每个选择器中都有日志代码。我希望将代码放在一个地方,最好是在特定手势的子类中,这样当它进入开始状态时,就会执行日志代码。

如何针对手势的子类进行此操作?

我知道如何覆盖手势的initWithTarget方法的唯一方法是,存储NSInvocation对象中指定的目标/动作,用我的日志代码替换目标/动作,并让我的日志代码调用存储的NSInvocation对象它完成了。一种中间人的技术。我真的不喜欢这个实现,看起来很骇人听闻。

编辑:这是一个长按手势。我不知道UIGestureRecognizerSubclass.h,但是现在我知道了,在识别手势之前触摸了Head触发器。我如何专门观察被识别的手势?覆盖setState似乎有效,但等待识别状态不会触发,直到触发动作为止。

1 个答案:

答案 0 :(得分:0)

当我问这个问题时,我不知道两件作品。

  1. 导入UIGestureRecognizerSubclass.h会覆盖状态读/写而不是只读。

  2. touchesBegan,在导入UIGestureRecognizerSubclass后也只能覆盖,只是用于触摸本身。观察手势本身进入状态的正确方法是覆盖国家的制定者。

  3. 答案:导入UIGestureRecognizerSubclass并覆盖状态的setter。通过这样做,您可以在手势调用目标选择器之前执行自己的代码。

    示例:

    #import <UIKit/UIGestureRecognizerSubclass.h>
    
    -(void)setState:(UIGestureRecognizerState)state
    {
        if (state == UIGestureRecognizerStateBegan)
        {
            analyticsForStealthViewRevealElement(self);
        }
        else
        {
            // Do nothing
        }
    
        [super setState:state];
    }