【发布时间】:2015-11-14 17:21:05
【问题描述】:
我有一个模拟“脉冲”视图的动画,它首先将其转换为无限小(不可见),然后它又长回来了。
func addPulsing() {
println("Added")
let pulsing = CAKeyframeAnimation(keyPath: "transform.scale")
pulsing.duration = 0.8
pulsing.values = [1.0,0.0,1.0]
pulsing.keyTimes = [0.0,0.4,0.8]
pulsing.removedOnCompletion = false
pulsing.repeatCount = HUGE
pulsing.calculationMode = kCAAnimationPaced
let layer = customView.layer
layer.addAnimation(pulsing, forKey: "pulsing")
}
我想在每次动画重复时更改视图的颜色。我该怎么做 ?我尝试使用计时器,但它与动画不同步。
更新:
试图做这样的事情:
UIView.animateKeyframesWithDuration(3.2, delay: 0, options: .CalculationModePaced | .Repeat, animations: { () -> Void in
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = transform
})
UIView.addKeyframeWithRelativeStartTime(0.4, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = identity
self.customView.backgroundColor = self.colors[1]
})
UIView.addKeyframeWithRelativeStartTime(0.8, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = transform
})
UIView.addKeyframeWithRelativeStartTime(1.2, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = identity
self.customView.backgroundColor = self.colors[2]
})
UIView.addKeyframeWithRelativeStartTime(1.6, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = transform
})
UIView.addKeyframeWithRelativeStartTime(2.0, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = identity
self.customView.backgroundColor = self.colors[3]
})
UIView.addKeyframeWithRelativeStartTime(2.4, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = transform
})
UIView.addKeyframeWithRelativeStartTime(2.8, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = identity
self.customView.backgroundColor = self.colors[0]
})
}, completion: nil)
仍然不能按需要工作。在细节上,动画都是跳跃和不流畅的,有些部分比需要的慢,有些太快了。我希望颜色在视图缩小到 0 比例时立即改变,然后它开始以新的背景颜色增长。
然后我尝试创建两个单独的动画。一种用于比例,一种用于颜色。我将颜色设置为离散的,以便立即更改颜色。所以我得到了:
let transform = CGAffineTransformScale(customView.transform, 0, 0)
let identity = CGAffineTransformIdentity
UIView.animateKeyframesWithDuration(0.8, delay: 0, options: .CalculationModePaced | .Repeat, animations: { () -> Void in
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = transform
})
UIView.addKeyframeWithRelativeStartTime(0.4, relativeDuration: 0.4, animations: { () -> Void in
self.customView.transform = identity
})
}, completion: nil)
UIView.animateKeyframesWithDuration(2.8, delay: 0, options: .CalculationModeDiscrete | .Repeat, animations: { () -> Void in
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.4, animations: { () -> Void in
self.customView.backgroundColor = self.colors[1]
})
UIView.addKeyframeWithRelativeStartTime(0.4, relativeDuration: 0.8, animations: { () -> Void in
self.customView.backgroundColor = self.colors[2]
})
UIView.addKeyframeWithRelativeStartTime(1.2, relativeDuration: 0.8, animations: { () -> Void in
self.customView.backgroundColor = self.colors[3]
})
UIView.addKeyframeWithRelativeStartTime(2.0, relativeDuration: 0.8, animations: { () -> Void in
self.customView.backgroundColor = self.colors[0]
})
}, completion: nil)
由于某种原因,它只是从颜色 1 跳转到颜色 0,而根本不会更改为颜色 2 和 3。甚至这种从 1 到 0 的转换也是不同步的。有什么想法吗?
【问题讨论】:
标签: ios objective-c swift user-interface animation