Вопрос

Я настраиваю простой 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 секунды называется этот метод, и он перерисовывает большой палец, создавая анимацию. Нет необходимости в анимационном блоке.

Это хорошо работает, и я доволен результатами. Я обеспокоен производительностью и буду измерить, как интенсивный ресурс этой реализации. Это может быть, хорошая идея, чтобы пойти с первым вариантом, который я упомянул выше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top