ios – 自定义MKAnnotation标注视图?

ios – 自定义MKAnnotation标注视图?,第1张

概述我有一个MKPointAnnotation: let ann = MKPointAnnotation()self.ann.coordinate = annLocself.ann.title = "Customize me"self.ann.subtitle = "???"self.mapView.addAnnotation(ann) 看起来像这样: 如何自定义标注视图以创建自己的视图而不 我有一个MKPointAnnotation:
let ann = MKPointAnnotation()self.ann.coordinate = annLocself.ann.Title = "Customize me"self.ann.subTitle = "???"self.mapVIEw.addAnnotation(ann)

看起来像这样:

如何自定义此标注视图以创建自己的视图而不是预定义视图?

解决方法 应该首先注意,通过简单地调整系统提供的标注的属性,但可以自定义右侧和左侧的附件(通过rightCalloutAccessoryVIEw和leftCalloutAccessoryVIEw),可以实现对标注的最简单更改.您可以在vIEwForAnnotation中执行该配置.

在iOS 9中,我们现在可以访问detailCalloutAccessoryVIEw,它可以通过潜在的视觉丰富的视图来替换标注的副标题,同时仍然享受标注气泡的自动再现(使用自动布局使此更容易).

例如,这是一个标注,使用MKSnapshotter为详细调用附件中的图像视图提供图像,如WWDC 2015 vIDeo What’s New in MapKit所示:

您可以通过以下方式实现此目的:

func mapVIEw(mapVIEw: MKMapVIEw,vIEwForAnnotation annotation: MKAnnotation) -> MKAnnotationVIEw? {    if annotation is MKUserLocation {        return nil    }    let IDentifIEr = "MyCustomAnnotation"    var annotationVIEw = mapVIEw.dequeueReusableAnnotationVIEwWithIDentifIEr(IDentifIEr)    if annotationVIEw == nil {        annotationVIEw = MKPinAnnotationVIEw(annotation: annotation,reuseIDentifIEr: IDentifIEr)        annotationVIEw?.canShowCallout = true    } else {        annotationVIEw!.annotation = annotation    }    configureDetailVIEw(annotationVIEw!)    return annotationVIEw}func configureDetailVIEw(annotationVIEw: MKAnnotationVIEw) {    let wIDth = 300    let height = 200    let snapshotVIEw = UIVIEw()    let vIEws = ["snapshotVIEw": snapshotVIEw]    snapshotVIEw.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[snapshotVIEw(300)]",options: [],metrics: nil,vIEws: vIEws))    snapshotVIEw.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[snapshotVIEw(200)]",vIEws: vIEws))    let options = MKMapSnapshotoptions()    options.size = CGSize(wIDth: wIDth,height: height)    options.mapType = .SatelliteFlyover    options.camera = MKMapCamera(lookingAtCenterCoordinate: annotationVIEw.annotation!.coordinate,fromdistance: 250,pitch: 65,heading: 0)    let snapshotter = MKMapSnapshotter(options: options)    snapshotter.startWithCompletionHandler { snapshot,error in        if snapshot != nil {            let imageVIEw = UIImageVIEw(frame: CGRect(x: 0,y: 0,wIDth: wIDth,height: height))            imageVIEw.image = snapshot!.image            snapshotVIEw.addSubvIEw(imageVIEw)        }    }    annotationVIEw.detailCalloutAccessoryVIEw = snapshotVIEw}

如果您正在寻找更加激进的重新设计标注,或者需要在9之前支持iOS版本,则需要更多的工作.该过程需要(a)禁用默认标注;和(b)当用户点击现有注释视图(即地图上的可视引脚)时,添加您自己的视图.

复杂度然后来自于标注的设计,您必须绘制您想要的所有内容.例如.如果你想画一个泡泡来产生呼啸而过的感觉,你必须自己去做.但是,对于如何绘制形状,图像,文本等的熟悉程度,您应该能够呈现实现所需UX的标注:

只需将视图添加为注释视图本身的子视图,并相应地调整其约束:

func mapVIEw(mapVIEw: MKMapVIEw,dIDSelectAnnotationVIEw vIEw: MKAnnotationVIEw) {    let calloutVIEw = ...    calloutVIEw.translatesautoresizingMaskIntoConstraints = false    calloutVIEw.backgroundcolor = UIcolor.lightGraycolor()    vIEw.addSubvIEw(calloutVIEw)    NSLayoutConstraint.activateConstraints([        calloutVIEw.bottomAnchor.constraintEqualToAnchor(vIEw.topAnchor,constant: 0),calloutVIEw.wIDthAnchor.constraintEqualToConstant(60),calloutVIEw.heightAnchor.constraintEqualToConstant(30),calloutVIEw.centerXAnchor.constraintEqualToAnchor(vIEw.centerXAnchor,constant: vIEw.calloutOffset.x)    ])}

有关创建自己的标注视图的示例,请参阅https://github.com/robertmryan/CustomMapViewAnnotationCalloutSwift.这只添加了两个标签,但它说明了一个事实,您可以绘制任何想要的形状,使用约束来规定标注的大小等.

总结

以上是内存溢出为你收集整理的ios – 自定义MKAnnotation标注视图?全部内容,希望文章能够帮你解决ios – 自定义MKAnnotation标注视图?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1111666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存