Расширение виджетов для iOS сегодня - Animate 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, потому что у меня есть настраиваемая графика для минимальной и максимальной дорожки ползунка и для бегунка ползунка.

Я сделал третий тест

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

это не сработает: /

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

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


person Shial    schedule 30.09.2015    source источник
comment
У слайдера нет метода анимации заданного значения? Вы пробовали это?   -  person Carl Veazey    schedule 30.09.2015
comment
Я использовал метод corect с анимацией. Как вы можете видеть в 1-м примере кода, animated: true, он не будет его анимировать :( вот почему я здесь   -  person Shial    schedule 30.09.2015


Ответы (1)


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

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

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 было анимировано от начального значения до конца. Вся настраиваемая графика, такая как min, max и thumb, была отрисована правильно.

person Shial    schedule 30.09.2015