Мне нужно запустить сложную пользовательскую анимацию в приложении iOS. Для этого я написал функцию, которую нужно вызывать повторно, и использует текущую метку времени для вычисления позиций, цветов, теней и т. Д. Элементов UIView на экране.Предпочтительный способ запуска пользовательских анимаций
Там, кажется, целая куча различных подходов я мог бы использовать, чтобы эта функция называется:
- Multi-Threading
- Timers
- Dispatch Queues
- Бог знает, что еще ... :)
Я пробовал называть свою анимационную функцию из отдельного сначала, но пока поток выполняется, я не вижу никаких обновлений экрана, пока я не запускаю обновление вручную с помощью поворота устройства, поэтому я должен упустить некоторый шаг, на котором я вызываю функции обновления изнутри потока графического интерфейса пользователя вместо моего собственный или недействительный вид или что-то в этом роде ... Но я даже не знаю, является ли это наилучшим подходом ...
Как выбрать способ функции (например, для анимации) (или с небольшой задержкой в 10 мс или около того) без блокировки графического интерфейса и таким образом, что если эта функция, например, изменяет цвет фона или позицию представления, экран обновляется?
Если возможно, я хотел бы использовать метод, который также обратную совместимость, насколько это возможно, поэтому желательно что-то, что не использует какие-либо функции, представленные в прошивкой 8.1 (преувеличение) ... :)
Кроме того:
Извините, что не отправлял код. Я использую RoboVM и не хочу «отпугивать» любые ответы от настоящих разработчиков XCode. Кроме того, это скорее общий концептуальный вопрос, чем конкретный исправление ошибок.
Это похоже на интересный подход. В документах говорится, что метод displayLinkTick, который вы определили выше, будет вызван «когда экран будет обновлен». Означает ли это, что мне также необходимо сохранить недействительность экрана? Или это происходит автоматически? Кроме того, могу ли я затем просто установить свойства, такие как положение и цвет фона и т. Д. На UIViews из метода displayLinkTick? Или мне нужно вызвать какой-то другой метод, чтобы фактически вызвать перерисовку экрана? –
Ваш экран displayLinkTick будет вызываться, когда ОС обновит экран; он не связан с вашей иерархией представлений или недействительными битами экрана. Вы сможете установить любые свойства, которые вы хотите в рамках этой функции, хотя вы должны быть осторожны, чтобы не выполнять длительные процессы. –
Gotcha. Я попробую! :) –