我之前创建了一个自定义标注气泡作为MKAnnotationView的子视图,因为内置标注非常有限。这需要我在选择MKAnnotationView以考虑标注气泡大小时更改为MKAnnotationView的centerOffset。在iOS 4问世之前,这一切都完美无缺。现在,对于iOS 4,它完全忽略了我对centerOffset属性的更新,因此引脚和气泡似乎向下跳到右边(标注气泡的左上角现在位于引脚点所在的位置)
有谁知道iOS 4中为什么会发生这种变化?我能做些什么来让MKMapView识别新的centerOffset吗?这是苹果推出的错误吗?
感谢您的帮助!
答案 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}}