ios – UIGestureRecognizer知道它被调用的对象是什么?

前端之家收集整理的这篇文章主要介绍了ios – UIGestureRecognizer知道它被调用的对象是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个UIGestureRecognizer,我想在两个不同的UIView上工作,这两个UIView都在UiViewController的相同视图层次结构中. UIGestureRecognizer的操作在每个上都是一样的,所以我希望调用相同的函数(很明显),我将在运行时告诉我正在处理哪些UIViews.但是怎么样?我看不出UIGestureRecognizer正在携带对象信息.我是否遗漏了文档中的行或者gestureRecognizer不知道它被附加到哪个对象上?似乎语言的意义在于它会知道.

或者,也许我误解了班级的意图,我不应该:

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                        action: @selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTap]; 
[viewB addGestureRecognizer: dblTap];

然后期望能够:

-(void)handleDblTap: (UIGestureRecognizer *)gestureRecognizer
{
     if (viewA)...

如果事实上UIGestureRecognizer不支持同时附加到多个对象,那么,如果你知道为什么它不支持这个,你能教育我吗?谢谢您的帮助.

解决方法

标准是每个识别器一个视图.但您仍然可以有效地使用一种处理程序方法.

你会像这样实例化识别器:

UITapGestureRecognizer *dblTapViewA = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapViewA]; 

UITapGestureRecognizer *dblTapViewB = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];
[viewB addGestureRecognizer: dblTapViewB];

那么你的处理程序方法可能类似于:

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{
    if (tapRec.view == viewA){
        // double tap view a
    } else if (tapRec.view == viewB) {
        // double tap view b
    }
}

猜你在找的iOS相关文章