Вкратце:
рамку
или границы
для CAShapeLayer
автоматически (и Apple НЕ реализовала эквивалент [UIView sizeThatFits]
)Итак, какой правильный способ программно установить рамку вновь созданного CAShapeLayer
с вновь добавленным CGPath
? Документация Apple молчит по этому вопросу.
То, что я пробовал, не работает:
CAShapeLayer
CGPath
, добавить его в слойframe
слоя - он {{0,0},{0,0}}
layer.frame = CGPathGetBoundingBox( layer.path )
Рамка теперь правильная, но путь теперь смещен в ДВА раза - изменение рамки
приводит к тому, что путь эффективно смещается на дополнительные (x,y)
пиксели
Set: layer.bounds = CGPathGetBoundingBox( layer.path )
layer.position = CGPathGetBoundingBox( layer.path ).origin
Одна вещь, которую я пробовал, РАБОТАЕТ, но вызывает проблемы в других местах:
EDIT: это ломается, как только вы автоповорачиваете экран. Мое предположение: автоповорот Apple требует контроля свойства "transform".
CAShapeLayer
CGPath
, добавьте его в слой{{0,0},{0,0}}
layer.frame = CGPathGetBoundingBox( layer.path )
layer.transform = CGAffineTransformMakeTranslation( CGPathGetBoundingBox( layer.path ).origin.x * -1, // то же самое для y-coord: установите его в "-1 * начало пути
Это работает, но ... многие сторонние программы предполагают, что начальное преобразование для CALayer
является Identity.
Это не должно быть так сложно! Наверняка есть что-то, что я делаю неправильно?
(Я получил одно предложение: "каждый раз, когда вы добавляете путь, вручную запускайте пользовательскую функцию для сдвига всех точек на -1 * (top-left-point.x, top-left-point.y)
". Опять же, это работает - но это до смешного сложно)