MKMapView忽略了iOS 4中centerOffset的更新

时间:2010-06-28 22:07:51

标签: iphone mkmapview ios4 mkannotationview

我之前创建了一个自定义标注气泡作为MKAnnotationView的子视图,因为内置标注非常有限。这需要我在选择MKAnnotationView以考虑标注气泡大小时更改为MKAnnotationView的centerOffset。在iOS 4问世之前,这一切都完美无缺。现在,对于iOS 4,它完全忽略了我对centerOffset属性的更新,因此引脚和气泡似乎向下跳到右边(标注气泡的左上角现在位于引脚点所在的位置)

有谁知道iOS 4中为什么会发生这种变化?我能做些什么来让MKMapView识别新的centerOffset吗?这是苹果推出的错误吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

确保您使用的是 MKAnnotationView ,而不是 MKPinAnnotationView !您无法设置 MKPinAnnotationView 对象的centerOffset(当然,除非您是子类)。

答案 1 :(得分:4)

我有同样的问题 - centerOffset似乎只是第一次考虑。 它在内部更改,但视图不会移动 - 所以您需要做的是自己移动视图。

您可以通过使用所需的偏移调整其中心来移动视图 - 所选视图在左上角与未选择的视图保持对齐,因此您需要重新对齐它们的中心。这是我的情况:

已选择 - >未选择的:

self.center = CGPointMake(self.center.x + 56.0, self.center.y + 130.0);
self.centerOffset = CGPointMake(5.0, -14.0);

未选中 - >选择的:

self.center = CGPointMake(self.center.x - 56.0, self.center.y - 130.0);
self.centerOffset = CGPointMake(64.0, -81.0);

其中130是视图之间的高度差(中心点位于底部),56是其中心的X偏移之间的差异。

请记住 - 您仍然需要更改中心偏移,因为缩放时会考虑它。

希望这会有所帮助,我已经失去了几个小时。请记得向Apple提交错误报告。

答案 2 :(得分:0)

我认为您可以使用centerOffset代替setRegion,而CGPoint point = [mapView convertCoordinate:selectedAnnotation.coordinate toPointToView:self.view]; CGRect frame = [customView frame]; frame.origin.y = point.y - frame.size.height; frame.origin.x = point.x - frame.size.width / 2; MKCoordinateRegion region = [mapView convertRect:frame toRegionFromView:self.view]; [mapView setRegion:region animated:YES]; 适用于所有版本。

{{1}}