Как установить местоположение пользователя по умолчанию для размещения перед другими аннотациями.
Для iOS 10 layer.zPoation отлично работает на любой аннотации. В iOS 11 Apple изменила что-то, и layer.zPosition больше не работает, потому что MKMapView автоматически изменяет zPosition. Я знаю, что могу использовать пользовательский CALayer с фиксированным zPosition и хитрым сеттером, который ничего не делает только в iOS 11, но как я могу контролировать zPosition стандартной пользовательской аннотации местоположения, также известной как MKUserLocation
Вот код, который у меня есть. Это работает в iOS 10 и 11 для пользовательских представлений аннотации, но я не могу понять, как управлять представлением аннотации местоположения пользователя (эта синяя точка по умолчанию с областью круга с радиусом точности).
class FixedZPositionLayer: CALayer {
override var zPosition: CGFloat {
get { return super.zPosition }
set {
if #available(iOS 11, *) {
// do nothing on iOS 11 and later
print("ignoring zPosition set by MapKit")
} else {
super.zPosition = newValue
}
}
}
var fixedZPosition: CGFloat {
get { return super.zPosition }
set { super.zPosition = newValue }
}
}
class MyAnnotationView: MKAnnotationView {
weak var titleLabel: UILabel!
override class var layerClass: AnyClass {
return FixedZPositionLayer.self
}
var fixedZPosition: CGFloat {
get {
return (self.layer as! FixedZPositionLayer).fixedZPosition
}
set {
(self.layer as! FixedZPositionLayer).fixedZPosition = newValue
}
}
...
public func markAsSelected() -> Void {
self.image = UIImage(named: "search_icon_pin_big")
self.fixedZPosition = 10 // This is placed over secondary annotations but should be placed under user location annotation
}
public func markAsSecondary() -> Void {
self.image = UIImage(named: "search_icon_pin_medium")
self.fixedZPosition = 5 // This is placed under selected annotations
}
}