我已经工作了好几个星期了(iOS),但我似乎无法找到一个可以接受的解决方案。
要求
- 显示 10000x10000 像素的背景图像
- 缩放和滚动响应
- 具有自定义绘图的顶部叠加层
- 叠加中的元素是交互式的(点击和突出显示元素等),并且可以打开或关闭片段。
- iOS 4.0
把它想象成一个虚构城镇的地理地图,上面画着一个疯狂的道路、线路、区域和建筑物系统。CGPaths 与各种不透明度填充、一些图标图像等的混合。它就像一个更复杂的谷歌地图应用程序版本。
我试过的:
1 - 多个 CATiled 层
查看层次结构:
- 滚动视图
- ->容器视图
- -->TiledView (CATiledLayer 10000x10000)
- --->OverlayView (CATiledLayer 10000x10000)
结果:左右从魔术苹果缓存中掉落瓷砖。两个 CATiledlayers 似乎不是正确的路径。覆盖的更新并不快。
2 - OverlayView 的子类 TiledView
查看层次结构:
- 滚动视图
- ->OverlayView(TiledView CATiledLayer 10000x10000 的子类)
结果:渲染覆盖更新的时间太长。更新瓷砖缓慢
3 - 带有单个容器视图的滚动视图
查看层次结构:
- 滚动视图
- ->容器视图(10000x10000)
- -->OverlayView (CALayer 10000x10000)
- -->TiledView (CATiledLayer 10000x10000)
结果:无法正常工作,因为 OverlayView 占用了太多内存。TileView 很好,因为它由 CATiledLayer 支持
4 - 使用滚动委托和 CTM 缩放/平移来模拟大的 OverlayView
查看层次结构:
- OverlayView (CALayer 1024x768)
- 滚动视图
- ->平铺视图(CATiledLayer 10000x10000)
结果:我使用滚动视图代表来调整覆盖视图的偏移和缩放。这种方法的问题在于,drawrect 每秒调用 100 次,而覆盖视图的绘制速度不够快,因此它完全滞后到 1fps。
这就是我所在的位置。我觉得这最后一种方法很重要,但需要一些疯狂的工作来驯服drawrect的疯狂。其他想法是尝试在 OpenGL 中解决一些问题。
在我开始做这些之前,我想我会问社区看看他们会做什么/已经做了什么面对类似的要求。
谢谢你的帮助。