【发布时间】:2011-09-17 14:05:56
【问题描述】:
更新 #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 提交动画]; } }【问题讨论】:
-
@JARinteractive - 我认为您是常驻专家,因为您撰写了我正在关注的博客文章。你有什么想法吗?
-
您链接到的项目缺少几个 PNG、map_marker 和 map_marker@2x。你能包括和更换拉链吗?此外,当我感到沮丧时,你的 setAnnotation... 方法的命名让我对我的方法命名感觉更好。
-
哈!我想我忘了清理它。是的,绝对是我在拔掉头发五天后采用的命名约定。我刚刚添加了 .png 并重新上传。看看,谢谢你给这个看看!
-
示例代码的链接对我不起作用。有镜子吗?
-
查看您的代码,我认为问题可能出在您处理位置的方式上。在开始时执行代码,它给出了 19 次相同的位置,之后再也没有。为什么不使用 CoreLocation 而不是 NSNotificationCenter?
标签: iphone objective-c mapkit mkmapview mkannotationview