2010-11-04 3 views
1

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

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

любые идеи?

ответ

0

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

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

вот код:

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

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

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

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