我正在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已禁用用户交互。我正在使用UISlider,因为我有自定义图形用于滑块路径最小和最大轨道以及滑块拇指。
我进行了第三次测试。
sliderView.setValue(beginState, animated: false)
CATransaction.begin()
CATransaction.setAnimationDuration(duration)
sliderView.setValue(1, animated: true)
CATransaction.commit()
无法正常工作 :/
概述:只有UIView.animation可以工作。它正在进行动画,但它破坏了我的自定义 UISlider 图形,并且没有设置滑块的起始值。
我该如何在今天的扩展中动画显示UISlider的值?