为简单起见,假设我想要记录每次触发特定的长按手势时的日志,但我不希望在该手势可能针对的每个选择器中都有日志代码。我希望将代码放在一个位置,最好是放在特定手势的子类中,这样当它进入开始状态时,日志代码就会被执行。
作为手势的一个子类,我们该怎么做呢?
我知道的唯一方法是覆盖手势的initWithTarget方法,存储在NSInvocation对象中指定的目标/动作,用我的日志代码替换目标/动作,并在完成时让日志代码调用存储的NSInvocation对象。一种中间人的技术。我真的不喜欢这个实现,它看起来很老套。
编辑:这是一个长按手势。我不知道UIGestureRecognizerSubclass.h,但现在我知道了,touchesBegan在手势被识别之前触发。我如何具体观察手势是否被识别?重写setState似乎是可行的,但是直到动作被触发之后,等待被识别的状态才会触发。
发布于 2017-08-06 21:25:44
当我问这个问题时,有两件事我是不知道的。
答案:导入UIGestureRecognizerSubclass并覆盖状态的设置器。通过这样做,你可以在手势调用的目标选择器上执行你自己的代码。
示例:
#import <UIKit/UIGestureRecognizerSubclass.h>
-(void)setState:(UIGestureRecognizerState)state
{
if (state == UIGestureRecognizerStateBegan)
{
analyticsForStealthViewRevealElement(self);
}
else
{
// Do nothing
}
[super setState:state];
}https://stackoverflow.com/questions/45524937
复制相似问题