- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我相信这将是一个非常简单的答案,但我一直在努力弄清楚如何使用 map View 默认图钉添加自定义标注 View 。使用我当前的代码,我似乎只能将图像添加为 MKPointAnnotation 而不是默认引脚。第一个“viewFor 注释”是我设置默认引脚的方式,而下面的所有内容都是针对自定义标注 View 的……我想要做的是使用默认引脚设置自定义标注 View 。如果我想要自定义调出 View ,是否必须添加自定义图像图钉?
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation { return nil }
if let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "") {
annotationView.annotation = annotation
return annotationView
} else {
let annotationView = MKPinAnnotationView(annotation:annotation, reuseIdentifier:"")
annotationView.isEnabled = true
annotationView.canShowCallout = true
let btn = UIButton(type: .detailDisclosure)
annotationView.rightCalloutAccessoryView = btn
return annotationView
}
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation { return nil }
var annotationView = self.mapView.dequeueReusableAnnotationView(withIdentifier: "Pin")
if annotationView == nil{
annotationView = CustomBusinessCallOutAnnotatiion(annotation: annotation, reuseIdentifier: "Pin")
annotationView?.canShowCallout = false
}else{
annotationView?.annotation = annotation
}
annotationView?.image = UIImage(named: "car")
return annotationView
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if view.annotation is MKUserLocation { return }
let customAnnotation = view.annotation as! CustomBusinessPoint
let views = Bundle.main.loadNibNamed("CustomBusinessCallOut", owner: nil, options: nil)
let calloutView = views?[0] as! CustomBusinessCallOut
calloutView.businessName.text = customAnnotation.businessName
calloutView.businessStreet.text = customAnnotation.businessStreet
calloutView.businessState.text = customAnnotation.businessState
calloutView.businessDistance.text = customAnnotation.businessDistance
calloutView.center = CGPoint(x: view.bounds.size.width / 2, y: -calloutView.bounds.size.height * -0.0001)
view.addSubview(calloutView)
mapView.setCenter((view.annotation?.coordinate)!, animated: true)
}
func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
if view.isKind(of: CustomBusinessCallOutAnnotatiion.self) {
for subview in view.subviews {
subview.removeFromSuperview()
}
}
}
最佳答案
您不需要添加 SubView calloutView。您可以使用 MKAnnotationView
作为自定义标注。
例如你应该整理源码
实现 MKAnnotation
和 MKAnnotationView
的子类。
class PinAnnotation : NSObject, MKAnnotation {
var coordinate : CLLocationCoordinate2D
var title: String?
var calloutAnnotation: CustomBusinessCallOut?
init(location coord:CLLocationCoordinate2D) {
self.coordinate = coord
super.init()
}
}
class CustomBusinessCallOut : NSObject, MKAnnotation {
var coordinate: CLLocationCoordinate2D
var title: String?
init(location coord:CLLocationCoordinate2D) {
self.coordinate = coord
super.init()
}
}
class CalloutAnnotationView : MKAnnotationView {
}
实现 mapView 委托(delegate)方法。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
if annotation is PinAnnotation {
let reuseId = "Pin"
var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView
if pinView == nil {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
}
else {
pinView?.annotation = annotation
}
return pinView
} else if annotation is CustomBusinessCallOut {
let reuseId = "Callout"
var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if pinView == nil {
pinView = CalloutAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView?.addSubview(UIImageView(image: UIImage(named: "car")))
}
else {
pinView?.annotation = annotation
}
return pinView
} else {
return nil
}
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
guard view.annotation is PinAnnotation else { return }
if let pinAnnotation = view.annotation as? PinAnnotation {
let calloutAnnotation = CustomBusinessCallOut(location: pinAnnotation.coordinate)
calloutAnnotation.title = pinAnnotation.title
pinAnnotation.calloutAnnotation = calloutAnnotation
mapView.addAnnotation(calloutAnnotation)
}
}
func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
guard view.annotation is PinAnnotation else { return }
if let pinAnnotation = view.annotation as? PinAnnotation,
let calloutAnnotation = pinAnnotation.calloutAnnotation {
mapView.removeAnnotation(calloutAnnotation)
pinAnnotation.calloutAnnotation = nil
}
}
关于ios - 使用默认 map View 图钉的 Swift Mapview 自定义标注 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52582638/
我有一条短线 (MKPolyline) 和一个自定义注释类 (MKPointAnnotaion)。现在我的点注释位于多段线的中点。但是,我希望每当触摸多段线上的任何点时都显示标注,类似于路由在 map
我正在使用此自定义 MKAnnotationView http://blog.asolutions.com/2010/09/building-custom-map-annotation-callout
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicates: Custom MKPinAnnotation callout bubble similar to default
为什么这不起作用? - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { if (TRAC
我试图在不触摸引脚的情况下隐藏 AnnotationView,这可能吗?谢谢! for (id currentAnnotation in self.mapView.annotations) {
我正在使用 JQplot 饼图。我需要标 checkout 现在图表之外。我怎样才能做到这一点? 最佳答案 如果您指的是数据标签,则需要将 dataLabelPositionFactor 设置为大于
我的 map 上有 20 个图钉,点击后每个图钉都会显示带有 field 名称的注释,并且右侧有一个标注按钮。我已使用 segue 成功将此按钮链接到单个页面。问题是所有位置都链接到同一页面。我想要
是否可以像在 iPhone 和 Google map 中那样将标注附加到 ItemizedOverlay 项目? 最佳答案 我假设“标注”是指通常出现的信息窗口/“气球提示”?这是代码和示例: htt
我正在使用 Python 2.7 和 PySide(Qt 包装器)开发 GUI 应用程序。 我希望标注小部件 float 在其他小部件上方(类似于工具提示),但不使用标准工具提示框架,该框架基本上为小
我有一个 TableView,用于在点击单元格时显示 MapView 注释标注。 在 iOS 10 中,我可以将 MapView 置于注释的中心,然后使用以下方法显示它的标注: func tableV
我想创建一个自定义 MKAnnotationView 标注,如此图所示。我已经测试了几种解决方案,但它们只允许自定义左/右图像和标题/副标题。谁能给我一些源代码或教程链接吗? 目前我一无所知。请帮忙。
我一直在寻找可能是这个问题的根源,但我看不出出了什么问题。我希望你能在这里帮助我。 我正在尝试在 mapView 中显示注释,图钉被丢弃但无法看到标注,直到我先点击用户位置注释(蓝点)然后返回并点击注
我需要将 xml 数据转换为 Excel 文件。当我写入文件时,我的代码可以正常工作,但是,当我尝试写入输出流时,代码无法正常工作。 我想做的就是使用 Apache POI 类创建一个 excel 文
如何始终在 map View 中显示标注?如果我们点击 map View 标注隐藏并再次点击图钉显示。我不想这样......,我需要始终显示标注,没有隐藏。这个怎么做。请帮我。我正在使用下面的代码来显
我有一个MKPointAnnotation: let ann = MKPointAnnotation() self.ann.coordinate = annLoc self.ann.title = "
我已遵循指南here创建自定义标注 View 。我在自定义类中添加了两行: var dismissesAutomatically: Bool = false var isAnchoredToAnnot
我们正在 Angular.js 中做一个项目,我们从用户体验人员那里获得的模型大量使用交互式弹出窗口/标注。 问题是我似乎无法以干净的方式将这些映射到 Angular 概念上。从概念上讲,它们需要自己
我在显示注释标题时遇到问题,如下图所示。第一张图片很好地表示了值(value);另一方面,一旦值上升到三位数,标题就会显示三个点,如第二张图片所示。我想知道如何解决这个问题。任何想法都将非常受欢迎!非
我正在分析几百万封电子邮件。我的目标是能够分类然后分组。组可以是例如: 交付问题(交付缓慢、发货前处理缓慢、可用性信息不正确等) 客户服务问题(电子邮件回复速度慢、回复不礼貌等) 返回问题(返回请求处
我有一个MKPointAnnotation: let ann = MKPointAnnotation() self.ann.coordinate = annLoc self.ann.title = "
我是一名优秀的程序员,十分优秀!