Недавно я столкнулся с той же проблемой.Это то, что я узнал:
Есть хитрость, которую вы можете сделать, это анимация теневой копии границ, например:
var shadowBounds: CGRect {
get { return bounds }
set { bounds = newValue}
}
, затем переопределение CALayer's + needsDisplayForKey:.
Однако это НЕ МОЖЕТ быть тем, что вы хотите сделать, если ваш рисунок зависит от границ.Как вы уже заметили, базовая анимация просто масштабирует содержимое слоя до границ анимации.Это верно, даже если вы выполните вышеуказанный трюк, то есть содержимое масштабируется, даже если границы изменились во время анимации.В результате ваша анимация рисунков выглядит противоречиво.
Как ее решить?Поскольку содержимое масштабируется, вы можете вычислить значения пользовательских переменных, определяющих ваш чертеж, путем их обратного масштабирования так, чтобы ваш рисунок в конечном, но масштабированном содержимом выглядел так же, как исходный и немасштабированный, затем установить для этих значений значения fromValues,toValues к их старым значениям, анимировать их одновременно с границами.Если конечные значения должны быть изменены, установите значения toValues в эти конечные значения.Вы должны анимировать хотя бы одну пользовательскую переменную, чтобы вызвать перерисовку.