小编Yar*_*aro的帖子

MapKit(MKMapView):zPosition在iOS11上不再起作用

iOS11zPosition停止的annotationView.layer工作.每次地图区域发生变化.

在此输入图像描述

  • 原始解决方案没有运气:layer.zPosition = X;
  • 没有运气bringViewToFront/ SendViewToBack方法

Xcode 8.3/9

更新(解决方案感谢Elias Aalto):

创建MKAnnotationView时:

annotationView.layer.zPosition = 50;
if (IS_OS_11_OR_LATER) {
    annotationView.layer.name = @"50";
    [annotationView.layer addObserver:MeLikeSingleton forKeyPath:@"zPosition" options:0 context:NULL];

}
Run Code Online (Sandbox Code Playgroud)

在MeLikeSingleton或你在那里的任何观察者对象:

- (void)observeValueForKeyPath:(NSString *)keyPath
                         ofObject:(id)object
                           change:(NSDictionary *)change
                          context:(void *)context {

       if (IS_OS_11_OR_LATER) {

           if ([keyPath isEqualToString:@"zPosition"]) {
               CALayer *layer = object;
               int zPosition = FLT_MAX;
               if (layer.name) {
                   zPosition = layer.name.intValue;
               }
               layer.zPosition = zPosition;
               //DDLogInfo(@"Name:%@",layer.name);
           }

       } 
}
Run Code Online (Sandbox Code Playgroud)
  • 此解决方案使用layer.name值来跟踪zOrder.如果您有多个级别的zPosition(用户位置,群集,引脚,标注);)
  • 不用于循环,只有KVO
  • 我使用了一个Singleton Object来观察图层值的变化.如果您在整个应用程序中使用了多个MKMapView.

它是如何在IOS11之前工作的

..是用的

- (void)mapView:(MKMapView …
Run Code Online (Sandbox Code Playgroud)

objective-c mapkit mkannotation mkannotationview ios11

17
推荐指数
2
解决办法
2319
查看次数