【问题标题】:Forward/pass through UIGesture (swipe) to sibling view转发/通过 UIGesture(滑动)到同级视图
【发布时间】:2014-11-24 19:57:07
【问题描述】:

让我们假设以下设置:

只有水平滚动,透明UIScrollView(带有蓝色背景和红色边框的矩形)和无限数量的UIImageView实例(红色方块)是相同UIView的子视图(@ 987654325@)。

UIScrollView

带到前面
[self.view bringSubviewToFront:scrollView]

在包含UIViewController

应实现以下功能:UIScrollView 应接收左/右滑动手势以水平滚动,而 UIScrollView 隐蔽的UIImageViews 应接收向上/向下滑动手势,添加为如下:

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpGestureHandler:)];
swipeUpGesture.direction = UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown;
[imageView addGestureRecognizer:swipeGesture];

这在UIImageView 未被UIScrollView 覆盖时有效,但当UIScrollView 在所述视图前面时显然无效。

总而言之,UIScrollView 应该将向上/向下滑动事件/手势转发到特定的底层UIImageView,但仍会接收常规的左/右滑动事件/手势以进行水平滚动.

根据我在文档中阅读的内容,如果 UIImageViews 包含在 UIScrollView 中,将很容易解决 - 但是,在此设置中这是不可能的,我很确定必须有解决这个问题的方法。

感谢任何提示,谢谢。

【问题讨论】:

    标签: objective-c uiscrollview uigesturerecognizer uitouch uiswipegesturerecognizer


    【解决方案1】:

    我找到了解决此问题的方法。虽然我无法将向上/向下滑动手势转发到滚动视图后面的图像视图,但我现在已将向上/向下方向的手势识别器添加到滚动视图。在手势识别器操作中,我确定了窗口内手势的点,并使用 nil 事件对这些点的窗口的第一个视图进行了测试。在自定义滚动视图中,我用空事件覆盖了 hittest 消息以返回 NO,因此适当的图像视图最终将成为标识符。一旦我在手势点获得了位于滚动视图后面的图像视图,我就能够对我的图像视图执行适当的操作。

    我不确定这是否是解决此问题的最佳解决方案,但是经过数小时的调查和试验,我无法构建出更好的解决方案。这种设置可能有点不寻常,因此很棘手。如果您有任何要添加的内容,我们仍会感谢您的意见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多