UIPanGestureRecognizer在其SuperView区域之外没有被UIImageView触发?

时间:2014-10-30 17:40:31

标签: ios uiimageview draggable uipangesturerecognizer

我在iPad应用上有以下用户界面:

enter image description here

以下是对正在发生的事情的解释:

  1. 蓝色区域是附加到(显示的)ViewController的视图。
  2. 黄色区域是一个UIImageView,用户可以在其中拖动项目(我称之为实时区域)。黄色是蓝色区域的子视图。
  3. 红色项目是附加了UIPanGestureRecognizer的UIImageView。它是黄色区域的子视图。
  4. 只要拖动从实时(黄色)区域内开始,就可以拖动红色项目。
  5. 关于上图所示的图像情况,我希望能够从表面上的任何一点拖动红色项目。 (不仅来自与(黄色)区域相交的区域)

    有什么想法吗?

    谢谢!

2 个答案:

答案 0 :(得分:2)

当他们超出他们的超级视图范围时,观点不会回应。您可以通过使红色视图成为蓝色视图的子视图而不是黄色视图来解决问题。

答案 1 :(得分:0)

rdelmar有最干净的方法。

但是如果你想保留你的视图架构,你可以为你的黄色视图创建一个YellowClass,UIImageView的子类。并在YellowClass中实现以下代码:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{   
    if (!self.clipsToBounds && !self.hidden && self.alpha > 0) {
        for (UIView *subview in self.subviews.reverseObjectEnumerator) {
            CGPoint subPoint = [subview convertPoint:point fromView:self];
            UIView *result = [subview hitTest:subPoint withEvent:event];
            if (result != nil) {
                return result;
            }
        }
    }

    return nil;
}

黄色视图外的YellowView子视图将响应触摸。

this post读取。