MKMapView 在 iOS 4 中忽略 centerOffset 的更新

Posted

技术标签:

【中文标题】MKMapView 在 iOS 4 中忽略 centerOffset 的更新【英文标题】:MKMapView ignores update of centerOffset in iOS 4 【发布时间】:2011-03-09 08:49:43 【问题描述】:

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

有谁知道为什么这在 iOS 4 中发生了变化?我可以做些什么来让 MKMapView 识别新的 centerOffset?这是苹果引入的bug吗?

感谢您的帮助!

【问题讨论】:

只是想加入,遇到了同样的问题。我目前已经调整了注释中心以补偿偏移量的变化。但这远非理想。 【参考方案1】:

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

【讨论】:

【参考方案2】:

我有同样的问题 - 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 提交错误报告。

【讨论】:

【参考方案3】:

我认为您可以使用setRegion 代替centerOffset,它适用于所有版本。

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];

【讨论】:

我们不是在调整地图的区域,而是调整实际注释视图的中心偏移量。 @Yannick,是的,但是将区域设置为相同尺寸但新的中心坐标将使地图重新居中。我想说这就是答案,遇到了和你一样的麻烦。 这不是我想要达到的目标。当前地图区域必须保持不变。我希望注释视图根据其新的 centerOffset 属性移动。

以上是关于MKMapView 在 iOS 4 中忽略 centerOffset 的更新的主要内容,如果未能解决你的问题,请参考以下文章

MKMapView 在 iOS10 中检测内存泄漏

sigsegv segv_accerr 在 ios7 中崩溃 mkmapview

MKMapView 区域在 iOS7 中方向更改后损坏

在 iOS 7 中添加 MKMapView 会导致状态栏问题

MKMapView - 未调用 rendererForOverlay

ios中Mkmapview中的自定义标注