Получение «масштаба» из CATransform3D - PullRequest
12 голосов
/ 15 декабря 2010

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

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

Ответы [ 2 ]

19 голосов
/ 22 августа 2011

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

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

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

8 голосов
/ 15 декабря 2010

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

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

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

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

...