CATransform3D против CGAffineTransform?

В чем разница между ними?

Я уверен, что у них есть плюсы и минусы, а также ситуации, в которых они лучше справляются.

Какие ресурсы сравнивают эти два?

Что лучше для анимации (я представляю CATransform3D)? Почему?

Также я думаю, что где-то читал, что четкость текста может быть проблемой, лучше ли масштабировать текст?


person Corey Floyd    schedule 20.02.2009    source источник


Ответы (2)


Как сказано в сообщении MSN, они используются в разных случаях. CGAffineTransform используется для двумерного манипулирования NSView, UIViews и другими двумерными элементами базовой графики.

CATransform3D - это структура Core Animation, которая может выполнять более сложные трехмерные манипуляции с CALayers. CATransform3D имеет ту же внутреннюю структуру, что и матрица представления модели OpenGL, что имеет смысл, когда вы понимаете, что Core Animation построена на OpenGL (CALayers - это оболочки для текстур OpenGL и т. Д.). Я обнаружил, что это сходство внутренней структуры в сочетании с некоторыми полезными вспомогательными функциями, которые предоставляет Apple, может позволить вам провести некоторую аккуратную оптимизацию OpenGL, как я публикую здесь.

Когда дело доходит до выбора, что использовать, спросите себя, собираетесь ли вы работать с представлениями непосредственно в двухмерном пространстве (CGAffineTransform) или с нижележащими слоями базовой анимации в трехмерном пространстве (CATransform3D). Я чаще использую CATransform3D, но это потому, что я провожу много времени с Core Animation.

person Brad Larson    schedule 20.02.2009

Один предназначен для линейных 2-мерных преобразований, другой - для трехмерных проецируемых преобразований. По крайней мере, это то, что я смог почерпнуть из документации.

Если вам не нужно визуализировать 3D-изображение, проецируемое на экран, используйте аффинное преобразование. В противном случае используйте трехмерное преобразование. Преобразование 3d - это, по сути, матрица 4x4, а аффинная 2d - матрица 3x2.

person MSN    schedule 20.02.2009
comment
2D Affine обычно имеет размер 3 в ширину и 2 в высоту (с невидимой подразумеваемой идентичностью в нижнем ряду). - person plinth; 20.02.2009
comment
У меня была проблема с мерцанием / уменьшенной частотой кадров, и это исправило! - person Will Larche; 14.01.2016