我想用一些矢量绘图覆盖一个大的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?