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 的更新的主要内容,如果未能解决你的问题,请参考以下文章
sigsegv segv_accerr 在 ios7 中崩溃 mkmapview
在 iOS 7 中添加 MKMapView 会导致状态栏问题