Quelle est la différence entre CGPath et UIBezierPath ()?

En ce moment, j'essaie de comprendre comment animer un button personnalisé dont j'ai une image et dont j'ai les coordonnées, mais j'ai trouvé que vous pouvez créer un button / object à la fois en utilisant la class CGPath ou le UIBezierPath class. Quelqu'un peut-il me dire quelle est la différence entre les deux?

CGPath est un type opaque de la bibliothèque CoreGraphics, tandis que UIBezierPath est une class Obj-C dans UIKit. UIBezierPath est un wrapper autour de CGPath (vous pouvez convertir entre eux facilement), avec une interface plus orientée object et quelques methods pratiques. L'utilisation de CGPath peut être légèrement plus rapide car elle ne doit pas passer par Obj-C (bien que sachant comment cela fonctionne avec Swift) et elle a des fonctions plus avancées comme CGPathApply . Fait important, UIBezierPath est conforme à NSCoding, ce qui signifie que vous obtenez gratuitement la serialization / déserialization.

tl; dr: utilisez UIBezierPath sauf si vous avez des raisons de ne pas le faire.

Pour développer un peu ce que jtbandes a écrit, il y a une autre distinction: CGPath est juste une description mathématique d'une forme. Il n'a aucune propriété ou capacité spécifique au dessin. Au lieu de cela, les propriétés de dessin font partie du CGContext comme l'opération de dessin proprement CGContext . Vous définissez des éléments comme la couleur, la largeur de ligne, etc. sur le context avant l'opération de dessin, mais ceux-ci ne font pas partie du path lui-même.

En revanche, UIBezierPath a des propriétés de dessin et des opérations de dessin.