【发布时间】:2018-03-13 02:58:25
【问题描述】:
在 iOS11 上,zPosition 停止为 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];
}
在 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);
}
}
}
- 此解决方案使用 layer.name 值来跟踪 zOrder。如果您有多个级别的 zPosition(用户位置、集群、引脚、标注);)
- 没有 for 循环,只有 KVO
- 我使用了一个单例对象来观察层值的变化。如果您在整个应用中使用了多个 MKMapView。
在 IOS11 之前它是如何工作的
..是使用
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
并在此处设置 zPosition。
..但是(对于我们中的一些人来说,仍然不知道为什么)在 iOS11 中不再起作用了!
【问题讨论】:
-
您找到解决方案了吗?我正在处理同样的事情。
-
是的,见原帖
-
对所有同舟共济的人:zPosition 在 iOS 11 中显然被破坏了。请花点时间提交错误报告:developer.apple.com/bug-reporting 我们中的更多人会提交,这个错误将在 Apple 获得更多关注.
-
你必须爱苹果,只是完全打破了每个主要版本的东西,就像它不是没有thang
标签: objective-c mapkit mkannotation ios11 mkannotationview