【问题标题】:What is the difference between CGPath and UIBezierPath()? [closed]CGPath 和 UIBezierPath() 有什么区别? [关闭]
【发布时间】:2014-08-23 01:24:37
【问题描述】:

目前,我正在尝试研究如何为自定义按钮设置动画,该按钮具有图像和坐标,但我发现您可以使用 CGPath 类来创建按钮/对象或 UIBezierPath 类。有人可以告诉我这两者有什么区别吗?

【问题讨论】:

    标签: ios swift uibezierpath cgpath


    【解决方案1】:

    CGPath 是 CoreGraphics 库中的不透明类型,而 UIBezierPath 是 UIKit 中的 Obj-C 类。 UIBezierPath 是 CGPath 的包装器(您可以轻松地在它们之间进行转换),具有更面向对象的界面和一些方便的方法。使用 CGPath 可能会稍微快一些,因为它不必通过 Obj-C(尽管谁知道它如何与 Swift 一起工作)并且它具有更高级的功能,例如 CGPathApply。重要的是,UIBezierPath 符合 NSCoding,这意味着您可以免费获得序列化/反序列化。

    tl;dr:使用 UIBezierPath,除非你有理由不这样做。

    【讨论】:

    • 感谢您提供的信息,它实际上非常有帮助!正如您可能看到的,我基本上是一个绝对的初学者。然而,我试图得到的是我试图为一个按钮创建一个路径,我有但只在图片中。它只是由一个绿色的圆形进度条组成,我相信它被称为从一种状态到另一种状态的转换,如下面的网站所示。我一直在寻找指导的原始网站如下:robb.is/working-on/a-hamburger-button-transition 但我需要有关如何使用按钮将其完全实施到我的项目中的帮助。
    • 这篇文章很好地解释了为什么这个答案不正确。 stackoverflow.com/questions/6327817/…
    • UIBezierPath 的坐标系不同于CGPath:在CGPath (Quartz 2D) the origin is at the bottom-left 而在UIBezierPath (UIKit) the origin is at the top-left。这咬了我一次。
    • tl;dr 在上面 ;)
    【解决方案2】:

    为了扩展 jtbandes 所写的内容,还有另一个区别:CGPath 只是对形状的数学描述。它没有特定于绘图的属性或功能。相反,绘图属性是CGContext 的一部分,就像实际的绘图操作一样。您在绘制操作之前在上下文中设置颜色、线宽等内容,但这些不是路径本身的一部分。

    相比之下,UIBezierPath 具有绘图属性和绘图操作。

    【讨论】:

    • 我不确定你的意思。 CGPaths 是用CGContextStrokePath 等函数绘制的。
    • 这是CGContext 上的一个函数。我的主要观点是CGPath 没有,例如,没有线条粗细或线条图案。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2011-09-20
    • 2013-03-25
    • 2023-03-08
    • 2016-07-17
    • 2015-07-17
    • 2014-07-11
    • 2020-12-28
    相关资源
    最近更新 更多