我正在尝试添加内容MKAnnotationView,MKMapView但我做不到…有人可以帮助我吗?
MKAnnotationView
MKMapView
这是我的代码:
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从那里返回。
viewForAnnotation
这是一个例子:
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 }
请记住,当您要使用自己的自定义图像时,需要创建一个 普通 MKAnnotationView图像。本MKPinAnnotationView应只用于标准引脚注解。
MKPinAnnotationView
另请注意,您不应locationManager.location在致电后立即尝试访问startUpdatingLocation。可能尚未准备好。
locationManager.location
startUpdatingLocation
使用didUpdateLocations委托方法。
didUpdateLocations
您还需要致电requestAlwaysAuthorization/requestWhenInUseAuthorization
requestAlwaysAuthorization
requestWhenInUseAuthorization