В iOS11
функция zPosition
перестала работать для annotationView.layer. Каждый раз, когда изменяется область карты.
- Не повезло с оригинальным решением: layer.zPosition = X;
- Не повезло с методами
bringViewToFront
/SendViewToBack
Xcode 8.3/9
ОБНОВЛЕНИЕ (РЕШЕНИЕ спасибо Элиасу Аалто):
При создании 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 (местоположение пользователя, кластер, контакт, выноска);)
- Нет для циклов, только KVO
- Я использовал объект Singleton, который отслеживает изменения значения слоя. Если у вас есть несколько MKMapViews, используемых в приложении.
КАК ЭТО РАБОТАЕТ ДО IOS11
.. - использовать
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
и установите здесь zPosition.
.. но что (для некоторых из нас, тем не менее, dunny why) больше не работает в iOS11!