【问题标题】:Block passing Gestures to SuperView阻止将手势传递给 SuperView
【发布时间】:2013-03-16 09:51:32
【问题描述】:

一个 ScrollView 有一些 SubViews....
ScrollView 包含其预定义的手势 (Pan) 和我的自定义手势 (Pan) 并同时识别它...
SubViews 还包含自定义平移手势......
除了子视图上的平移手势外,一切正常...
当我在 SubView 上进行平移时,它的 SuperView 也会接触并处理我不想要的...
当对子视图进行平移时,超级视图不应该识别它们...
我如何阻止将我的 SubView 手势传递给它的 SuperView?

【问题讨论】:

    标签: ios cocoa-touch uiview uipangesturerecognizer


    【解决方案1】:

    要阻止superview响应手势,当触摸点下有subview时可以这样做:

    实现如下UIGestureDelegate方法

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
    

    作为

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        return  (touch.view == superView);
    }
    

    并将此委托设置为分配给 superView 的手势识别器。

    我希望这能满足需要。

    【讨论】:

    • 对我来说,我必须在子视图中勾选“启用用户交互”才能使其正常工作,但确实如此。
    【解决方案2】:

    基本上,当您单击子视图时,无法识别超级视图手势,因为您的超级视图与子视图重叠。

    在 .h 中添加委托并将其交给 tapGestures 并给出这样的条件

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        if([gestureRecognizer.view isKindOfClass:[superView class]])
            return NO;
        else
            return YES;
    }
    

    【讨论】:

    • 是的,这就是假设发生的事情......但在这种情况下它没有发生......当我删除超级视图的同时手势识别时,它会按预期工作......任何想法有什么问题?
    • 为此,您将获得条件并检查该条件是否来自superview然后什么都不做。
    猜你喜欢
    • 2015-02-08
    • 2014-01-22
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多