Как оживить постоянно мерцающий свет в iOS? - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь создать приложение для iOS с неоновым светом, который мигает случайным образом и постоянно, как настоящий.

Я не совсем уверен, как заставить анимацию повторяться постоянно, и я не уверен, как заставить ее работать автоматически и вечно.Я поместил это в viewDidLoad, но я не уверен, что это действительно лучшее место для размещения?

    UIImageView.animate(withDuration: 0.05, delay: 5.0, options: .repeat, animations: {
        UIImageView.animate(withDuration: 0.05, delay: 2.0, animations: {
            self.Aletter.alpha = 0.2
        }) { (_) in
            UIImageView.animate(withDuration: 0.05, delay: 0.0, animations: {
                self.Aletter.alpha = 1.0
            }, completion: { (_) in
                UIImageView.animate(withDuration: 0.05, delay: 2.0, animations: {
                    self.Aletter.alpha = 0.6
                }, completion: { (_) in
                    UIImageView.animate(withDuration: 0.05, delay: 0.0, animations: {
                        self.Aletter.alpha = 1.0
                    }, completion: { (_) in
                        UIImageView.animate(withDuration: 0.05, delay: 0.0, animations: {
                            self.Aletter.alpha = 0.6
                        }, completion: { (_) in
                            UIImageView.animate(withDuration: 0.05, delay: 0.0, animations: {
                                self.Aletter.alpha = 1.0
                            }, completion: { (_) in
                                UIImageView.animate(withDuration: 0.05, delay: 0.0, animations: {
                                    self.Aletter.alpha = 0.6
                                }, completion: { (_) in
                                    UIImageView.animate(withDuration: 0.05, delay: 0.0, animations: {
                                        self.Aletter.alpha = 1.0
                                    }, completion: { (_) in

                                    })
                                })
                            })
                        })
                    })
                })
            })
        }
    })

Этот код будет запускать мою серию мерцаний, но только один раз.Мне нужно, чтобы он шел постоянно.

1 Ответ

1 голос
/ 06 апреля 2019

Как предложил Мэтт в разделе комментариев, вы можете использовать что-то вроде этого:

private func flicker() { [weak self] in
    UIView.animate(withDuration: 0.05, animations: {
        self?.Aletter.alpha = CGFloat.random(in: 0.1...1.0)
    }) { _ in
        // When this round of animations completes call the same method again to start the animations again with a new random value for alpha.
        self?.flicker()
    }
}

И просто позвоните flicker() в вашем viewDidLoad().flicker метод запускает анимацию со случайным альфа-значением для Aletter представления, и когда эта анимация завершается, она снова вызывает себя.

В качестве примечания, используйте маленькие первые буквы для своих переменных, Aletterдолжно быть aletter или aLetter в зависимости от контекста.

...