设置自定义图像 - MKPinAnnotationView - Swift 3
Setting custom image - MKPinAnnotationView - Swift 3
我正在使用 MapKit,目前正在尝试在我的图钉上设置自定义图钉注释图像。但是,我很难弄清楚为什么它不起作用。所有其他代码都运行良好,当我在设置后尝试打印图像框架时,它确实为我的 "pinImage" 显示了正确的尺寸,因此它似乎能够将图像设置在 属性.
此外,委托设置正确,这可以通过在默认图钉上设置自定义颜色来验证。
我也尝试过使用 "pinImage.png",但没有成功。由于 MKPinAnnotationView 是 MKAnnotationView 的子类,我认为这应该是问题的原因没有问题,并且可以肯定的是,我也尝试使用 MKAnnotationView,但没有成功。
这是我的代码:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let annotation = annotation as? Pin {
let identifier = LocalConstants.pinIdentifier
var view: MKPinAnnotationView
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView {
dequeuedView.annotation = annotation
view = dequeuedView
} else {
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
view.canShowCallout = true
view.calloutOffset = CGPoint(x: -5, y: 5)
let detailButton = UIButton(type: .detailDisclosure) as UIView
view.rightCalloutAccessoryView = detailButton
//view.pinTintColor = Util.Colors.pluppPurple
}
view.image = UIImage(named: "pinImage")
return view
}
提前致谢!
答案确实是使用 MKAnnotationView 而不是 MKPinAnnotationView。我不知道昨天尝试时搞砸了什么。下面的最终工作副本,供将来参考:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let annotation = annotation as? Pin {
let identifier = LocalConstants.pinIdentifier
var view: MKAnnotationView
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) {
dequeuedView.annotation = annotation
view = dequeuedView
} else {
view = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
view.canShowCallout = true
view.calloutOffset = CGPoint(x: -5, y: 5)
view.tintColor = Util.Colors.pluppGrey
let detailButton = UIButton(type: .detailDisclosure) as UIView
view.rightCalloutAccessoryView = detailButton
}
view.image = UIImage(named: LocalConstants.pluppPin)
return view
}
return nil
}
我正在使用 MapKit,目前正在尝试在我的图钉上设置自定义图钉注释图像。但是,我很难弄清楚为什么它不起作用。所有其他代码都运行良好,当我在设置后尝试打印图像框架时,它确实为我的 "pinImage" 显示了正确的尺寸,因此它似乎能够将图像设置在 属性.
此外,委托设置正确,这可以通过在默认图钉上设置自定义颜色来验证。
我也尝试过使用 "pinImage.png",但没有成功。由于 MKPinAnnotationView 是 MKAnnotationView 的子类,我认为这应该是问题的原因没有问题,并且可以肯定的是,我也尝试使用 MKAnnotationView,但没有成功。
这是我的代码:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let annotation = annotation as? Pin {
let identifier = LocalConstants.pinIdentifier
var view: MKPinAnnotationView
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView {
dequeuedView.annotation = annotation
view = dequeuedView
} else {
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
view.canShowCallout = true
view.calloutOffset = CGPoint(x: -5, y: 5)
let detailButton = UIButton(type: .detailDisclosure) as UIView
view.rightCalloutAccessoryView = detailButton
//view.pinTintColor = Util.Colors.pluppPurple
}
view.image = UIImage(named: "pinImage")
return view
}
提前致谢!
答案确实是使用 MKAnnotationView 而不是 MKPinAnnotationView。我不知道昨天尝试时搞砸了什么。下面的最终工作副本,供将来参考:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let annotation = annotation as? Pin {
let identifier = LocalConstants.pinIdentifier
var view: MKAnnotationView
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) {
dequeuedView.annotation = annotation
view = dequeuedView
} else {
view = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
view.canShowCallout = true
view.calloutOffset = CGPoint(x: -5, y: 5)
view.tintColor = Util.Colors.pluppGrey
let detailButton = UIButton(type: .detailDisclosure) as UIView
view.rightCalloutAccessoryView = detailButton
}
view.image = UIImage(named: LocalConstants.pluppPin)
return view
}
return nil
}