Ios 是否未为其SuperView区域外的UIImageView启动UIPangestureRecognitor?

Ios 是否未为其SuperView区域外的UIImageView启动UIPangestureRecognitor?,ios,uiimageview,draggable,uipangesturerecognizer,Ios,Uiimageview,Draggable,Uipangesturerecognizer,我在iPad应用程序上有以下UI: 下面是对发生的事情的解释: 蓝色区域是附加到(显示的)ViewController的视图 黄色区域是一个UIImageView,用户可以在其中拖动项目(我称之为活动区域)。黄色是蓝色区域的子视图 红色项是一个UIImageView,它连接了UIPangestureRecognitor。这是黄色区域的子视图 可以拖动红色项目,只要拖动从活动(黄色)区域内开始 在上图的情况下,我希望能够从其表面的任何点拖动红色项目。(不仅从与(黄色)区域相交的区域) 有什么想法

我在iPad应用程序上有以下UI:

下面是对发生的事情的解释:

  • 蓝色区域是附加到(显示的)ViewController的视图
  • 黄色区域是一个UIImageView,用户可以在其中拖动项目(我称之为活动区域)。黄色是蓝色区域的子视图
  • 红色项是一个UIImageView,它连接了UIPangestureRecognitor。这是黄色区域的子视图
  • 可以拖动红色项目,只要拖动从活动(黄色)区域内开始
  • 在上图的情况下,我希望能够从其表面的任何点拖动红色项目。(不仅从与(黄色)区域相交的区域)

    有什么想法吗


    谢谢

    当视图超出其superview的范围时,它们不会对触摸做出响应。您可以通过使红色视图成为蓝色视图的子视图而不是黄色视图来解决此问题。

    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外部的YellowView子视图将响应触摸

    阅读