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

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

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

【问题讨论】:

    标签: ios swift uibezierpath 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 有时可能是一场噩梦。这就是为什么我被困在这个stackoverflow.com/q/48599949/3124848@dfd 如果你能指导我,我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2011-08-18
    相关资源
    最近更新 更多