缩放时,UIScrollview 子视图无法识别手势

Posted

技术标签:

【中文标题】缩放时,UIScrollview 子视图无法识别手势【英文标题】:On zoom, UIScrollview subviews not recognizing gesture 【发布时间】:2012-10-25 18:43:30 【问题描述】:

我有一个滚动视图,我在其中添加了一个图像视图作为子视图。滚动视图的内容大小与图像视图的大小(宽度和高度)相同。滚动视图外有两个按钮。当我单击它们中的任何一个时,都会将一个小矩形视图作为子视图添加到图像视图中。添加后,用户可以将这个矩形视图拖到 imageview 上的任意位置。

这工作正常,直到我捏缩放滚动视图。在viewForZoomingInScrollView: 方法中,我返回图像视图并且缩放工作正常。但是在缩放视图中,当我尝试在矩形视图周围拖动时,它不会移动。它不再识别平移手势。知道为什么会这样吗?

谢谢

黑色

【问题讨论】:

当您尝试拖动矩形视图时没有任何反应,还是滚动视图被平移? 当我尝试拖动矩形时,滚动视图被平移。但是矩形上也有一小部分,如果我拖动它,它确实会拖动矩形。 您能否提供设置滚动视图、矩形视图、手势识别器和平移处理方法的代码。我进行了快速测试,一切正常... 哦,等等,我刚刚意识到您提到将矩形视图添加为 UIImageView 的子视图?我不认为图像视图应该有子视图。如果您只是将矩形添加为滚动视图的子视图会发生什么? 在这种情况下,当我捏缩放时,矩形不会缩放。只有图像视图被缩放。因此我不得不将矩形添加到图像视图中。 【参考方案1】:

根据您的最后一条评论,我建议您尝试以下方法:

在您的 viewDidLoad 方法中添加:

for (UIGestureRecognizer *gr in self.scrollView.gestureRecognizers) 
    if ([gr isKindOfClass:[UIPanGestureRecognizer class]])
    
        [gr requireGestureRecognizerToFail:self.dragGR];
    

dragView 是你的矩形视图。

上面的工作可能不需要以下内容,但无论如何清理视图层次结构可能是个好习惯:

添加一个普通的 UIView 作为具有相同框架的图像视图的父视图,并将矩形视图添加为该新视图的子视图。在您的viewForZoomingInScrollView: 中返回该新视图。正如我在 cmets 中所说,我不认为将子视图添加到 UIImageViews 被认为是好的做法。但也许这只是我的看法:)

【讨论】:

【参考方案2】:

这应该也可以,并且稍微简洁一些:

[self.scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.myPanRecognizer];

【讨论】:

以上是关于缩放时,UIScrollview 子视图无法识别手势的主要内容,如果未能解决你的问题,请参考以下文章

在缩放 UIScrollView 子视图时保持恒定的线宽

为捏合手势设置 UIScrollView 的原点

iOS Swift 4:UIScrollView 中的 UIView

正确缩放包含许多子视图的 UIScrollView

内部动画时的 UIScrollView 回调

UIScrollview 在缩放时同步子视图原点