答案 0 :(得分:14)
我相信您知道用户习惯将蓝点视为当前用户的位置。除非你有充分的理由,否则你不应该改变它。
以下是如何更改它:
设置mapView的委托,然后覆盖以下函数......如下所示:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
let pin = mapView.view(for: annotation) as? MKPinAnnotationView ?? MKPinAnnotationView(annotation: annotation, reuseIdentifier: nil)
pin.pinTintColor = UIColor.purple
return pin
} else {
// handle other annotations
}
return nil
}
并显示图像: 只需使用以下代码替换if语句中的代码:
let pin = mapView.view(for: annotation) as? MKPinAnnotationView ?? MKPinAnnotationView(annotation: annotation, reuseIdentifier: nil)
pin.image = UIImage(named: "user_location_pin")
return pin
我认为此代码示例应该为您提供足够的信息,以帮助您弄清楚该怎么做。 (请注意,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
}
}
答案 1 :(得分:2)
您可以使用MKMapDelegate的方法自定义视图:
optional func mapView(_ mapView: MKMapView,
viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?
<强>参数强>
mapView - 请求注释视图的地图视图。
注释 - 表示即将显示的注释的对象。除了自定义注释外,还有此对象 可以是表示用户当前的MKUserLocation对象 位置。
查看完整文档here
另请参阅以下SO问题,以便在用户位置更改时更新视图: Custom Annotation view for userlocation not moving the mapview