手动设置 MKOverlayView(或子视图)的框架

Posted

技术标签:

【中文标题】手动设置 MKOverlayView(或子视图)的框架【英文标题】:Manually Setting the frame of MKOverlayView (or subview) 【发布时间】:2011-11-20 23:23:42 【问题描述】:

我有一个视图,用作 MKMapView 上的叠加层(它使用 OpenGL 进行绘制)。为了正确执行绘图,glView 的框架需要与 mapView 的框架完全相同。我也不能让视图仅位于地图顶部,因为我希望其他注释和叠加层位于其顶部。

我尝试这样做的方法是创建一个 MKOverlayView,它是 boundingMapRect = MKMapRectWorld。然后我将 glView 作为子视图添加到 overlayView 并手动设置 glView.frame = mapView.frame。问题是 glView 的框架使用的坐标系与 mapView 不同。

mapView 的框架位于您期望的标准视图的坐标中(类似于 0,0,320,250)。 glView 的框架似乎使用 MKMapPoints 作为其坐标基础。

所以我的想法是在我的 MKOverlayView 子类中做这样的事情......

glView.frame = [self rectForMapRect:[mapView visibleMapRect]];

这给了我一个正确坐标的矩形(例如 61612032.000000、105586688.000000、5275648.000000、5685248.000000),但它与地图并不完全对齐。 y 方向已关闭,有时缩放也会出错。

所以我的问题是这样的。

    有没有办法只使用普通屏幕坐标设置 MKOverlayView(或其子视图之一)的框架? 或者有没有其他方法可以实现我刚刚错过的相同目标?

【问题讨论】:

【参考方案1】:

您可以使用 mkoverlay 方法将 cgpoint 转换为 mkmappoint - (MKMapPoint)mapPointForPoint:(CGPoint)point

希望对你有帮助

来源:http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html#//apple_ref/occ/instm/MKOverlayView/mapPointForPoint:

【讨论】:

以上是关于手动设置 MKOverlayView(或子视图)的框架的主要内容,如果未能解决你的问题,请参考以下文章

MKOverlayView 使用示例代码

C# - 查找树视图控件的特定节点或子节点

索引视图在没有 INNER JOIN 或子查询的情况下查找空引用

更改 MKOverlayView 的 MKOverlay 坐标

MKOverlayRenderer 比 MKOverlayView 差?

MKOverlayView 性能问题。啥也不做。但慢