热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Swift中更改MKMapView上的图钉图像

如何解决《在Swift中更改MKMapView上的图钉图像》经验,为你挑选了2个好方法。

我试图在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该行.


推荐阅读
author-avatar
moon2502863581
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有