为简单起见,假设我想在每次触发特定的长按手势时记录,但我不想在手势可能定位的每个选择器中都有日志代码。我希望将代码放在一个地方,最好是在特定手势的子类中,这样当它进入开始状态时,就会执行日志代码。
如何针对手势的子类进行此操作?
我知道如何覆盖手势的initWithTarget方法的唯一方法是,存储NSInvocation对象中指定的目标/动作,用我的日志代码替换目标/动作,并让我的日志代码调用存储的NSInvocation对象它完成了。一种中间人的技术。我真的不喜欢这个实现,看起来很骇人听闻。
编辑:这是一个长按手势。我不知道UIGestureRecognizerSubclass.h,但是现在我知道了,在识别手势之前触摸了Head触发器。我如何专门观察被识别的手势?覆盖setState似乎有效,但等待识别状态不会触发,直到触发动作为止。
答案 0 :(得分:0)
当我问这个问题时,我不知道两件作品。
导入UIGestureRecognizerSubclass.h会覆盖状态读/写而不是只读。
touchesBegan,在导入UIGestureRecognizerSubclass后也只能覆盖,只是用于触摸本身。观察手势本身进入状态的正确方法是覆盖国家的制定者。
答案:导入UIGestureRecognizerSubclass并覆盖状态的setter。通过这样做,您可以在手势调用目标选择器之前执行自己的代码。
示例:
#import <UIKit/UIGestureRecognizerSubclass.h>
-(void)setState:(UIGestureRecognizerState)state
{
if (state == UIGestureRecognizerStateBegan)
{
analyticsForStealthViewRevealElement(self);
}
else
{
// Do nothing
}
[super setState:state];
}