Swift MapKit自定义当前位置标记

问题描述:

这就是我的project当前的样子。我的问题是,如何将蓝色球(当前位置)更改为自定义图片图标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 
    } 
} 
+0

诚然,非常感谢一个干净和很好地完成代码。但是有没有办法我可以把它从一个pin变成一个'icon'? – Victor

+0

@VictorKrusenstråhle更新了答案 – chuthan20

+0

谢谢,完美无缺!看看[这里](http://i.stack.imgur.com/2KwUi.png)顺便说一下,你也许知道如何改变标题的方向标题? – Victor

可以使用MKMapDelegate的方法自定义视图:

optional func mapView(_ mapView: MKMapView, 
    viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? 

参数

MapView的 - 的请求注解视图的地图视图。

注释 - 表示即将显示的注释的对象。除了您的自定义注释之外,此对象 可能是一个MKUserLocation对象,它表示用户当前的 位置。

查看完整的文档here

也请参阅下面的SO问题用于更新视图时,用户位置的变化: Custom Annotation view for userlocation not moving the mapview