iphone - 可缩放 UIScrollView 与 UIButtons 捕获触摸

标签 iphone ios uiscrollview uikit uibutton

我有一个 UIScrollView 并且正在实现 viewForZoomingInScrollView:委托(delegate)方法返回一个 UIImage,用户可以缩放和平移。我还有一些 UIButtons 作为 UIScrollView 的 subview ,我将其用作注释,例如 Google map 。

我遇到的问题是,当缩小时,许多 UIImage 可能会被 UIButtons 遮挡。当尝试捏合缩放时,UIButtons 正在接收触摸事件,并且缩放没有发生。您最终必须小心地将手指放在清晰的空间中才能进行缩放。

我注意到,当有大量注释 View 时,Google map 应用程序似乎工作正常,您仍然可以捏捏。

我想我需要优先考虑触摸,UIScrollView 需要响应捏合和平移,而按钮只需点击。

有人有这方面的经验吗?

最佳答案

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

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

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

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

关于iphone - 可缩放 UIScrollView 与 UIButtons 捕获触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12319572/

相关文章:

iphone - 如何将现有的 iPhone 应用程序移植到 iPad

iphone - 如何在应用程序图标下的应用程序名称中设置小图像符号?

ios - SceneKit 节点跟随相机

ios - UITableView.sizeToFit() 只渲染第一个单元格

ios - Callkit 回拨按钮不起作用

ios - 如何向用户请求联系人权限以访问然后建立和打开联系人?

iphone - 在 Storyboard 中隐藏一个 ViewController 的 NavigationBar

ios - UITableViewCell 中 UITextField 的原始值

iphone - iOS 邮件消息 View ,如 UIWebView

javascript - 是否可以在前端使用 HTML 更改 mailto?