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标注视图?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)