Я пытаюсь скосить траектории в основной графике. Кто-нибудь уже делал это для произвольных форм, и если да, то готовы ли они поделиться кодом?
Я включил мою реализацию ниже. Я использую три переменные для определения скоса: CGFloat bevelSize
, UIColor highlightColor
, UIColor shadow
, Обратите внимание, что угол источник света всегда 135 градусов.Я еще не закончил это реализовывать, но вот, по сути, то, что я пытаюсь сделать, разбитое на две части. Часть первая, создание фокусных точек:
Целью создания фокальных точек является пропорциональное «уменьшение» формы.
Вторая часть немного сложнее. Я создаю каждую сторону/сегмент скошенной формы. Я делаю это, рисуя «в» (с помощью bevelSize
) каждую точку исходной формы по радиусу линии, которая проходит от ближайшего фокуса до рассматриваемой точки. Когда у меня есть два последовательных «bevelPoints», я создаю UIBezierPath, который простирается от bevelPoints до исходных точек и обратно до bevelPoints (обратите внимание, это включает дуги). Это создает «сторону/сегмент», который я могу использовать для заполнения. На прямых сторонах я просто заливаю либо тенью, либо цветом блика, в зависимости от угла стороны. Для дуг я определяю «дугу» в радианах.Если эта дуга содержит угол перехода (M_PI_4 или M_PI + M_PI_4), я заполняю ее градиентом (от тени к блику или от блика к тени, в зависимости от того, что подходит). В противном случае я заполняю его сплошным цветом.
Обновление
Я выделил свой ответ (см. ниже) в отдельный пост в блоге. Я больше не использую детали реализации, которые вы видите выше, но оставлю их для справки. Я надеюсь, что это поможет всем, кто хочет использовать Core Graphics.