Как мне сделать несколько анимаций на iPhone? - PullRequest
1 голос
/ 31 марта 2009

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

Мне интересно, как лучше всего анимировать сразу несколько предметов. (Обратите внимание, что я рендеринг в 2d, поэтому я не заинтересован в 3D решениях.)

Спасибо!

Ответы [ 2 ]

8 голосов
/ 31 марта 2009

Относительно легко анимировать сразу несколько двумерных объектов. Есть два способа сделать это: анимировать UIViews или анимировать CALayers. Во время тестирования я обнаружил, что при анимации этих двух приложений разница в производительности невелика (оба поддерживают около 50 объектов, движущихся одновременно на скорости 60 кадров в секунду на iPhone).

Чтобы скоординировать анимацию серии UIViews, вы хотите обернуть любые изменения геометрии вида в блок анимации начала / фиксации:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS];

view1.frame = CGRectMake(newX1, newY1, view1Width, view1Height); 
view2.frame = CGRectMake(newX2, newY2, view2Width, view2Height); 
// Add other views here

[UIView commitAnimations];

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

Для большего контроля над анимацией или для создания кроссплатформенного кода пользовательского интерфейса Mac / iPhone вы можете использовать Core Animation CALayers. CALayers анимируют по умолчанию, поэтому, установив

layer.position = CGPointMake(newX, newY);

ваш слой будет автоматически анимирован на новую позицию. Обратите внимание, что по умолчанию положение слоя относительно его центра, вы можете изменить его на нормальную исходную позицию, установив для свойства anchorPoint значение 0,0.

Вы можете координировать анимацию слоя, используя CATransaction:

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:ANIMATIONDURATIONINSECONDS] forKey:kCATransactionAnimationDuration];      
layer1.position = CGPointMake(newX1, newY1);
layer2.position = CGPointMake(newX2, newY2);
[CATransaction commit];

Для более сложных анимаций вы можете создавать CABasicAnimations и CAKeyframeAnimations и применять их к своим слоям, чтобы перемещать их по сложным путям с определенным временем и ускорением / замедлением.

0 голосов
/ 31 марта 2009

Вы смотрели проект Cocos2D-iphone?

Я нахожу его очень простым в использовании и отнимает много работы у вас.

Cocos2D iPhone

Он также делает много анимации, и вы можете создавать последовательности анимаций, которые вы можете связать вместе.

...