我正在尝试使用图像放下一些代表公交车站的引脚,当我对图像进行广告时,它会更改引脚的位置。当我没有设置图像时,引脚会掉落在正确的位置。
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation is StopAnnotation {
let identifier = "stopAnnotation"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
if pinView == nil {
//println("Pinview was nil")
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
pinView!.canShowCallout = true
pinView.image = UIImage(named: "stopIcon")
}
return pinView
}
return nil
}
实例
我想要使用的图片:
有谁能告诉我为什么这样做?我在这个应用程序的Obj-C版本中使用完全相同的图像,一切正常。
答案 0 :(得分:5)
代码正在使用自定义图片创建MKPinAnnotationView
。
MKPinAnnotationView
类只应用于显示默认的图钉图像。
要显示自定义图片,最好使用普通MKAnnotationView
。
由于代码使用的是MKPinAnnotationView
,因此图像会自动获取应用于它的偏移量(centerOffset
属性)。
此内置偏移适用于默认图钉图像,但不适用于您的自定义图像。
不要试图覆盖此默认行为,而是使用普通MKAnnotationView
代替:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation is StopAnnotation {
let identifier = "stopAnnotation"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
if pinView == nil {
//println("Pinview was nil")
//Create a plain MKAnnotationView if using a custom image...
pinView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
pinView!.canShowCallout = true
pinView.image = UIImage(named: "stopIcon")
}
else {
//Unrelated to the image problem but...
//Update the annotation reference if re-using a view...
pinView.annotation = annotation
}
return pinView
}
return nil
}