可缩放的UIScrollView与UIButtons捕捉触摸

我有一个UIScrollView,我正在实现viewForZoomingInScrollView:委托方法,它返回一个用户可以放大和平移的UIImage。 我也有一些UIButtons作为UIScrollView的子视图,我用它作为注释,如Google Maps。

我遇到的问题是,当放大右键时,很多UIImage可能会被UIButtons遮挡。 当试图缩放时,UIButtons正在接收触摸事件,而缩放没有发生。 你最终不得不小心地将手指放在空旷的地方放大。

我注意到,当有很多注释视图时,Google地图应用似乎可以正常工作,但仍然可以捏合。

我想我需要重点触摸,UIScrollView需要响应捏和平底锅,而按钮只是轻拍。

任何人都有这方面的经验?


我有这个确切的问题,这有点奇怪。 这不是由于按钮上有任何手势识别器,它是由于某种原因被转发到UIButton的UIScrollView的捏手势识别器。 此外,UIButton响应某些UIGestureRecognizerDelegate调用(如-gestureRecognizerShouldBegin :)但不是其他人(如-gestureRecognizer:shouldReceiveTouch :)。 这就像UIScrollView有选择性地将一些委托调用转发给UIButton,有些不是。

我终于找到了解决这个问题的非常简单的方法:

yourScrollView.pinchGestureRecognizer.delaysTouchesBegan = YES;
yourScrollView.pinchGestureRecognizer.delaysTouchesEnded = YES;

幸运的是,UIScrollView上的默认缩放手势识别器是可公开访问的,并且默认情况下两个“延迟拖动”属性为NO。 当您将它们设置为YES时,如果手势识别器可能或者确实意识到捏手势,即使它在UIButton的顶部开始,它也不会将这些触摸转发到UIButton,并且UIButtons不会再干扰UIScrollView的缩放。


尝试这个

 UIGestureRecognizer* tapRecognizer = nil;    
for (UIGestureRecognizer* recognizer in yourButton) {
    if ( ![recognizer isKindOfClass:[UITapGestureRecognizer class]] ) {
        [yourButton removeGestureRecognizer:recognizer];
        break;
    }
}

因此您可以从与UITapGestureRecognizer不同的按钮中移除所有的手势识别器


看看UIView的hitTest:withEvent:方法。 在该方法内,你需要检查你想返回哪个视图。 你回归的观点将成为接受这一点的人。 例如,您可以对按钮进行子类化并重写该方法以针对您的特定场景返回ImageView

链接地址: http://www.djcxy.com/p/40531.html

上一篇: Zoomable UIScrollView with UIButtons capturing touches

下一篇: how to scroll uiscrollview from event touched by uibutton in scrollview