swift цвет фона анимации цикла

Я хочу, чтобы цвет фона моего приложения iOS менялся между четырьмя цветами в течение x секунд

Это то, что у меня есть до сих пор (он делает именно то, что я хочу, когда я указываю только 2 цвета)

мне также нужна анимация для запуска в цикле бесконечно.

ViewController.Свифт!--9-->

    UIView.animateWithDuration(X.0, animations: {
        // Color 1
        self.view.backgroundColor = UIColor(rgba)
        // Color 2
        self.view.backgroundColor = UIColor(rgba)
        // Color 3
        self.view.backgroundColor = UIColor(rgba)
        // Color 4
        self.view.backgroundColor = UIColor(rgba)

    })

3 ответов


попробуйте это:

UIView.animateWithDuration(1.0, animations: { () -> Void in
    self.view.backgroundColor = UIColor.blackColor()
    }) { (Bool) -> Void in
        UIView.animateWithDuration(1.0, animations: { () -> Void in
            self.view.backgroundColor = UIColor.greenColor()
            }, completion: { (Bool) -> Void in
                UIView.animateWithDuration(1.0, animations: { () -> Void in
                    self.view.backgroundColor = UIColor.grayColor()
                    }, completion: { (Bool) -> Void in
                        UIView.animateWithDuration(1.0, animations: { () -> Void in
                            self.view.backgroundColor = UIColor.redColor()
                            }, completion:nil)
                })
        })
}

Если вы хотите непрерывную повторяющуюся анимацию, попробуйте следующее:

UIView.animateWithDuration(2, delay: 0.0, options:[UIViewAnimationOptions.Repeat, UIViewAnimationOptions.Autoreverse], animations: {
    self.view.backgroundColor = UIColor.blackColor()
    self.view.backgroundColor = UIColor.greenColor()
    self.view.backgroundColor = UIColor.grayColor()
    self.view.backgroundColor = UIColor.redColor()
}, completion: nil)

ниже код помогает сохранить включить взаимодействие пользователя с анимированным видом. Случайная генерация цвета (используйте в случае необходимости).

UIView.animateWithDuration(7, delay: 1, options:
                         [UIViewAnimationOptions.AllowUserInteraction,
                          UIViewAnimationOptions.Repeat,
                          UIViewAnimationOptions.Autoreverse],
        animations: {
           self.yourView.backgroundColor = self.randomColor()
           self.yourView.backgroundColor = self.randomColor()
        }, completion:nil )

func randomColor() -> UIColor {
        let randomRed:CGFloat = CGFloat(drand48())
        let randomGreen:CGFloat = CGFloat(drand48())
        let randomBlue:CGFloat = CGFloat(drand48())

        return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, 
                       alpha: 1.0)
    }

вы должны использовать NSTimer:

let timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "update", userInfo: nil, repeats: true)

func update() {
    let nextCollor = getNextColor()
    UIView.animateWithDuration(X.0, animations: {
        self.view.backgroundColor = nextCollor
    })
}

func getNextColor() -> UIColor {
    let currentColor = self.view.backgroundColor

    if currentColor == smaple1 {
        return UIColor.redColor()
    } else if currentColor == smaple2 {
        return UIColor.grayColor()
    } else {
        return UIColor.whiteColor()
    }
}

NSTimer.scheduledTimerWithTimeInterval запускает код каждые 5 секунд

PS: Не забудьте аннулировать таймер, когда вы закончите с ним. Просто позвони timer.invalidate() для него. Иначе случится авария.