Swift-将MKAnnotationView添加到MKMapView [英] Swift - Add MKAnnotationView To MKMapView
问题描述
我正在尝试将MKAnnotationView
添加到MKMapView
,但是我做不到...有人可以帮助我吗?
I'm trying to add MKAnnotationView
to MKMapView
but I can't do it… Can anyone help me?
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
var latitude:CLLocationDegrees = locationManager.location.coordinate.latitude
var longitude:CLLocationDegrees = locationManager.location.coordinate.longitude
var homeLati: CLLocationDegrees = 40.01540192
var homeLong: CLLocationDegrees = 20.87901079
var latDelta:CLLocationDegrees = 0.01
var longDelta:CLLocationDegrees = 0.01
var theSpan:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
var myHome:CLLocationCoordinate2D = CLLocationCoordinate2DMake(homeLati, homeLong)
var myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
var theRegion:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, theSpan)
self.theMapView.setRegion(theRegion, animated: true)
self.theMapView.mapType = MKMapType.Hybrid
self.theMapView.showsUserLocation = true
///Red Pin
var myHomePin = MKPointAnnotation()
myHomePin.coordinate = myHome
myHomePin.title = "Home"
myHomePin.subtitle = "Bogdan's home"
self.theMapView.addAnnotation(myHomePin)
var anView:MKAnnotationView = MKAnnotationView()
anView.annotation = myHomePin
anView.image = UIImage(named:"xaxas")
anView.canShowCallout = true
anView.enabled = true
}
推荐答案
您需要实现viewForAnnotation
委托方法并从那里返回MKAnnotationView
.
You need to implement the viewForAnnotation
delegate method and return an MKAnnotationView
from there.
这是一个例子:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if (annotation is MKUserLocation) {
//if annotation is not an MKPointAnnotation (eg. MKUserLocation),
//return nil so map draws default view for it (eg. blue dot)...
return nil
}
let reuseId = "test"
var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
if anView == nil {
anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
anView.image = UIImage(named:"xaxas")
anView.canShowCallout = true
}
else {
//we are re-using a view, update its annotation reference...
anView.annotation = annotation
}
return anView
}
请记住,当您要使用自己的自定义图像时,需要创建一个 plain MKAnnotationView
. MKPinAnnotationView
应该仅用于标准的引脚注释.
Remember you need to create a plain MKAnnotationView
when you want to use your own custom image. The MKPinAnnotationView
should only be used for the standard pin annotations.
还请注意,您不应在调用startUpdatingLocation
之后立即尝试访问locationManager.location
.可能还没有准备好.
Also note you should not try to access locationManager.location
immediately after calling startUpdatingLocation
. It may not be ready yet.
使用didUpdateLocations
委托方法.
您还需要致电requestAlwaysAuthorization
/requestWhenInUseAuthorization
(请参阅定位服务不可用在iOS 8中工作).
You also need to call requestAlwaysAuthorization
/requestWhenInUseAuthorization
(see Location Services not working in iOS 8).
这篇关于Swift-将MKAnnotationView添加到MKMapView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!