Применение одинаковой перспективы и поворота ко всем элементам CALayer (в отличие от Coverflow) - PullRequest
4 голосов
/ 14 февраля 2011

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

Вот скриншот того, как это на самом деле выглядит и как я хочу, чтобы оно выглядело:

what it looks like and what it is supposed to look like

Я использовал CALayers и применил два основных преобразования:

1) Чтобы повернуть:

CATransform3DMakeRotation(DegreesToRadians(60), 0, 1, 0);

2) Чтобы добавить перспективу:

CATransform3D perspective = CATransform3DIdentity;
perspective.m34 = -1.0/400;
self.layer.sublayerTransform = perspective;

Как я могу применить одно и то же преобразование ко всем слоям, чтобы они все выглядели одинаково?Является ли Core Animation подходящим инструментом для работы?

Спасибо, Марк.

1 Ответ

6 голосов
/ 15 февраля 2011

Попробуйте включить перспективное преобразование в отдельные элементы transform, а не в родительский слой sublayerTransform:

CATransform3D perspective = CATransform3DIdentity;
perspective.m34 = -1.0/400;
CATransform3D transform = CATransform3DRotate(perspective, DegreesToRadians(60), 0, 1, 0);
element.layer.transform = transform;
...