2010-12-14 4 views
12

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

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

ответ

19

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

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

Другие ключи могут быть найдены в Apples Core Animation Programming Guide

+0

Это работало отлично! Должен быть утвержденный ответ. – Collin

+0

очень полезно :) Tks много! – TonyMkenu

+0

Забавный, всегда возвращает nil [[self presentationLayer] valueForKey: @ "transform.scale"] – Andy

8

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

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

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

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

Смежные вопросы