2017-08-06 102 views
-1

我想绘制一个简单的形状作为游戏界面的一部分,大多数教程使用UIBezierPath来定义CAShapeLayer的路径。但是,我注意到UIBezierPath已经有一个现有的fill functionUIBezierPath填充vs CAShapeLayer

这可能是一个愚蠢的问题,但使用它和使用单独的CAShapeLayer绘制路径有什么区别?另外,哪一个更好?

回答

4

CAShapeLayer中的“CA”代表CoreAnimation

如果你想制作动画,移动,操纵或不好,别的到UIBezierPath,你需要使用一个CALayer(或它的子类CAShapeLayer)。

UIBezierPaths是正确的东西,如果你想要的只是“绘制” - 它通常在draw(rect:)完成。如果您愿意,您也可以“重绘”。

但是,如果你想持久化(和控制)在形状上,将该UIBezierPath变成CAShapeLayer

+0

如果我们想用颜色填充uibezierpath并渲染它,该怎么办?不是CAShapeLayer我们唯一的选择? @dfd –

+1

我认为最准确的答案是“它取决于”。你没有使用 - 或者我暗示使用 - 单词*动画*,所以我会说“不”。所有视图都有一个可以重写的'draw(rect:)'函数,其中包含可以绘制“UIBezierPath”的上下文。此路径可以包含* stroke *和* fill *颜色。如果您选择*关闭贝塞尔路径,它将用填充颜色填充封闭的路径。是的,这是可能发生的一些事情 - “CAShapeLayer”为您提供了一个可以进行动画处理的图层,但它不是* only *选项。 – dfd

+0

我明白了,我的意思是我问过,因为当我通过CAshapelayer从路径创建一个形状时,它很容易呈现它,但使用cgcontextref有时可能是一场噩梦。这就是为什么我被困在这个https://stackoverflow.com/q/48599949/3124848 @dfd我真的很感激,如果你能指导我。 –