CGPath和UIBezierPath()有什么区别?

目前,我正在努力解决如何animation自定义button,我有一个图像和坐标,但我发现你可以通过使用CGPath类或UIBezierPath创build一个button/对象类。 有人可以告诉我两者之间的区别是什么?

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

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

为了扩大一些jtbandes写的东西,还有另一个区别: CGPath只是一个形状的math描述。 它没有绘图特定的属性或function。 相反,绘图属性是CGContext一部分,就像实际的绘图操作一样。 在绘制操作之前,您可以在上下文中设置颜色,线宽等等,但这些不是path本身的一部分。

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