- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个应用程序,它可以在用户当前位置放置图钉,也可以根据用户的位置输入来放置图钉。当前位置注释放置得很好,但是当尝试放置用户输入的坐标时,注释没有放置。我已经使用 map.addAnnotation(annotation) 正确添加了注释,其中 annotation.coordinate(对于纽约)是 CLLocationCoordinate2D(纬度:40.713054,经度:-74.007227999999998)。我发现 viewForAnnotation 方法没有被调用,我认为这就是为什么没有放置注释的原因(打印注释没有任何结果)。我有一个请求输入坐标的测试应用程序,它可以放置注释。同样在测试应用程序中,在 viewForPrints 中打印注释输出一个值。
下面我粘贴了一些我认为与该问题相关的代码。如果您需要更多,请发表评论。
import UIKit
import MapKit
import CoreLocation
class MapVC: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var map: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
map.delegate = self
}
下面的这个函数从另一个类中获取值并将坐标转换为 CLLocationCoordinate2D 类型。如上所述,annotation.coordinate(对于纽约)产生 CLLocationCoordinate2D(纬度:40.713054,经度:-74.007227999999998),因此添加用于保存坐标。
func add(newLocation location_one:[String:Any]) {
let momentaryLat = (location_one["latitude"] as! NSString).doubleValue
let momentaryLong = (location_one["longitude"] as! NSString).doubleValue
let annotation = MKPointAnnotation()
annotation.title = location_one["title"] as? String
annotation.coordinate = CLLocationCoordinate2D(latitude: momentaryLat as CLLocationDegrees, longitude: momentaryLong as CLLocationDegrees)
map.addAnnotation(annotation) //not sure if this adds the annotation!
self.map.centerCoordinate = annotation.coordinate
}
func mapView(_ map: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if (annotation is MKUserLocation) {
return nil
}
let identifier = "pinAnnotation"
var annotationView = map.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView
if annotationView == nil {
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView?.canShowCallout = true
} else {
annotationView?.annotation = annotation
}
map.showAnnotations(map.annotations, animated: true)
return annotationView
}
最佳答案
首先,
func mapView(_ map: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
这是一个委托(delegate)方法,不用于设置注释,它只是
Returns the view associated with the specified annotation object, i.e. The annotation view to display for the specified annotation or nil if you want to display a standard annotation view.`
If you do not implement this method, or if you return nil from your implementation for annotations other than the user location annotation, the map view uses a standard pin annotation view.`
在这里查看-
https://developer.apple.com/reference/mapkit/mkmapviewdelegate/1452045-mapview
addAnnotation()
方法足以添加默认引脚注释。它可能不会被调用,因为您可能已经调用了
func add(newLocation location_one:[String:Any])
来自后台队列,它调用内部的 addAnnotatinon()
方法。
如果您正在后台队列上的其他一些 Controller 中调用 add 方法,可能是一些完成处理程序,那么您需要明确地执行它并在 main thread 上调用 add 注释方法
DispatchQueue.main.async {
self.map.addAnnotation(annotation) //Yes!! This method adds the annotations
}
出于调试目的,将您的 Controller 更改为此,甚至删除委托(delegate),然后您也将看到注释。
import UIKit
import MapKit
class ViewController: UIViewController{
@IBOutlet weak var map: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
let annotation = MKPointAnnotation()
annotation.title = "Test Location"
annotation.coordinate = CLLocationCoordinate2D(latitude: 40.71304, longitude: -74.0072)
self.map.addAnnotation(annotation)
}
}
确保-
- The addAnnotation method is called from the main thread
- viewForAnnoation method - you use it to provide customisation to the default pin of the annotation.
关于Swift 注释未放置在 MapView 上,因为未调用 viewForAnnotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41948828/
我正在创建自定义注释,并且正在尝试使用 dequeueReusableAnnotation。 引脚之间的区别在于用于引脚图像的 png。 我创建了 myAnnotation 类,并在创建注释时使用了此
扫描了所有类似的问题并尝试了所有可能的解决方案后,我仍然找不到适合我的情况的解决方案。我尝试在我的 MapView 上放置多个图钉,但似乎无法正常添加我的图钉。我在 viewDidLoad 方法中启动
在我的 viewForAnnotation 方法中,我在图钉右侧添加了一个详细信息披露按钮,但它会将 showsUserLocation 更改为红色图钉,并且在“当前位置”文本右侧有一个披露按钮。 如
我正在 map 上显示图钉,但无法自定义注释 View 的显示。出于某种原因,我的 viewForAnnotation 没有被调用。这是 didFinishLaunchingWithOptions 方
我已经添加UIViewController在 .h 中并已添加 -(void) viewDidLoad { self.mapView.delegate = self; } 但是 view
我已经实现了 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {方法来更改 us
我正在尝试制作自定义注释。我制作了一个自定义注释类,我在其中设计了注释 View 。我试图在我的 Viewcontroller 中调用 viewForAnnotation 中的类。当我运行该应用程序时
最近我在我的应用程序中实现了 viewForAnnotation 方法,以使用我的注释的特征(图像、颜色等)。唯一的问题是,虽然该功能在我的代码中,但定位服务的行为很奇怪。蓝色位置标记不是“脉动”并且
我的 viewForAnnotation 在 iOS8 中运行良好,但在 iOS9 中不显示自定义图钉图像。图片路径没问题。 怎么了 ?谢谢! func mapView(mapView: MKMapV
在我花了 2 天时间搜索错误后,我不得不在这里寻求帮助。我有 MapViewController 并在 map 上放置了一些图钉。我从苹果代码示例的 MapCallouts 和 WeatherMap
我添加了这个: func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
目标是根据存储在结构数组中的某些值自定义引脚颜色。 根据此处的一些帮助,我实现了以下 viewForAnnotation 委托(delegate)方法,并且根据我的结构数据数组的大小在循环中迭代调用此
我正在尝试制作一张 map ,在那里我可以看到我当前的位置,并看到这条街叫什么。 到目前为止,我可以在我的 map 上放置图钉,但出于某种原因,我没有收到标注。并且我在我的 viewForAnnota
我知道这个问题之前已经被其他人问过,并且我之前已经在这个论坛上阅读过它们,但是到目前为止我已经尝试了所有建议的方法,但没有运气,所以我决定发布这个问题。 我在下面有这段代码,用于更改 MKMapVie
我将一个完美运行的 6.1 应用程序升级到了 Xcode 5/ios 7使用 MKMapKit 在 map View 上显示一些图钉。 现在注释图钉不显示了。我确定我的 mapview 委托(dele
我想创建基本的个人资料图像注释而不是默认注释图钉,但我不知道在这种情况下如何使用 viewForAnnotation。 有没有办法创建类似 tableView 页眉页脚 View 的 xib 文件?或
当我没有在 MKMapView 上设置委托(delegate)而是添加注释时,它们的图像如下所示: 但是,如果我像这样返回一个 MKAnnotationView: func mapView(_ map
我正在尝试在 MKMapView 上显示自定义图钉。这些图钉将具有自定义图像以及将显示值的 UILabel。 我能够成功创建带有标签的自定义图钉。现在标签显示静态值。我从像解析这样的后端服务中查询数据
我有不同的类(MKAnnotation 子类)代表 map 注释。 我将它们加载到 map 上,一切正常,但是当我移动或缩放 map 图钉时,它们的图像开始丢失。 当我平移 map viewForAn
我看过其他关于此的报告,但似乎没有一个适用。我们的应用程序因频繁(但无法可靠地重现)崩溃而瘫痪,如下所示: Thread 0 name: Dispatch queue: com.apple.main
我是一名优秀的程序员,十分优秀!