На данный момент я пытаюсь разработать способ анимации пользовательской кнопки, на которой у меня есть изображение и координаты, но я обнаружил, что вы можете создать кнопку/объект как с помощью класса 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
имеет свойства рисования и операции рисования.