作者:moon2502863581 | 来源:互联网 | 2023-05-17 15:27
我试图在Swift中改变MKMapView上的pin图像,但不幸的是它不起作用.任何想法我做错了什么?我在这里看到了一些例子,但没有奏效.
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图片可在其他地方使用.
1> Para..:
别忘了设置:
map.delegate = self
并确保您UIViewController
实现MKMapViewDelegate
协议.
如果您忘记执行此操作,mapView:viewForAnnotation:
则不会为您的地图调用您的实现.
此外,它看起来像pinView!.animatesDrop = true
打破自定义图像.您必须将其设置为false
或使用MKAnnotationView
(没有animatesDrop
属性).
如果要实现自定义拖放动画,请参阅此相关问题.
您是否尝试过使用`MKAnnotationView`代替`MKPinAnnotationView`?
2> 小智..:
MKPinAnnotationView总是使用pin图像,不能永远.您必须使用MKAnnotationView.请注意,因为属性animatesDrop它不是有效的MKAnnotationView的属性,Rem该行.