Использование основной анимации для анимации в OpenGL - PullRequest
8 голосов
/ 06 марта 2010

Я заинтересован в использовании Core Animation для запуска пользовательских анимаций в моей сцене OpenGL на iPhone. Я надеялся найти механизм, который позволял бы вам в общем случае анимировать путь к ключу NSObject или метод делегата для каждого тика анимации. Я придумал, чтобы анимировать произвольное свойство CALayer и опрашивать их из OpenGL, чтобы определить ход анимации. Тем не менее, я убежден, что есть лучший способ сделать это. Какой самый чистый и безопасный способ использовать этот замечательный анимационный движок?

Ответы [ 4 ]

3 голосов
/ 07 июля 2010

Я подозреваю, что вам действительно нужны только функции замедления, используемые основной анимацией. Их достаточно легко найти, немного погуглив. Вот один пример:

GLfloat bounceEaseOut(GLfloat ratio) {
    if (ratio < 1.0f/2.75f) {
        return 7.5625f*ratio*ratio;
    } else if (ratio < 2.0f/2.75f) {
        return 7.5625f*(ratio-=1.5f/2.75f)*ratio+0.75f;
    } else if (ratio < 2.5f/2.75f) {
        return 7.5625f*(ratio-=2.25f/2.75f)*ratio+0.9375f;
    } else {
        return 7.5625f*(ratio-=2.625f/2.75f)*ratio+0.984375f;
    }
}

Вы указываете, насколько далеко вы находитесь в вашей анимации (elapsedTime / tweenDuration), и она сообщает вам, каким процентом пути через «временную шкалу» анимации вы должны быть.

1 голос
/ 12 июля 2012

Я пытался сделать что-то подобное, обновить вид gl на основе его положения в родительском элементе во время CA-анимации. Я получал схожие результаты, прерывистая анимация, которая не синхронизировалась с CA-анимацией. Я наконец решил прекратить использовать CA и использовать другой механизм интерполяции полностью. Сейчас я использую PRTween . Это работает очень хорошо. Я уверен, что есть некоторые недостатки (ваша анимация работает в основном потоке, интерфейс не такой хороший, как CA, и он немного глючит), но моя анимация работает плавно

0 голосов
/ 28 июня 2010

Это возможно, использовать Core Animation, чтобы управлять всем, что вы пожелаете. Я уверен, что это может быть использовано и для звука! (С учетом небольшого подкласса CALayer). UIKit и Core Animation можно смешивать довольно свободно, с небольшой осторожностью, так как для нас также есть CAEAGLLayer.

Ключ здесь - (id) presentationLayer и - (id) modelLayer для использования чистого / только OpenGL; конечно, даже иерархия может быть использована и для вашей сцены OpenGL. Но использование CALayer для рендеринга становится еще более «бесплатным», если это возможно в ваших обстоятельствах (но также смотрите CATransformLayer), если это то, что вы ищете! =)

0 голосов
/ 06 марта 2010

Если вы хотите анимировать вид, попробуйте прочитать Лучшая практика анимации iPhone UIView . Для анимации в представлении OpenGL лучше использовать анимированные модели или пользовательский код, но не Core Animation.

...