2015-03-13 34 views
0

我需要在imageview上实现随机“脉冲”动画。 随机,因为我不想要一个简单的循环动画,它每x秒永远重复它。脉动必须是不规则的。SWIFT中imageview上的随机/不规则脉冲动画

我需要一个随机延迟,随机持续时间,以及fromValue和toValue的随机值。

我的一个简单的脉冲动画代码,从1重复每5秒,有透明度,以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 

我该怎么做才能实现不规则值?

回答

2

arc4random()arc4random_uniform()是随机的,你可以得到。不需要播种,它们是密码质量的。

对于范围使用arc4random_uniform()而不是使用arc4random()模块化操作符。

你不想使用的是rand()

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") 
    }