【问题标题】:How to Enable Touch Events For a MapView underneath a UIView (iOS8/Swift)如何在 UIView (iOS8/Swift) 下为 MapView 启用触摸事件
【发布时间】:2014-06-27 20:43:32
【问题描述】:

这是一个之前已经提出过的问题,但是解决方案确实看起来像以前一样有效,或者出现了另一个问题。

我有一个 MapView,在它上面我放置了一个不透明的 UIView,作为用户的指示器。这已在界面构建器中完成,因此无需手动放置控件或类似的东西。我希望 UIView 不会阻​​止用户与 MapView 的交互,例如双击缩放、平移等。我已经尝试了现有的解决方案,即取消选中 UIView 的界面构建器中的“用户交互启用”框,但是这没有奏效。

我该如何解决这个问题?

如果结果证明 iOS8/XCode 6 不影响此解决方案,我将发布代码。

代码:https://github.com/ChrisChares/swift-alarm Github Repo,注意这不是我的代码,但它反映了这里显示的问题。转到 MapViewController 界面。

【问题讨论】:

  • 你确定叫“启用手势识别器”吗?
  • 我的意思不是“启用用户交互”,感谢您的注意。
  • 我认为 Xcode 6 或 iOS 8 没有理由在这里改变任何东西;也许您可以发布一个产生这种行为的最小示例?
  • 也可能是 iOS 8 仍处于测试阶段。 iOS 7 测试版一经推出,默认功能就被破坏了很多。
  • 我在上面添加了一个 github 存储库作为示例,只需在 MapViewController 中选择 UIView 方块并取消选中“启用用户交互”框。它仍然会阻止手势。

标签: ios uiview swift


【解决方案1】:

重写这个 UIView 的 hittest 方法并返回 nil 怎么样?我目前无法使用 ios8 sim 进行测试,所以这只是一个猜测。

【讨论】:

  • 你指的是这个吗? - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
  • 是的,也可能覆盖它可能会有所帮助:- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event.
【解决方案2】:

解决方案:我想通了,这可能是 Xcode 6 中的潜在故障,或者 Apple 故意更改了选项面板中的某些逻辑。

切换启用用户交互框并不能解决前面提到的问题。

但是,使用代码执行此操作,只需使用:

targetView.userInteractionEnabled = false 你会注意到 MapView 正确地注册了 UIView 的触摸。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多