MKAnnotationView – locking自定义注释视图以固定位置更新

更新#5我想这是赏金时间。 100多个意见,没有人采取刺,即使我已经张贴的代码示例。 一些声望点呢?

更新#4这是一个非常复杂的问题,所以我创build了一个新的基于标签的项目,其中包括我在这里遇到的麻烦的应用程序的部分。 你可以从http://www.servinitup.net/CustomCalloutAnnotation.zip下载它。随意打开它(需要添加你自己的包标识符在你的手机上运行它),并玩弄它,看看你是否可以得到那个恶意的标注注释与引脚移动!

更新#3尝试使setAnnotation的教程的CalloutMapAnnotationView的公共方法,并直接调用。 没有任何运气。 尽pipe发生了一些奇怪的事情,唯一感动的是标注的小三angular部分。 我无法让整个标注移动。

更新#2仍然没有太多的运气,但现在一直在寻找方式编程创build一个“捏缩放”,然后立即撤消,所以用户从来没有看到一个变化。 希望这样做以编程方式将有同样的效果做手动,标注注释将弹回到它的父。 有任何想法吗?

更新#1在这里玩了以后,我得到了: – 取代self.calloutAnnotation.coordinate = coords; with self.calloutAnnotation.latitude = coords.latitude;self.calloutAnnotation.longitude = coords.longitude; – 改变了这一点,如果我稍微捏住地图以在引脚更新后放大或缩小,则标注注释会在引脚正上方移动到正确的位置。

所以现在我需要弄清楚如何在没有用户实际缩放的情况下发生这种情况。

原始post

我和其他SO用户一起,正在使用这个出色的解决scheme来创build一个自定义标注注释: http : //blog.asolutions.com/2010/09/building-custom-map-annotation-callouts-part-1/

当您使用标准标注(annotationview.canShowCallout = true)并且标签在位置更新时围绕屏幕移动时,标准标注将与标签一起跟踪,就好像它们被locking在一起。

当使用上面的自定义标注解决scheme时,当位置更新后我的引脚移动时,标注注释将保留在原始位置。 当然,我想模仿iOS标准,并且将自定义标注注释与引脚一起跟踪。

这里是我到目前为止的代码,这是成功地移动注释视图,但不是自定义标注注释视图:

 / *核心位置广播通知,我的视图控制器侦听该通知,并调用locationManagerDidFindLocation * /
 - (void)locationManagerDidFindLocation:(NSNotification *)notif {
     CLLocation * location = [notif.userInfo objectForKey:@“location”];
     CLLocationCoordinate2D coords = [位置坐标];
     MKCoordinateSpan span = MKCoordinateSpanMake((5/69),(5/69));
     MKCoordinateRegion region = {coords,span};

     //如果我们还没有当前位置,请创build一个,将其放置在地图上,然后调整地图的区域
     //否则,以平滑的animation更新注释位置和地图位置
     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 animated:true];
         [self.mapView regionThatFits:region];
     } else {
         [UIView beginAnimations:nil context:NULL];
         [UIView setAnimationDuration:0.45];
         [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

             / /这完全移动我的注释视图
             self.currentLocationAnnotation.coordinate = coords;

             // *******这是我的问题所在
             // *******此自定义标注注释视图保留
             // *******在原来的地方,即使它是
             // *******父标注视图正在屏幕上移动
             self.calloutAnnotation.coordinate = coords;

             [self.mapView setRegion:region animated:true];
             [self.mapView regionThatFits:region];
         [UIView commitAnimations];
     }
 }

自定义标注

我基于您的CalloutMapAnnotationView创build了一个项目,演示了一个基于IB的解决scheme。 箭头键为位置注释的animation添加animation,并且是标注注释。 现在,标注还会根据提供的contentView自动resize,并从一个单独的笔尖加载视图。 祝你好运!

https://github.com/jacobjennings/JJMapCallout

我知道你不会喜欢这个答案, 但它的工作原理 。 您链接的示例只是通过最困难的方式(drawRect :)在覆盖图中绘制自定义图像。 你有没有考虑过将覆盖图渲染成一个UIImage,然后在一个非常简单的MKAnnotationView上设置image属性? 即使您需要定期更改内容,例如更新栏中好友的数量,也可以在发生更改时重新绘制图像,并更新相应的MKAnnotationView。

我检查你的代码,我的build议是创build一个新的自定义MKAnnotationView并在其上封装两个视图(引脚和标注)。

但是对于你当前的代码考虑阅读批准的回答这个问题: MKMapView自动移动注释 – animation他们?

干杯。