如何设置默认用户位置,使其位于其他注释的前面。
对于iOS 10 layer.zPosition在任何注释上都可以正常工作。在iOS 11中,Apple更改了某些内容和layer.zPosition不再起作用,因为MKMapView会自动修改zPosition。我知道我可以将自定义CALayer与固定的zPosition和棘手的设置器一起使用,而这仅在iOS 11中什么也不做,但是我如何控制默认用户位置注释又称为MKUserLocation的zPosition
这是我的代码。它可在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
}
}
答案 0 :(得分:0)
MKMapView有一种获取用户位置的方法
let userLocation : MKUserLocation = mapView.userLocation
MKUserLocation符合MKAnnotation,因此可以使用以下方法获取MKAnnotationView。
let userView = mapView.view(for: mapView.userLocation)