Опрос уровня представления UISlider - PullRequest
1 голос
/ 04 ноября 2010

Я настраиваю простой 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 на экране, но не значение самого ползунка.

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

есть идеи?

1 Ответ

0 голосов
/ 17 ноября 2010

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

способ, которым я обошел это, - использование класса NSTimer.Как только я хочу, чтобы индикатор выполнения начал анимацию, я устанавливаю NSTimer с интервалом 0,1 с и вызываю функцию для обновления местоположения большого пальца.анимация до / после большого пальца (по мере продвижения левая часть синего цвета, а то, что осталось, все еще белого цвета) автоматически обрабатывается для вас.

вот код:

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];

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

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

...