Запрос слоя презентации uislider
-
29-09-2019 - |
Вопрос
Я настраиваю простой UISlider, чтобы оживить его прогресс:
[UIView animateWithDuration:songLength
delay:0.0
options:UIViewAnimationOptionRepeat|
UIViewAnimationOptionAllowUserInteraction|
UIViewAnimationOptionBeginFromCurrentState
animations:^{
[UIView setAnimationDuration:10.0];
[myUISlider setValue:10.0];
} completion:nil
];
[UIView commitAnimations];
Когда пользователь нажимает кнопку, я хочу остановить анимацию на этом месте.
Я понимаю, что мне нужно запросить уровень презентации, чтобы выяснить значение, однако уровень презентации имеет тип Calayer, а не Uislider. Следовательно, он обладает свойствами слоя, как и на экране x/y, но не значение самого ползунка.
Имеет смысл, что по дизайну слой презентации может получить доступ ко всем текущим анимированным данным слоя, но я не уверен, как разрабатывать это в коде.
Любые идеи?
Решение
Я выяснил один способ разрешить этот вопрос, если вы имеете дело с той же проблемой. По дизайну нет очевидного способа запросить анимированный большой палец UISLIDER. Анимация Querying работает хорошо для слоя, поэтому один из способов - создать свой собственный фон и анимированный слой, который является большим пальцем.
То, как я работал вокруг этого, - это использование класса NSTIMER. Как только я хочу, чтобы панель прогресса начал анимировать, я установил NSTIMER для интервала 0,1S и вызову функцию, чтобы обновить местоположение большого пальца. Анимация до/после большого пальца (по мере того, как она прогрессирует, левая часть синяя, а то, что осталось, все еще белого), о вас позаботится автоматически.
Вот код:
updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];
Таким образом, каждый .01 секунды называется этот метод, и он перерисовывает большой палец, создавая анимацию. Нет необходимости в анимационном блоке.
Это хорошо работает, и я доволен результатами. Я обеспокоен производительностью и буду измерить, как интенсивный ресурс этой реализации. Это может быть, хорошая идея, чтобы пойти с первым вариантом, который я упомянул выше.