UIBezierPath 填充与 CAShapeLayer

Posted

技术标签:

【中文标题】UIBezierPath 填充与 CAShapeLayer【英文标题】:UIBezierPath fill vs CAShapeLayer 【发布时间】:2017-08-06 23:49:18 【问题描述】:

我正在尝试绘制一个简单的形状作为游戏界面的一部分,并且大多数教程使用 UIBezierPath 来定义 CAShapeLayer 的路径。但是,我注意到 UIBezierPath 已经有一个现有的fill function。

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

【问题讨论】:

【参考方案1】:

CAShapeLayer 中的“CA”代表 CoreAnimation

如果您希望为UIBezierPath 设置动画、移动、操作或其他任何内容,您需要使用CALayer(或者它的子类CAShapeLayer)。

如果您想要简单地“绘制”,那么 UIBezierPaths 是正确的使用方法 - 通常在 draw(rect:) 中完成。如果愿意,您也可以“重绘”。

但是,如果您想要对形状进行持久性(和控制),请将 UIBezierPath 转换为 CAShapeLayer

【讨论】:

如果我们想用颜色填充uibezierpath并渲染它怎么办? CAShapeLayer 不是我们唯一的选择吗? @dfd 我认为最准确的答案是“视情况而定”。你没有使用 - 或者对我来说暗示使用 - animate 这个词,所以我会说“不”。所有视图都有一个可以覆盖的draw(rect:) 函数,其中包含一个可以在其中绘制UIBezierPath 的上下文。这个路径可以有一个stroke 和一个fill 颜色。如果您选择关闭贝塞尔路径,它将用填充颜色填充封闭路径。是的,这是可能发生的一些事情 - CAShapeLayer 为您提供了一个可以动画的图层,但它不是唯一的选择。 我明白,我的意思是我问过,因为当我通过 CAshapelayer 从路径制作形状时,它很容易准确地渲染它,但使用 cgcontextref 有时可能是一场噩梦。这就是为什么我被困在这个***.com/q/48599949/3124848@dfd 如果你能指导我,我真的很感激。

以上是关于UIBezierPath 填充与 CAShapeLayer的主要内容,如果未能解决你的问题,请参考以下文章

UIBezierPath 附加重叠未填充

如何使 UIBezierPath 从中心填充

iOS贝塞尔曲线(UIBezierPath)的基本使用方法

如何为 UIBezierPath 上的填充颜色变化设置动画?

如何以给定的顺序动画/填充 UIBezierPath?

如何填充 UIBezierPath 中的重叠部分?