在使用CATiledLayer进行翻译时抚摸UIBezierPath时的EXC_BAD_ACCESS

时间:2017-08-15 01:02:16

标签: ios swift uiscrollview uibezierpath catiledlayer

我有一个UIScrollView,其中包含一个“绘图视图”,用户可以用手绘制UIBezierPath。它使用CATiledLayer,因此我可以在不模糊的情况下进行缩放。

当我绘制路径时,尽管多次调用笔划,但没有EXC_BAD_ACCESS错误。但是,当我使用CGAffineTransForm转换路径时,它会在路径被描边时抛出EXC_BAD_ACCESS错误之前持续不到几秒钟。它还可以通过视觉创造人工制品。

我确信这与CATiledLayer不喜欢翻译有关,因为当我停止使用CATiledLayer时,没有任何问题 - 路径按预期转换,没有人工制品。但是,我需要CATiledLayer进行缩放而不会模糊(据我所知,除了将contentcalefactor设置为缩放级别之外,没有其他解决办法)。

抛出错误时内存/ CPU使用率没有异常。

值得注意的是,我正在使用iOS 11和Xcode 9测试版。 (编辑:也发生在iOS 10上,但仍然使用相同的Xcode 9 Beta)

我尝试打开僵尸对象,但它没有提供任何有用的信息。

1 个答案:

答案 0 :(得分:0)

CATiledLayer使用多个线程来绘制内容。许多UIKit操作需要从主线程完成。保持平铺图层优势的最佳方法应该是使用核心图形路径而不是UIKit路径。另请参阅Technical Q&A 1637