我有一个自定义 UIView,它使用 Core Graphics 调用来绘制其内容。一切正常,但现在我想要动画影响显示的值的变化。我有一个自定义属性可以在我的自定义 UView 中实现此目的:
var _anime: CGFloat = 0
var anime: CGFloat {
set {
_anime = newValue
for(gauge) in gauges {
gauge.animate(newValue)
}
setNeedsDisplay()
}
get {
return _anime
}
}
我已经从 ViewController 开始了一个动画:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.emaxView.anime = 0.5
UIView.animate(withDuration: 4) {
DDLogDebug("in animations")
self.emaxView.anime = 1.0
}
}
这不起作用 - 动画值确实从 0.5 更改为 1.0,但它是立即更改的。对动画设置器有两次调用,一次调用值为 0.5,然后立即调用一次值为 1.0。如果我更改属性,我会将动画设置为标准 UIView 属性,例如阿尔法,它工作正常。
我有 Android 背景,所以整个 iOS 动画框架对我来说看起来就像黑魔法。除了预定义的 UIView 属性之外,还有其他方法可以对属性进行动画处理吗?
下面是动画视图应该看起来的样子 - 它大约每 1/2 秒获得一个新值,我希望指针在这段时间内从前一个值平滑地移动到下一个值。更新它的代码是:
open func animate(_ progress: CGFloat) {
//DDLogDebug("in animate: progress \(progress)")
if(dataValid) {
currentValue = targetValue * progress + initialValue * (1 - progress)
}
}
并打电话draw()
更新后将使其使用新的指针位置重新绘制,并在之间进行插值initialValue
and targetValue