Получение "шкалы" из CATransform3D

Я создаю приложение для iPad и хочу обновить пользователя с текущим размером представления. Раньше я делал это, вычисляя масштаб CGAffineTransform и умножая xScale на ширину (соответствующего вида) и yScale на высоту. Я хотел бы продолжать делать это, но я больше не делаю преобразования 2d, и я уверен, какое уравнение использовать для извлечения информации о масштабах из CATransform3D.

Вы можете помочь?

2 ответа

Чтобы получить текущий масштаб слоя, вы просто выполните valueForKeyPath: на слое:

CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue];

Другие ключи можно найти в Руководство по программированию анимации ядра Apple


Я не знаком с API, но CATransform3D выглядит как обычная матрица преобразования 4x4 для выполнения 3D-преобразований.

Предполагая, что он представляет собой не что иное, как комбинацию масштабирования, вращения и трансляции, масштабные коэффициенты могут быть извлечены путем вычисления величин строк или столбцов верхнего левого 3x3 в зависимости от того, является ли CATransform3D строкой или столбцом майор соответственно.

Например, если он является строковым, масштаб в направлении x является квадратным корнем из (m11 * m11) + (m12 * m12) + (m13 * m13). Шкалы y и z также были бы величинами второго и третьего рядов.

Из документации для CATransform3DMakeTranslation видно, что CATransform3D действительно имеет большой ряд строк.

licensed under cc by-sa 3.0 with attribution.