我想在我的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)
}
}
}
感谢您的帮助!祝你有美好的一天!
答案 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()