- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有不同的类(MKAnnotation 子类)代表 map 注释。
我将它们加载到 map 上,一切正常,但是当我移动或缩放 map 图钉时,它们的图像开始丢失。
当我平移 map viewForAnnotation
被调用时,例如 BluePin
类的 pin 不再进入它的 if
block ,结果它呈现来自 viewForAnnotation
的最后一个注释,带有默认图钉图像(绿色)。
更新
我刚刚意识到代码实际上正确地进入了每个 IF 但从未进入嵌套 IF 所以这行代码会产生一些问题:
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("blue")
if (annotationView == nil) { ... after zoom/pan never get here }...
这里可能是什么问题:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation is MKUserLocation {
return nil
}
if(annotation.isKindOfClass(BluePin)){
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("blue")
if (annotationView == nil) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "blue")
annotationView.canShowCallout = true;
annotationView.image = UIImage(named: "blue")
return annotationView
}
} else if(annotation.isKindOfClass(RedPin)){
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("red")
if (annotationView == nil) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "red")
annotationView.canShowCallout = true;
annotationView.image = UIImage(named: "red")
return annotationView
}
}
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier("def") as? MKPinAnnotationView
if pinView == nil {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "def")
pinView!.pinColor = .Green
}
else {
pinView!.annotation = annotation
}
return pinView
}
最佳答案
dequeueReusableAnnotationViewWithIdentifier
方法将返回一个以前创建的 View (如果有的话),但当前未用于显示(这是使用此方法的全部意义,以便您可以重用 View ).
当该方法确实找到可以重复使用的 View 时,它将返回该 View ,因此结果将为非nil
。
当您缩放/平移 map 时,一些注释会从 View 中消失,而新的注释会出现。进入 View 的那些现在可以重新使用不再可见的注释 View 。所以 dequeueReusableAnnotationViewWithIdentifier
返回一个非 nil
结果。
当前代码不处理 dequeueReusableAnnotationViewWithIdentifier
为蓝色和红色引脚返回非 nil
的情况,因此 执行继续执行之后的下一个语句大的 if
block 是 var pinView = mapView...
然后创建默认的绿色图钉 View 。
需要修改代码以处理 dequeueReusableAnnotationViewWithIdentifier
为蓝色和红色引脚返回非 nil
的情况:
if(annotation.isKindOfClass(BluePin)) {
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("blue")
if (annotationView == nil) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "blue")
annotationView.canShowCallout = true;
annotationView.image = UIImage(named: "blue")
} else {
//handle blue view re-use...
annotationView.annotation = annotation
}
//move return to after the if-else...
return annotationView
}
else if(annotation.isKindOfClass(RedPin)) {
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("red")
if (annotationView == nil) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "red")
annotationView.canShowCallout = true;
annotationView.image = UIImage(named: "red")
} else {
//handle red view re-use...
annotationView.annotation = annotation
}
//move return to after the if-else...
return annotationView
}
关于swift - viewForAnnotation 有时无法获取自定义 MKAnnotation 类并正确呈现它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29049097/
我在 MKAnnotation 上有一个标注。标注上的附件应该在点击时更改 MKAnnotationView 的图像。有没有办法改变这个,而无需重新创建 MKAnnotation?我问的原因是我想更改
我正在使用 MKMapview 在我的原生 iPhone 应用程序中显示 map ,并向 map View 添加两个标记。单击注释标记时,我希望显示一个电话号码,然后单击电话号码应该调用该号码。 我怎
我正在开发一个 tvOS 应用程序,我希望能够在注释之间滑动。我将注释存储在字典中,并将字典存储在数组中以备将来使用。我只是为加拿大、美国和墨西哥绘制了三个注释。我希望能够在这些注释之间滑动 Remo
为了在 Swift 中向 mapview 添加注释,我有这段有效的代码,例如: 让 myLocation = CLLocationCoordinate2D(55.55, -77.77) let ann
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
我有一个 MKMapView 查询服务器并在中心更改时显示一组 MKAnnotations 但我遇到重复 MKAnnotations 的问题,因为我阅读并添加了它们。 我正在考虑用 for 查看每个注
我有一个对象列表,每个对象都有标题、名称、描述、纬度、经度和地址。 是否可以将此对象显示为 MKAnnotations?我已经坚持了几个小时了。当我尝试使对象具有 CLLocationCoordina
class Point: NSObject, MKAnnotation { var id: String? var title: String? var coordinate: CLLocationC
在我的应用程序出现问题后,我为 MKMapView 编写了一个测试应用程序。我的问题是我无法在 map 上放置多个图钉。在 viewDidLoad: 方法中使用此代码,应在指定坐标的对角线上显示 10
到目前为止,我已经在一些应用程序中看到了这一点,当用户缩小时,注释会彼此靠得更近,如果它们靠得太近,则会被替换为例如“+5”别针或其他东西。 该怎么做?我认为应该在 regionDidChangeAn
MKAnnotation 有问题。有一个自定义的 pinview 并且在第一次加载时工作正常。去删除引脚,然后重新加载相同的引脚,它们会改变颜色。我从两个不同的数据库中添加引脚并且工作正常。移除并分别
我知道之前有一个关于这个的问题。但是,我觉得有点菜鸟,因为我无法解决它。 尝试此操作时出现错误: MKAnnotation *annotation = [[MKAnnotation alloc] in
我正在尝试将 MKAnnotations 保存到我正在学习的类(class)中的项目的核心数据中。 我查看了 github 上其他学生的代码,他们都采用相同的方法创建自定义 NSManagedObje
我在 map 上显示了几个图钉,就像这样: for (int i = 0; i )annotation { static NSString *identifier = @"CarPin"; if ([
我在我的 map 中使用自定义图标作为注释。大约有 200 个引脚。 在模拟器中,我的 map 看起来像这张图片。 但是,在我的设备中,有一些红点注释靠近我的用户位置。就像下图所示。 我猜这是速度引起
我已经阅读了很多关于 MKAnnotation 的内容以及您需要如何在您的子类中实现 setCoordinate 以及 draggable=TRUE 的顺序使整个 shebang 可拖动。 我的情况是
在我的应用程序中,我正在显示一个 TableView ,其中包含从数据库中搜索用户的结果。现在在该 TableView 中有一个按钮,通过单击该用户可以在 map 中查看所有搜索到的用户的位置。当用户
亲切的问候, 我正在使用下面的代码在 iOS 上显示注释 mkmapview在 map 上点击时。 MKPointAnnotation *aAnnotationPoint = [[MKPointAnn
我有一个 MKMapView,它有一个图钉,按下时会显示注释的标题和副标题。 代码中是否有一种方法可以自动显示此文本,以便用户无需单击它? 如果我有很多图钉,它们是否也能同时出现? 最佳答案 您需要使
我有一个 map View Controller (UIViewController、MKMapView)及其委托(delegate)(HCIResultMapViewController)。 我希望
我是一名优秀的程序员,十分优秀!