2015-03-13 1 views
0

Мне нужно реализовать случайную «импульсную» анимацию на изображении. Случайный, потому что мне не нужна простая анимация цикла, которая повторяется навсегда каждые х секунд. Пульсация должна быть нерегулярной.Случайная/нерегулярная импульсная анимация на изображении в SWIFT

Мне нужна случайная задержка, случайная продолжительность, и если это возможное случайное значение для fromValue и toValue.

Мой код для простого импульса анимации, повторите каждые 5 секунд, с непрозрачностью 0 от 1:

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

Ok Я нашел способ:

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") 
    } 
Смежные вопросы