iOS Todays 小部件扩展 - 动画 UISlider

Posted

技术标签:

【中文标题】iOS Todays 小部件扩展 - 动画 UISlider【英文标题】:iOS Todays Widget Extension - Animate UISlider 【发布时间】:2015-09-30 07:47:29 【问题描述】:

我正在 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,因为我有自定义图形用于滑块路径最小和最大轨道以及滑块拇指。

我做了第三次测试

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

它不会工作:/

总结:只有 UIView.animation 有效。它是动画,但它打破了我对 UISlider 的自定义图形,它没有设置滑块的起始值。

如何在 Todays 扩展中为 UISlider 值变化设置动画?

【问题讨论】:

滑块没有设置值动画方法吗?你试过了吗? 我确实对动画使用了 corect 方法正如您在第一个代码示例中看到的,动画:true,它不会为它设置动画:( 这就是我在这里的原因 【参考方案1】:

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

只有 UIView.animation 在 Todays Extension 中为 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 值从起始值动画到结束。所有自定义图形(例如最小值、最大值和拇指)均已正确渲染。

【讨论】:

以上是关于iOS Todays 小部件扩展 - 动画 UISlider的主要内容,如果未能解决你的问题,请参考以下文章

iOS 14 小部件中的动画

JavaFX Glitches 动画非标准小部件

如何消除 ios8 Todays Extension 中的领先差距

如何为可扩展的 Flutter 小部件设置动画以将其滑出屏幕

iOS将按钮添加到小部件扩展

iOS Today 扩展/小部件——位置权限?