代码之家  ›  专栏  ›  技术社区  ›  user4557742

核心动画+UIDynamics+arc4random()

  •  0
  • user4557742  · 技术社区  · 11 年前

    我有一个UFO UIImage 我只是想让它漂浮在周围,在随机的位置进出,就像游戏《小行星》中的小行星一样。我进行了一些轮换,并在那里暂时生长。如果所有的动画都是随机的,那就太好了。即使只是随机运动,我也会非常高兴。如何实现arc4random()?完成这个简单的任务后,我想学习如何将arc4random()应用于UIDynamics中的各种行为。提前感谢。

    import UIKit
    
    class ViewController: UIViewController {
    
    @IBOutlet var ufo: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        UIView.animateWithDuration(5.5, delay: 0, options: .Repeat, animations: {
            let grow = CGAffineTransformMakeScale(2, 2)
            let angle = CGFloat( -30)
            let rotate = CGAffineTransformMakeRotation(angle)
            self.ufo.transform = CGAffineTransformConcat(grow, rotate)
            }, completion: nil)
    }
    
    
    }
    
    1 回复  |  直到 11 年前
        1
  •  0
  •   chrissukhram    11 年前

    arc4random_uniform(n)将返回一个从0到n的数字。如果您希望它返回一个Int,则可以按如下方式进行转换:

    var randomNumber = Int(arc4random_uniform(7))
    

    使用此函数生成随机数,然后在动画中使用这些数。

    例如,如果希望动画具有随机持续时间:

    var duration = Double(arc4random_uniform(5)+1)
    var x = CGFloat(arc4random_uniform(320))
    var y = CGFloat(arc4random_uniform(960))
    UIView.animateWithDuration(duration, delay: 0, options: .Repeat, animations: {
        let grow = CGAffineTransformMakeScale(2, 2)
        let angle = CGFloat( -30)
        let rotate = CGAffineTransformMakeRotation(angle)
        self.ufo.transform = CGAffineTransformConcat(grow, rotate)
        self.ufo.frame = CGRectMake(x,y,self.ufo.frame.size.width, self.ufo.frame.size.height)
        }, completion: nil)
    

    我之所以使用arc4random_uniform(5)+1,是因为函数是从0到n的,正如我前面提到的那样,所以在本例中是从0至5,但我们不希望动画持续时间为0,所以我在其中添加了1,以使数字为1至6。