【发布时间】:2017-02-14 22:21:35
【问题描述】:
当使由 CATiledLayer 支持的视图无效时,前一个图块仍然“卡住”并且未正确无效。
这似乎发生在视图无效时(在主线程上),而与此同时,瓷砖渲染线程仍在处理先前版本的瓷砖。不是缓存新版本的磁贴,而是缓存以前的版本。
CATiledLayer 支持的视图是 UIScrollView 的子视图,并且是可缩放的。瓦片的渲染可能会很昂贵,并且可以使用渲染线程 10 毫秒。
示例
演示此问题的示例代码:https://github.com/Q42/CATiledLayerBug
- 在 CATiledLayer 中,开始渲染所有红色图块(这大约需要 3 秒才能完成)
- 每个渲染步骤大约需要 10 毫秒
- 在渲染期间(800ms 后),使完整视图无效:
tiledView.setNeedsDisplay() - 开始渲染所有灰色图块(这同样需要大约 3 秒)
- 两个图块(随机?)保持红色,而不是变成灰色。
在此处查看update 函数:https://github.com/Q42/CATiledLayerBug/blob/master/TiledLayerTest/ViewController.swift#L45
解决方法?
这似乎是CATiledLayer 的实现中的一个错误。由于我无法解决这个问题,有人知道解决此问题的好方法吗?
我已经为此提交了一个雷达:http://www.openradar.me/28648050
【问题讨论】:
标签: ios swift catiledlayer