【发布时间】:2014-08-23 01:24:37
【问题描述】:
目前,我正在尝试研究如何为自定义按钮设置动画,该按钮具有图像和坐标,但我发现您可以使用 CGPath 类来创建按钮/对象或 UIBezierPath 类。有人可以告诉我这两者有什么区别吗?
【问题讨论】:
标签: ios swift uibezierpath cgpath
目前,我正在尝试研究如何为自定义按钮设置动画,该按钮具有图像和坐标,但我发现您可以使用 CGPath 类来创建按钮/对象或 UIBezierPath 类。有人可以告诉我这两者有什么区别吗?
【问题讨论】:
标签: ios swift uibezierpath cgpath
CGPath 是 CoreGraphics 库中的不透明类型,而 UIBezierPath 是 UIKit 中的 Obj-C 类。 UIBezierPath 是 CGPath 的包装器(您可以轻松地在它们之间进行转换),具有更面向对象的界面和一些方便的方法。使用 CGPath 可能会稍微快一些,因为它不必通过 Obj-C(尽管谁知道它如何与 Swift 一起工作)并且它具有更高级的功能,例如 CGPathApply。重要的是,UIBezierPath 符合 NSCoding,这意味着您可以免费获得序列化/反序列化。
tl;dr:使用 UIBezierPath,除非你有理由不这样做。
【讨论】:
UIBezierPath 的坐标系不同于CGPath:在CGPath (Quartz 2D) the origin is at the bottom-left 而在UIBezierPath (UIKit) the origin is at the top-left。这咬了我一次。
为了扩展 jtbandes 所写的内容,还有另一个区别:CGPath 只是对形状的数学描述。它没有特定于绘图的属性或功能。相反,绘图属性是CGContext 的一部分,就像实际的绘图操作一样。您在绘制操作之前在上下文中设置颜色、线宽等内容,但这些不是路径本身的一部分。
相比之下,UIBezierPath 具有绘图属性和绘图操作。
【讨论】:
CGContext 上的一个函数。我的主要观点是CGPath 没有,例如,没有线条粗细或线条图案。