2015-09-30 2 views
3

Я создаю сегодняшнее расширение в iOS. То, что я пытаюсь сделать, - это изменить значение изменения в UISlider, добавленное в сегодняшнее расширение. Анимация должна начинаться с начального значения до конечного значения.iOS Сегодняшнее расширение виджета - анимация UISlider

Я пытался сделать это двумя способами: Первый UIView анимации

func updateSliderView(beginState:Float, duration: NSTimeInterval) { 
    sliderView.hidden = false 
    sliderView.setValue(beginState, animated: false) 
    UIView.animateWithDuration(duration) {() -> Void in 
     self.sliderView.setValue(1, animated: true) 
    } 
} 

Второй с базовой анимации.

func updateSliderView(beginState:Float, duration: NSTimeInterval) { 
    sliderView.hidden = false 
    guard let _ = sliderView.layer.animationForKey("slider.animation.value") else { 
     let animation = CABasicAnimation(keyPath: "value") 
     animation.fromValue = beginState 
     animation.toValue = 1 
     animation.removedOnCompletion = true 
     sliderView.layer.addAnimation(animation, forKey: "slider.animation.value") 
     return 
    } 
} 

Я делаю это с новым XCode 7.0.1 с целью IOS 8,1 В обоих результате заканчивается без анимации. У UISlider отключено взаимодействие с пользователем. Я использую UISluder, потому что у меня есть пользовательская графика для ползунка min & max track и для большого слайдера.

я сделал третье испытание

sliderView.setValue(beginState, animated: false) 
CATransaction.begin() 
CATransaction.setAnimationDuration(duration) 
sliderView.setValue(1, animated: true) 
CATransaction.commit() 

это не будет работать:/

Резюме: Только UIView.animation работает. Это анимация, но она нарушает мою таможенную графику для UISlider, и она не устанавливает начальное значение для слайдера.

Как я могу изменить изменение значения UISlider в текущем расширении?

+0

Не слайдер имеет анимированный метод с установленным значением? Вы попробовали это? –

+0

Я использовал метод corect с анимацией Как вы можете видеть в примере 1-го кода, анимированный: true, он не будет анимировать его :(Вот почему я здесь – Shial

ответ

2

Хорошо, я решил это. Я отвечаю на собственный вопрос, потому что, возможно, это поможет кому-то, и это решение, о котором я просил.

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

UIView.animateWithDuration(0.2, delay: 0, options: .CurveLinear, animations: {() -> Void in 
     self.sliderView.setValue(beginState, animated: true) 
     }) { (completed) -> Void in 
      UIView.animateWithDuration(duration, delay: 0.1, options: .CurveLinear, animations: {() -> Void in 
       self.sliderView.setValue(1, animated: true) 
       }, completion: nil) 
    } 

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

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