重复while循环不起作用 - 为什么?

时间:2017-05-01 17:58:05

标签: ios swift animation

我想在我的viewController中使用imageView来"搏动",这意味着变得更大,然后再次更小,并重复这一点,直到按下" start" -button。问题是,每当我在viewDidLoad()中使用repeat-while-loop调用该函数时,无论出于何种原因,它都有一个断点。

这是我的viewDidLoad()的一部分:

repeat {
   pulsate()
} while hasStarted == false

当我按下开始按钮时,hasStarted变为真,它应该停止脉动。但它甚至没有启动该功能,它立即调用错误。问题出在哪里?

这是我的脉动() - 功能

func pulsate()
{
    frameOR = imageView.frame
    frameNext = CGRect(x: imageView.frame.midX - 35, y: imageView.frame.midY - 35, width: 80, height: 80)
    let frameVDL = CGRect(x: imageView.frame.midX - 150, y: imageView.frame.midY - 150, width: 300, height: 300)

    if start == false
    {
        UIView.animate(withDuration: 2, animations: {
            self.imageView.frame = frameVDL
        }) { (finished) in
            UIView.animate(withDuration: 2, animations: {
                self.imageView.frame = self.frameOR
            }, completion: nil)
        }
    }
}

感谢您的帮助!祝你有美好的一天!

1 个答案:

答案 0 :(得分:3)

您可以使用UIView.animate的内置选项来简化您尝试执行的操作,避免锁定线程。

尝试一下:

let frameOR = imageView.frame
let frameVDL = CGRect(x: imageView.frame.midX - 150, y: imageView.frame.midY - 150, width: 300, height: 300)

UIView.animate(withDuration: 2.0,
               delay: 0.0,
               options: [UIViewAnimationOptions.autoreverse, UIViewAnimationOptions.repeat],
               animations: {
                imageView.frame = frameVDL
                },
               completion: nil)

您的imageView现在应处于完整的“脉冲”循环中,无需任何其他代码。当您准备停止动画时,只需致电:

imageView.layer.removeAllAnimations()