2017-01-03 5 views
0

У меня есть анимации, которые (очень очень немного) были выбиты из синхронизации (поздно) из-за работы, выполняемой непосредственно перед ними.Решение темы, например (animateWithDuration) завершение:^

Я исправил эту проблему, поместив анимацию [Часть 3.] в завершение:^метод манекена 'animateWithDuration' метод (продолжительность: 0).

Он работает совершенно так:

[method] 


    [Part 1. create series of UIImages (using CGContext) and UIImageViews /] 


    [Part 2. UNNECESSARY animateWithDuration] 

      completion:^(BOOL finished) { 

       [Part 3. Record NSDate /] 
       [Part 3. Run animations based on NSDate start time /] 

      } 

    [/Part 2.] 


[/method] 

Что я должен использовать вместо этого ненужного «animateWithDuration? Есть ли что-то столь же простое, но правильное?

(я не хочу использовать блок для резьбы [Часть 1.], которая требует от меня использовать __block указатели. Я хочу, чтобы решение, как просто, как один из приведенных выше, если это возможно.)

+0

Возможно, просто создайте функцию, которая запускает этот код внутри фиктивной анимации с длительностью в блоке. – NorthBlast

+1

запись простой код! = Записывание правильный код. Вы нашли обходной путь для своей проблемы, и он работает, но вы всегда должны выбирать лучшую практику для него, даже если для этого требуется больше усилий и времени. Я знаю, что вы попросили аналогичный ответ, но вы должны иметь в виду, что решение с правильной резьбой - это ваш ответ, а не тот. – erenkabakci

+0

Не совсем понятно, что вы пытаетесь синхронизировать здесь или что вы подразумеваете под «запускать анимации», но «NSDate», вероятно, является неправильным инструментом (и потоки, безусловно, являются неправильным инструментом, хотя здесь неясно, что вы подразумеваете под "нить"). Если вы пытаетесь отобразить изображения, синхронизированные с настенными часами (например, для синхронизации с аудио), вам нужна одна из систем реального времени, таких как AVPlayer или CADisplayLink. Может помочь объяснить, какую проблему вы пытаетесь решить. Вам может понадобиться только анимационная транзакция. –

ответ

0

У меня есть решил использовать

dispatch_group_t 
and 
dispatch_queue_t 

Я надеялся, что может быть что-то более простое и быстрое, но, по крайней мере, это сработает. Спасибо за ваши комментарии и предложения.

Смежные вопросы