更新#5我想现在是赏金时间。超过 100 次浏览,没有人被戳中,即使是我发布的代码示例。一些声望点怎么样!
更新 #4这是一个非常复杂的问题,所以我创建了一个新的基于选项卡的项目,其中只包含我在这里遇到问题的应用程序部分。您可以从以下网址下载它:http ://www.servinitup.net/CustomCalloutAnnotation.zip 随意打开它(需要添加您自己的捆绑标识符才能在您的手机上运行它)并使用它,看看您是否可以让那个该死的标注注释随着图钉移动!
更新 #3尝试使 setAnnotation 成为教程的 CalloutMapAnnotationView 的公共方法并直接调用它。没有运气。尽管发生了一些奇怪的事情,但唯一移动的是标注的小三角形部分。我无法让整个标注移动。
更新 #2仍然不太幸运,但现在一直在寻找以编程方式创建“捏缩放”然后立即撤消它的方法,因此用户永远不会看到变化。希望以编程方式执行此操作与手动执行此操作具有相同的效果,并且标注注释将弹回其父级。有任何想法吗?
更新#1在玩了这里之后,我得到了: - 替换self.calloutAnnotation.coordinate = coords;
为self.calloutAnnotation.latitude = coords.latitude;self.calloutAnnotation.longitude = coords.longitude;
- 改变了,如果我在图钉更新后稍微捏地图以放大或缩小,标注注释动画到正确的位置,就在销。
所以现在我需要弄清楚如何在不需要用户实际捏缩放的情况下实现这一点。
原帖
我和其他 SO 用户正在使用这个很棒的解决方案来创建自定义标注注释: http ://blog.asolutions.com/2010/09/building-custom-map-annotation-callouts-part-1/
当您使用标准标注 (annotationview.canShowCallout = true) 并且大头针随着位置的更新而在屏幕上移动时,标准标注会与大头针一起移动,就好像它们被锁定在一起一样。
使用上面的自定义标注解决方案时,当我的图钉在位置更新后四处移动时,标注注释将保持在其原始位置。当然,我想模仿 iOS 标准,并将自定义标注注释跟踪与 pin 一起。
这是我到目前为止的代码,它成功地移动了注释视图,但不是自定义标注注释视图:
/* 核心位置广播一个通知,我的视图控制器监听该通知并调用 locationManagerDidFindLocation */ - (void)locationManagerDidFindLocation:(NSNotification *)notif { CLLocation *location = [notif.userInfo objectForKey:@"location"]; CLLocationCoordinate2D coords = [位置坐标]; MKCoordinateSpan 跨度 = MKCoordinateSpanMake((5/69), (5/69)); MKCoordinateRegion 区域 = {坐标,跨度}; // 如果我们还没有当前位置,则创建一个,将其放置在地图上,并调整地图的区域 // 否则,在平滑动画中更新注释位置和地图位置 if (self.currentLocationAnnotation == nil) { self.currentLocationAnnotation = [[CurrentLocationAnnotation alloc] initWithCoordinate:coords andTitle:@"My Title" andSubtitle:@"My subtitle"]; [self.mapView addAnnotation:self.currentLocationAnnotation]; [self.mapView setRegion:region Animation:true]; [self.mapView regionThatFits:region]; } 别的 { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.45]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; // 这完美地移动了我的注释视图 self.currentLocationAnnotation.coordinate = 坐标; // ******* 这是我的问题所在 // ******* 这个自定义标注注释视图保持不变 // ******* 在它原来的地方,即使它是 // ******* 父注释视图正在屏幕上移动 self.calloutAnnotation.coordinate = 坐标; [self.mapView setRegion:region Animation:true]; [self.mapView regionThatFits:region]; [UIView 提交动画]; } }