在Swift中更改MKMapView上的图钉图像 [英] Change pin image on MKMapView in Swift
问题描述
我正在尝试在Swift中改变MKMapView上的图像,但遗憾的是它不起作用。任何想法我做错了什么?我在这里看到了一些例子,但没有用。
I am trying to change pin image on the MKMapView in Swift, but unfortunately it don't work. Any Idea what I am doing wrong ? I saw some examples here, but did not worked.
import UIKit
import MapKit
class AlarmMapViewController: UIViewController {
@IBOutlet weak var map: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
showAlarms()
map.showsUserLocation = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func showAlarms(){
map.region.center.latitude = 49
map.region.center.longitude = 12
map.region.span.latitudeDelta = 1
map.region.span.longitudeDelta = 1
for alarm in Alarms.sharedInstance.alarms {
let location = CLLocationCoordinate2D(
latitude: Double(alarm.latitude),
longitude: Double(alarm.longtitude)
)
let annotation = MKPointAnnotation()
annotation.setCoordinate(location)
annotation.title = alarm.name
annotation.subtitle = alarm.description
mapView(map, viewForAnnotation: annotation).annotation = annotation
map.addAnnotation(annotation)
}
}
@IBAction func zoomIn(sender: AnyObject) {
}
@IBAction func changeMapType(sender: AnyObject) {
}
func mapView(mapView: MKMapView!,
viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation is MKUserLocation {
//return nil so map view draws "blue dot" for standard user location
return nil
}
let reuseId = "pin"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
if pinView == nil {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView!.canShowCallout = true
pinView!.animatesDrop = true
pinView!.image = UIImage(named:"GreenDot")!
}
else {
pinView!.annotation = annotation
}
return pinView
}
}
GreenDot图片可在其他地方使用。
GreenDot picture is available and used on other places.
推荐答案
别忘了设置:
map.delegate = self
并确保 UIViewController
实现 MKMapViewDelegate
protocol。
如果你忘了这样做,你的 mapView:viewForAnnotation:
的实现赢了不能为你的地图调用。
And make sure your UIViewController
implements the MKMapViewDelegate
protocol.
If you forget to do this, your implementation of mapView:viewForAnnotation:
won't be invoked for your map.
此外,它看起来像 pinView!.animatesDrop = true
打破自定义图像。你必须将它设置为 false
,或者使用 MKAnnotationView
(它没有 animatesDrop
property)。
Besides, it looks like pinView!.animatesDrop = true
breaks custom images. You'd have to set it to false
, or use MKAnnotationView
(which doesn't have an animatesDrop
property).
参见这个相关的问题。
这篇关于在Swift中更改MKMapView上的图钉图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!