iOS Todays Widget扩展 - Animate UISlider

时间:2015-09-30 07:47:30

标签: ios swift uislider ios8-today-widget

我正在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
    }
}

我正在使用带有iOS目标8.1的新XCode 7.0.1 两个结果都没有动画。 UISlider禁用了用户交互。 我正在使用UISluder,因为我有滑块路径min&的定制图形。最大轨道和滑块拇指。

我做了第三次测试

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

它无法工作:/

总结:只有UIView.animation有效。这是动画,但它打破了UISlider的海关图形,并没有设置滑块的起始值。

如何在Todays扩展中为UISlider值更改设置动画?

1 个答案:

答案 0 :(得分:2)

好的我解决了。 我回答我自己的问题,因为它可能对某人有所帮助,这是我要求的解决方案。

只有UIView.animation在今日扩展中为UISlider设置动画。但是在动画之前设置起始值不起作用并且动画在滑块上打破了自定义图形。 当你在UIView.animation中设置起始值时,我想出来了,everthing将按照我想要的方式工作。

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)都正确呈现。