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的主要内容,如果未能解决你的问题,请参考以下文章