禁用CAShapeLayer或子类CALayer上的后备存储以防止“伪造图层大小”警告

时间:2015-05-07 18:14:28

标签: ios calayer vector-graphics cashapelayer catiledlayer

我想用一些矢量绘图覆盖一个大的CATiledLayer。要开始使用,我想使用CAShapeLayer,它将由一些自定义CALayer子类或委托替换。

好的方面是它有效。但是,我在每次重绘时都会收到此警告:

-[<CAShapeLayer: 0x1700daa0> display]: Ignoring bogus layer size (150000.000000, 150000.000000), contentsScale 1.000000, backing store size (150000.000000, 150000.000000)

如何正确摆脱此警告?

我认为我不需要后备存储,因为该层的整个点是它(并且连续地)绘制图层的可见部分。

防止此错误的一种(意外发现)方法是将layer.contentsScale设置为较小的值甚至为零,因此后备存储将不具有“虚假大小”的后备存储。 (此属性通常用于允许@ 2x / @ 3x设备具有高分辨率后备存储)

但这感觉就像是一个黑客,有一天会破坏我的应用程序。那么如何禁用CALayer的后备存储?

虽然具有相同的大小,但CATiledLayer(子类CALayer)并未提供此类警告。我已经研究了CALayer或CAShapeLayer的子类化,试图复制CAShapeLayer,但这很令人困惑。 CAShapeLayer似乎没有像我一样遵守规则;我的drawInContext:渲染矢量像素化,而图层绘制自己的矢量清晰,即使在同一个CALayer中也是如此。几乎没有记录的layer.contents属性仅指我的像素化行的后备存储。

是否可以使用公共API重新创建CAShapeLayer?

0 个答案:

没有答案