CGPath和UIBezierPath()有什么区别?

Bri*_*nCO 19 cgpath ios uibezierpath swift

目前,我正在尝试设计如何设置一个自定义按钮的动画,我有一个图像并具有坐标,但我发现你可以通过使用CGPath类或UIBezierPath创建一个按钮/对象类.有人可以告诉我两者之间有什么区别吗?

jtb*_*des 23

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

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

  • UIBezierPath具有不同于CGPath的坐标系:在CGPath(石英2D)中[原点位于左下角](https://developer.apple.com/library/mac/documentation/GraphicsImaging/在`UIBezierPath`(UIKit)中时,Conceptual / drawingwithquartz2d / dq_overview / dq_overview.html#// apple_ref / doc / uid / TP30001066-CH202-CJBBAEEC)[来源位于左上角](https://developer.apple .com / library / ios / documentation / 2DDrawing / Conceptual / DrawingPrintingiOS / BezierPaths / BezierPaths.html#// apple_ref / doc / uid / TP40010156-CH11-SW5)。这一次咬了我一次。 (2认同)

Ken*_*ses 10

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

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