首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用手势的任何地方都可以使用自定义代码?

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

Stack Overflow用户
提问于 2017-08-06 02:00:40
回答 1查看 39关注 0票数 0

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

作为手势的一个子类,我们该怎么做呢?

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

编辑:这是一个长按手势。我不知道UIGestureRecognizerSubclass.h,但现在我知道了,touchesBegan在手势被识别之前触发。我如何具体观察手势是否被识别?重写setState似乎是可行的,但是直到动作被触发之后,等待被识别的状态才会触发。

EN

回答 1

Stack Overflow用户

发布于 2017-08-06 21:25:44

当我问这个问题时,有两件事我是不知道的。

  1. 导入UIGestureRecognizerSubclass.h将覆盖读/写状态,而不仅仅是read.
  2. touchesBegan,,后者也只有在导入UIGestureRecognizerSubclass之后才能被覆盖,这只是为了触摸本身。监视手势本身进入开始状态的正确方法是重写状态的setter。

答案:导入UIGestureRecognizerSubclass并覆盖状态的设置器。通过这样做,你可以在手势调用的目标选择器上执行你自己的代码。

示例:

代码语言:javascript
复制
#import <UIKit/UIGestureRecognizerSubclass.h>

-(void)setState:(UIGestureRecognizerState)state
{
    if (state == UIGestureRecognizerStateBegan)
    {
        analyticsForStealthViewRevealElement(self);
    }
    else
    {
        // Do nothing
    }

    [super setState:state];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45524937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档