iOS 今日小组件扩展 - 动画 UISlider

4

我正在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的值?


滑块没有设置值动画方法吗?你试过了吗? - Carl Veazey
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Shial
1个回答

3

好的,我解决了它。

我回答自己的问题,因为也许它会对某人有帮助,并且这就是我所寻找的解决方案。

Todays Extension内部只有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的值从起始值到结束值进行了动画处理。所有自定义图形,如min、max和thumb都正确地渲染出来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接