Получение "шкалы" из CATransform3D
Я создаю приложение для iPad и хочу обновить пользователя с текущим размером представления. Раньше я делал это, вычисляя масштаб CGAffineTransform и умножая xScale на ширину (соответствующего вида) и yScale на высоту. Я хотел бы продолжать делать это, но я больше не делаю преобразования 2d, и я уверен, какое уравнение использовать для извлечения информации о масштабах из CATransform3D.
Вы можете помочь?
Ответы
Ответ 1
Чтобы получить текущий масштаб слоя, вы просто выполните valueForKeyPath:
на слое:
CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue];
Другие ключи можно найти в Руководство по программированию анимации ядра Apple
Ответ 2
Я не знаком с API, но CATransform3D
выглядит как обычная матрица преобразования 4x4 для выполнения 3D-преобразований.
Предполагая, что он представляет собой не что иное, как комбинацию масштабирования, вращения и трансляции, масштабные коэффициенты могут быть извлечены путем вычисления величин строк или столбцов верхнего левого 3x3 в зависимости от того, является ли CATransform3D
строкой или столбцом майор соответственно.
Например, если он является строковым, масштаб в направлении x является квадратным корнем из (m11 * m11) + (m12 * m12) + (m13 * m13). Шкалы y и z также были бы величинами второго и третьего рядов.
Из документации для CATransform3DMakeTranslation
видно, что CATransform3D
действительно имеет большой ряд строк.