iOS Todays 小部件扩展 - 动画 UISlider

标签 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
    }
}

我正在使用新的 XCode 7.0.1 和 iOS 目标 8.1 两个结果都没有动画。 UISlider 禁用了用户交互。 我正在使用 UISluder,因为我有用于 slider 路径最小和最大轨道以及 slider 拇指的自定义图形。

我做了第三次测试

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

它不会工作:/

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

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

最佳答案

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

Todays Extension 中只有 UIView.animation 为 UISlider 设置动画。但是设置起始值在动画之前不起作用,并且动画破坏了 slider 上的自定义图形。 当您在 UIView.animation block 中设置起始值时,我发现它会按我想要的方式工作。

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 动画 block 。结果和我之前预想的一样。 起始值已设置。 UISlider 值从起始值动画到结束。所有自定义图形(如最小值、最大值和拇指)均已正确呈现。

关于iOS Todays 小部件扩展 - 动画 UISlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860643/

相关文章:

即使从 XCode 项目中删除了所有框架,iOS 应用程序也会构建

ios - Swift Codable - 如何编码自定义数组

ios - 具有 getter/setter 的 Realm 对象属性总是返回第一个存储值

ios - UISlider 上的 UIImage 被拉伸(stretch)

ios - 完成处理程序如何在 iOS 上工作?

ios - 添加一个 CALayer 作为 UIView 居中的子层

ios - 如何更改 UItableviewcell accessoryType 的背景颜色?

ios - 如何删除 UISlider 控件左侧的蓝色阴影?

swift - 以编程方式添加约束会破坏自动布局约束

ios - 在不使用 MFMailCompose UI 的情况下从 iOS 应用程序发送电子邮件