iphone - 将 subview 添加到 map 上方但注释 View 下方的 MKMapView?

标签 iphone overlay mkmapview subview

对于我正在构建的应用程序,我有一个自定义的“旧 map ”效果 PNG,我想将其叠加在 MKMapView View 上。不幸的是,我尝试的方法都不完全正确:

  1. 向 MKMapView 添加 subview (问题:PNG 的 UIImageView 被放置在注释引脚上方,这看起来很奇怪
  2. 使图像本身成为注释 View 并将其放置在其他 View 下方(问题:在滚动时,我必须移动注释 View 图像,并且有一段时间只有常规 map 而不是老式效果) .

我基本上想要完成的是有一个 subview ,该 subview 位于 map 图 block 上方但注释 View 下方,并且在用户滚动时保持稳定 - 有什么想法吗?

最佳答案

请注意,所有 MKMapView subview 层次结构、注释、行为等均在内部私有(private) MKMapViewInternal 中进行。类,因此更改此结构中的任何内容(以我建议的方式或其他方式)可能会导致您的应用程序被 Appstore 拒绝。

我没有完整的解决方案,只是一个想法。我的想法是使覆盖 View 与注释 View 具有相同的 super View ,并确保注释将放置在我们的覆盖层上。在 MKMapViewDelegate 中我们实现:

- (void)mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views{
    if (views.count > 0){
        UIView* tView = [views objectAtIndex:0];

        UIView* parView = [tView superview];
        UIView* overlay = [tView viewWithTag:2000];
        if (overlay == nil){
            overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:MY_IMAGE_NAME]];
            overlay.frame = parView.frame; //frame equals to (0,0,16384,16384)
            overlay.tag = 2000;
            overlay.alpha = 0.7;
            [parView addSubview:overlay];
            [overlay release];
        }

        for (UIView* view in views)
            [parView bringSubviewToFront:view];
    }
}

此代码完成了您想要的一半 - 您将获得一个放置在 map 图 block 和注释之间的 View 。剩下的任务是根据 map 滚动/缩放更改自定义叠加 View 框架(如果我找到方法,我会发布)。

关于iphone - 将 subview 添加到 map 上方但注释 View 下方的 MKMapView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1622633/

相关文章:

iphone - iPhone 中的页面 curl

css - 悬停时从底层图像触发的透明叠加图像

c# - Xamarin.Forms 使非透明覆盖不可点击

ios - MKPolyLineRenderer 改变颜色而不移除覆盖

ios - 在 setVisibleMapRect 上保留 map View 相机间距(3d 角度)

ios - iOS 中 echoprint 的链接器错误

iphone - "WARNING: Input manager failed to load static dictionary for: nl_NL"是什么意思?

ios - Phonegap ios 相机在设备而非模拟器上失败

javascript - 没有 "Presence"的 HTML/CSS/JS 可见元素

ios - 如何在 MapView 中将缩放级别设置为用户位置