Как установить центр вращения анимации CATransformLayer

У меня есть представление с его нижележащим слоем, и я добавляю CATransformLayer к слою представления:

[view.layer addSublayer: transformLayer];

Мой добавленный слой содержит все виды подслоев, представляющих отдельные стороны нескольких трехмерных блоков. Я хотел бы применить анимацию к слою, чтобы вращать блоки.

CATransform3D rotation = CATransform3DMakeRotation(deg * M_PI / 180, x, y, z);
[CATransaction begin];

    [(CATransformLayer *)[pView.layer.sublayers objectAtIndex:0] setSublayerTransform:rotation];
        or (both seem to produce the same result)
    [(CATransformLayer *)[pView.layer.sublayers objectAtIndex:0] setTransform:rotation];

[CATransaction commit];

Проблема в том, что слой вращается примерно вокруг переднего угла вместо центра кубов (см., Например, ниже).

                    / \                  / \        
   / \            / \ / \              / \ / \      
 / \ / \         |\ / \ /|            |\ / \ /|     
|\ / \ /|        | |\ /| |            | |\ /| |     
| |\ /| |         \| | |/ \    OR    / \| | |/      
|\| | |/|  ==>      \|/ \ / \      / \ / \|/        
|1|\|/|B|            |\ / \ /|    |\ /   /|         
 \|2|A|/             |A|\ /| |    | |\ /|2|         
   \|/                \|B| |/      \| |1|/          
                        \|/          \|/            

Метки A/B должны переместиться в положения 1/2, или 1/2 должны переместиться в положение A/B, в зависимости от направления вращения. Вместо этого он изменяется от первой фигуры, вращается примерно вокруг переднего угла, что приводит к чему-то близкому к другим фигурам. Верхние немеченые блоки находятся в другом виде и статичны, поэтому не являются частью вращения. Нижние помеченные блоки находятся в виде / слое, который я пытаюсь анимировать.

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

Я перепутал с anchorPoint, zPosition, anchorPointZ для различных слоев без успеха. Пробовал setSublayerTransform, setTransform, а также.

Должен ли я возиться с настройками для подслоев на стороне блока, слоя трансформации, слоя вида или самого вида, чтобы добиться того, что мне нужно?

Любое руководство или направление будет оценено.

1 ответ

Решение

ОБНОВИТЬ:

Я наконец пришел к осознанию и принял тот факт, что я не могу сделать это с помощью Core Animation.

Я пошел по пути использования OpenGL для решения этой проблемы.


Эта проблема постепенно развивалась по мере того, как я постепенно вносил улучшения, но конечный результат заключается в том, чтобы сделать родительский слой CATransformLayer, который сохраняет трехмерную перспективу, и вращать ее.

Что касается центра вращения, я использую CATransform3DMakeTranslation, чтобы изменить положение слоя.

Другие вопросы по тегам