Swift MapKit自定义当前位置标记
答
我相信你知道用户是看惯了那蓝色的点作为当前用户的位置。除非你有充分的理由,否则不应该改变它。
这里是怎么改:
设置的MapView委托,然后重写下列功能......是这样的:
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
let pin = mapView.viewForAnnotation(annotation) as? MKPinAnnotationView ?? MKPinAnnotationView(annotation: annotation, reuseIdentifier: nil)
pin.pinTintColor = UIColor.purpleColor()
return pin
} else {
// handle other annotations
}
return nil
}
,并有图像显示,而不是: 只需更换里面的代码,如果用下面的代码声明:
let pin = mapView.viewForAnnotation(annotation) ?? MKAnnotationView(annotation: annotation, reuseIdentifier: nil)
pin.image = UIImage(named: "user_location_pin")
return pin
我觉得这个代码示例应该给你足够的信息来HEL你想知道该怎么做。 (请注意,MapView的是在故事板创建...)
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!
let loc = CLLocationManager()
var angle = 0
var timer: NSTimer!
var userPinView: MKAnnotationView!
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
loc.requestWhenInUseAuthorization()
timer = NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: #selector(rotateMe), userInfo: nil, repeats: true)
}
func rotateMe() {
angle = angle + 10
userPinView?.transform = CGAffineTransformMakeRotation(CGFloat((Double(angle)/360.0) * M_PI))
}
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
let pin = mapView.viewForAnnotation(annotation) ?? MKAnnotationView(annotation: annotation, reuseIdentifier: nil)
pin.image = UIImage(named: "userPinImage")
userPinView = pin
return pin
} else {
// handle other annotations
}
return nil
}
}
答
可以使用MKMapDelegate的方法自定义视图:
optional func mapView(_ mapView: MKMapView,
viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?
参数
MapView的 - 的请求注解视图的地图视图。
注释 - 表示即将显示的注释的对象。除了您的自定义注释之外,此对象 可能是一个MKUserLocation对象,它表示用户当前的 位置。
查看完整的文档here
也请参阅下面的SO问题用于更新视图时,用户位置的变化: Custom Annotation view for userlocation not moving the mapview
诚然,非常感谢一个干净和很好地完成代码。但是有没有办法我可以把它从一个pin变成一个'icon'? – Victor
@VictorKrusenstråhle更新了答案 – chuthan20
谢谢,完美无缺!看看[这里](http://i.stack.imgur.com/2KwUi.png)顺便说一下,你也许知道如何改变标题的方向标题? – Victor