我需要实现一个随机的"脉冲"在imageview上的动画。 随机,因为我不想要一个简单的循环动画,它每隔x秒就会重复一次。脉动必须是不规则的。
我需要一个随机延迟,随机持续时间,以及它是否可能是fromValue和toValue的随机值。
我的简单脉冲动画代码,每5秒重复一次,不透明度从1开始为0:
var pulseAnimation:CABasicAnimation = CABasicAnimation(keyPath: "opacity")
pulseAnimation.duration = 5.0
pulseAnimation.fromValue = NSNumber(float: 0.0)
pulseAnimation.toValue = NSNumber(float: 1.0)
pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
pulseAnimation.autoreverses = true
pulseAnimation.repeatCount = Float.infinity
myimageview.layer.addAnimation(pulseAnimation, forKey: "opacity")
如果我写的话:
pulseAnimation.duration = arc4random(....) //I will have a "fixed" random value
如何实现不规则值?
答案 0 :(得分:2)
arc4random()
和arc4random_uniform()
是随机的。不需要播种,它们具有加密质量。
对于范围使用arc4random_uniform()
而不是arc4random()
上使用模块化运算符。
您不想使用的是rand()
。
答案 1 :(得分:1)
好的我找到了一个方法:
for loopNumber in 1...5 {
let myImageView = UIImageView()
myImageView.image = UIImage(named: "nameImageView")
myImageView.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
self.view.addSubview(myImageView)
var pulseAnimation = CABasicAnimation(keyPath: "opacity")
pulseAnimation.fromValue = Double(arc4random_uniform(6)+1)/10
pulseAnimation.toValue = Double(arc4random_uniform(6)+2)/10
pulseAnimation.duration = Double(loopNumber)
pulseAnimation.repeatCount = Float.infinity
myImageView.layer.addAnimation(pulseAnimation, forKey: "opacity")
}