我正在开发一个应用程序,它使用MKOverlay视图在Google基本地图上叠加我自己的自定义地图.我一直在使用Apple优秀的TileMap示例代码(来自WWDC 2010)作为指南.
我的问题 - 当"overzoomed"到比我生成的tile集更深的细节级别时,代码不会显示任何内容,因为在计算的Z级别上没有可用的tile.
我想要的行为 - 当"过度使用"应用程序应该只是继续放大最深层次的瓷砖.叠加层变得模糊是一种很好的用户体验 - 叠加层消失是一种非常糟糕的体验.
这是返回要绘制的图块的代码 - 我需要弄清楚如何修改它以限制Z深度,而不会破坏为叠加图块计算的帧的缩放.有什么想法吗???
- (NSArray *)tilesInMapRect:(MKMapRect)rect zoomScale:(MKZoomScale)scale
{
NSInteger z = zoomScaleToZoomLevel(scale);
// PROBLEM: I need to find a way to cap z at my maximum tile directory depth.
// Number of tiles wide or high (but not wide * high)
NSInteger tilesAtZ = pow(2, z);
NSInteger minX = floor((MKMapRectGetMinX(rect) * scale) / TILE_SIZE);
NSInteger maxX = floor((MKMapRectGetMaxX(rect) * scale) / TILE_SIZE);
NSInteger minY = floor((MKMapRectGetMinY(rect) * scale) / TILE_SIZE); …Run Code Online (Sandbox Code Playgroud) 我正在使用通过MKMapView和MKOverlay使用半透明平铺地图覆盖的iPhone/iPad应用程序.
我希望用户能够深入放大地图,但我的地图叠加层的分辨率只能达到6级.
我不想限制缩放.
但是......如果用户缩放"太远"然后滚动到新的图块,如果它们比覆盖图块树更深,则不会绘制我的叠加.
我希望即使在用户放大深度时也可以绘制叠加层.
有没有最佳实践来实现这一目标?
我提出的两个选项:
1)设置用户可以缩放的范围限制.不理想,因为即使叠加是低分辨率,它们仍可能在透明的彩色范围内,并且透明的覆盖层看似消失是误导性的.
2)预渲染瓷砖比其他方式更深入...这样可行,但它会使我的应用程序的尺寸增加一个数量级.
必须有一个更好的方法.有任何想法吗???
更新:我能找到的最接近的示例代码是来自WWDC 2010的Apple的TileMap示例.他们的代码遇到了同样的问题 - 如果放大"太远",则不会显示地图叠加层.