В чем разница между CGPath и UIBezierPath()?

На данный момент я пытаюсь разработать способ анимации пользовательской кнопки, на которой у меня есть изображение и координаты, но я обнаружил, что вы можете создать кнопку/объект как с помощью класса CGPath или класса UIBezierPath. Может кто-нибудь, пожалуйста, скажите мне, какая разница между этими двумя?

Ответ 1

CGPath является непрозрачным типом из библиотеки CoreGraphics, а UIBezierPath является классом Obj-C в UIKit. UIBezierPath - это оболочка вокруг CGPath (вы можете легко конвертировать между собой), с более объектно-ориентированным интерфейсом и несколькими удобными методами. Использование CGPath может быть немного быстрее, поскольку ему не нужно проходить через Obj-C (хотя кто знает, как он работает с Swift), и он имеет более сложные функции, такие как CGPathApply. Важно отметить, что UIBezierPath соответствует NSCoding, что означает, что вы получаете сериализацию/десериализацию бесплатно.

tl; dr: используйте UIBezierPath, если у вас нет причин для этого.

Ответ 2

Чтобы разбить бит на то, что написал jtbandes, есть еще одно отличие: CGPath - это просто математическое описание формы. Он не имеет свойств и возможностей для конкретного рисования. Вместо этого свойства рисования являются частью CGContext, а также действительной операции рисования. Вы устанавливаете такие вещи, как цвет, ширина линии и т.д. В контексте перед операцией рисования, но они не являются частью самого пути.

В отличие от этого, UIBezierPath имеет свойства рисования и операции рисования.