2012-06-06 2 views
1

У меня есть вида с ним Базовым слоем, и я добавить 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.

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

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

+0

Никто больше не прокомментировал это больше года, но я наткнулся на это и подумал, что это может помочь кому-то, кто пытается решить подобную проблему: http: // tumbljack.com/post/176535888/3d-objects-in-object-c-with-catransformlayer – InkGolem

ответ

0

UPDATE:

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

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


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

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

+0

Хотя преобразование CATransform3DMakeTranslation позволяет мне поворачивать слой в некотором смысле, это неверно и по-прежнему не вращается вокруг центра куба , Все еще не знаю, как заставить это работать. – GRW