Базовая анимация drawLayer: inContext, управляемый NSTimer, я правильно делаю? - PullRequest
1 голос
/ 19 августа 2011

Я делаю проект, который включает в себя Core Animation и AV Foundation.Я хочу использовать Core Animation для визуализации некоторых эффектов, а затем экспортировать их в видеофайл через AV Foundation.Анимационный эффект, которого я хочу добиться, - это воспроизведение конечного пользователя, подписывающего свою подпись на iPad.

Чего я достиг на данный момент: - Ссылаясь на пример GLPainter от Apple, яЯ могу записать штрихи подписи пользователя, каждый отдельный штрих состоит из нескольких точек касания (CGPoint), которые были записаны в методе touchBegin / touchMoved / touchEnd моего пользовательского UIView.- Управляемый повторяющимся NSTimer, я могу перерисовать его на своем пользовательском UIView.В основном это повторяющийся процесс рисования линии из одной точки в другую.

Что я пытаюсь сделать: реализовать перерисовку подписи с помощью технологии Core Animation, а затем,встроил основной анимационный код с помощью композиционного кода Av Foundation для визуализации окончательного результата.

Что меня сейчас интересует:

  • Ничего не зная о Core Animation, я 'мы изучали это в последние несколько дней.Тем не менее, учебники / книги, которые я только что прочитал, рассказывают мне, как создавать неявную анимацию, изменяя свойства CALayer или создавая CAKeyframeAnimation.Но моя анимация - это что-то вроде постепенного рисования чего-либо на холсте слоя, а не перемещения чего-либо.Итак, как это сделать в Core Animation?

Что я делаю сейчас: очень похоже на то, что я делал с Quartz2D, я использую NSTimer для многократной установки моегоОбъект CALayer needsDisplay, который, в свою очередь, вызывает реализацию своего делегата метода drawLayer: inContext, где я пишу практически тот же код, что и в drawRect из UIView.

Ну, я сделал анимацию , без участия CAAnimation.Я просто чувствую себя странно, чувствую, что делаю это неправильно.Я не приступил к объединению Core Animation с частью AV Foundation, но я сомневаюсь, что моя чертовщина не пройдет.

Я честно искал в SO, клянусь, но не нашел ничего связанного.Я должен сказать, что мой опыт работы с Quartz2D и Core Animation довольно ограничен, поэтому очень признателен, если кто-то может дать мне несколько советов, спасибо!

1 Ответ

4 голосов
/ 24 августа 2011

То, что вы хотите сделать, это синхронизировать ваш рисунок с частотой обновления экрана.A NSTimer не особенно хорош в этом.Класс, который вы ищете, это CADisplayLink.Получите доступ к нему следующим образом:

link = [[UIScreen mainScreen] 
             displayLinkWithTarget:self
                          selector:@selector(shouldUpdateDisplayLink:)];

Заданные потребности отображаются в обратном вызове shouldUpdateDisplayLink:.Сохраните ссылку на дисплей, чтобы обеспечить ее постоянство, и при необходимости установите более низкую частоту обновления, возможно, в соответствии с воспроизведением мультимедиа.

...