iOS原生地图开发的一些心得

最近在开发鲜橙油耗iOS端,APP中需要获取附近的加油站并且在地图上显示大头钉。

如何获取我附近的加油站?

这里用到MapKit里的一个小部件: MKLocalSearch MKLocalSearch 允许开发者得到一个地理区域内附近的兴趣点。有了这个部件我们可以轻松获取到想要的加油站数据,代码如下:

let search = MKLocalSearch(request: request)
search.start { (response, error) in
guard let items = response?.mapItems else { return }
for item in items {
let annotation: MKPointAnnotation = MKPointAnnotation()
annotation.coordinate = item.placemark.coordinate
annotation.title = item.name
annotation.subtitle = item.phoneNumber ?? ""
self.mapView.addAnnotation(annotation)
}
}

在这段代码中,我获取到了附近的加油站数据,并且在mapView中显示出了大头钉。

如何自定义大头钉图片?

在MapViewController里继承MKMapViewDelegate,并且为mapView设置代理:

class MapViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,CLLocationManagerDelegate,MKMapViewDelegate {
    @IBOutlet weak var mapView: MKMapView! {
        didSet {
            mapView.delegate = self
        }
    }
}

然后实现 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? 这个代理方法:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    let identifier = "item"
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
    if (annotationView == nil) {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
    }
    annotationView?.annotation = annotation
    if (annotation is MKUserLocation) {
//这里如果是用户当前位置,设置不同的图片。 annotationView?.image = UIImage(named: "mylocation") } else { annotationView?.image = UIImage(named: "gasstation") } annotationView?.centerOffset = CGPoint(x: 0, y: 0) annotationView?.canShowCallout = true annotationView?.calloutOffset = CGPoint(x: 10, y: 0) annotationView?.isDraggable = true return annotationView }

最终效果如下:

iOS获取附近加油站

清单生活

每天在思考和开发side project的时候都会发现要做的事情越做越多。最后的解决方法就是全部列出来,然后挑几件觉得比较重要的做,测试效果。

需要自己做UI设计,想学Sketch,还有代码需要写,数据需要分析,运营思路需要自己想,产品内容需要自己整理和发布。基本上两台MacBook,一台躺着写app,一台坐着写网站。

囤了一批咖啡豆过年,购买了一些想看的书。

封面很好看,最近比较浮躁,应该多看看安静的文字。

有时间需要整理下最近这段时间要修复的bug和需要升级的功能。

这个月的状态关键词是自省。

开始相信一切事物都有趋势性,重要的是坚持下去。