gpt4 book ai didi

ios - 可以将事件/手势传递给所有 subview 吗?

转载 作者:行者123 更新时间:2023-12-01 16:43:39 24 4
gpt4 key购买 nike

我正在尝试一个快速原型(prototype)项目,看看我想用 Mapbox iOS SDK (route-me) 和 iOS MapKit 做什么是可能的。

我想看看我是否可以通过 MapBox 的离线功能(以及集群等附加功能)获得两全其美,但也仍然使用 iOS map 类型。经过一些研究(和对 SO 的帮助),我发现 Mapbox 和 iOS map 不能一起工作,你可以选择其中一个。我开始怀疑如果我在 iOS map 上放置一个 RMMapView( map 框 map )目录会发生什么。然后在我想查看 iOS map 的情况下,我可以将 RMMapViews basemap 设置为透明,这样直接位于其下方的 iOS map 就会显示出来。同样,如果需要,您可以使用 iOS map ,但我也可以保持绘制 map 框标记,这样当您切换到 iOS map 时,您不需要重新绘制标记。

enter image description here

基本上,我创建了一个主视图( super View )并添加了两个 subview (MKMapView 和 RMMapView),RMMapView 位于顶部。我已经想出了如何使 RMMapView 上的基础层透明,我什至可以添加 RMMarkers,它们很好地显示在 MKMapView 之上。

我的问题是触摸事件和手势。如果我这样做,我需要发生在 RMMapView 上的所有触摸和手势,仍然发生在 RMMapView 上,但也发生在 MKMapView 上。 IE。如果 RMMapView 上的基本 map 是透明的,但该 View 中有一个标记,则当我滚动 map 时,我需要 RMMapView 与 MKMapView 一起移动(以便标记移动)。

我试过的:

  • 覆盖 hitTest。这种方法的问题是,一旦你这样做,触摸只会在你返回的 View 上操作。我需要在 RMMapView 和 MKMapView 上进行触摸。
  • 在我的 super View 中创建了一个手势识别器。然后,我尝试将这些内容传递给我的两个 subview 。真的,真的,虽然这可能有效。但据我所知,有几个问题。首先,我知道两个 map View 顶部都有 ScrollView ,因此将触摸转发到 MKMapView 和 RMMapView 不起作用。我想我必须将触摸转发到每个 map ScrollView 。

  • 所以我不认为 1 会工作,我不能让 2 工作。任何人都曾试图做这样的事情。 2个不同的 View 可以作用于相同的触摸事件还是获得事件的第一个 View 获胜?

    我的设计也可能是错误的,所以如果有人有其他建议,请把它扔掉。确实意识到我想远离修改 RMMapView,并且不能真正修改 MKMapView。

    我能找到的最相关的帖子是: How to intercept touches events on a MKMapView or UIWebView objects? .但我不想拦截 MKMapView 上的事件,我想在 SuperView 上拦截它们,这样我就可以传递给它的两个 sup View 。

    谢谢

    最佳答案

    我不确定是否完全理解您的需求,但触摸事件会自动沿响应者链传播。
    如果你想处理它,你只需要覆盖这些方法

    – touchesBegan:withEvent:
    – touchesMoved:withEvent:
    – touchesEnded:withEvent:
    – touchesCancelled:withEvent:

    只需在您的实现中调用 [super touchesBegan..] 即可。

    UIResponder 类引用文档中对此进行了说明:

    Discussion The default implementation of this method does nothing. However immediate UIKit subclasses of UIResponder, particularly UIView, forward the message up the responder chain. To forward the message to the next responder, send the message to super (the superclass implementation); do not send the message directly to the next responder. For example,

    [super touchesBegan:touches withEvent:event];



    那是你需要的吗?

    关于ios - 可以将事件/手势传递给所有 subview 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960425/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com