使用执行函数和 UI 更新重复动画
Repeating animation with execute function and UI update
我正在制作类似 AdVenture Capitalist 的游戏,但遇到了这个问题。
我有一个标签,其中只有文本,该标签永远不会改变。
我有一个与前一个具有相同来源的动画标签,按下按钮时动画为加载栏。
我有一个标签,在执行函数时显示总和。
我有一个按钮,按下它会执行动画。
我有一个将两个数字相加的函数。
我有一个函数可以更新显示上一个函数总和的标签。
我的问题是,当我让我的代码只在一切按计划工作时执行它,但是当我试图让它成为一个无限循环时它不会工作。
func animate(){
UIView.animate(withDuration: 3, animation{
self.animated.frame.size.width += 200
self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
}, completion: {
(end: Bool)->Void in
self.animated.frame.size.width = 0
self.sumFunc()
self.updateLabel()
})
这段代码工作得很好,但是当我尝试让它成为这样的无限循环时,它不起作用。
func animateInfinite(){
UIView.animate(withDuration: 3, delay: 0, options: .repeat, animations: {
self.animated.frame.size.width += 200
self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
// when I put sumFunc here and updateFunc here, the app breaks, and will not compile
}, completion: {
(end: Bool)->Void in
// when I put sumFunc here and updateFunc here, the app runs, but it never executes, because I have noticed that .repeat animation never has a completion.
我也试过让任务在不同的线程中执行,但是至今没有成功。
class YourClass {
var isAnimationStop = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
startanimation()
}
func startanimation(){
UIView.animate(withDuration: 2, animations: {
self.animated.frame.size.width += 10
self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
}, completion: {_ in
self.animated.frame.size.width = 0
if !self.isAnimationStop{
self. startanimation()
self.sumFunc()
self.updateLabel()
}
})
}
// call stop when you want
func stopAnimation() {
self.isAnimationStop = true
}
}
我正在制作类似 AdVenture Capitalist 的游戏,但遇到了这个问题。
我有一个标签,其中只有文本,该标签永远不会改变。
我有一个与前一个具有相同来源的动画标签,按下按钮时动画为加载栏。
我有一个标签,在执行函数时显示总和。
我有一个按钮,按下它会执行动画。
我有一个将两个数字相加的函数。
我有一个函数可以更新显示上一个函数总和的标签。
我的问题是,当我让我的代码只在一切按计划工作时执行它,但是当我试图让它成为一个无限循环时它不会工作。
func animate(){
UIView.animate(withDuration: 3, animation{
self.animated.frame.size.width += 200
self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
}, completion: {
(end: Bool)->Void in
self.animated.frame.size.width = 0
self.sumFunc()
self.updateLabel()
})
这段代码工作得很好,但是当我尝试让它成为这样的无限循环时,它不起作用。
func animateInfinite(){
UIView.animate(withDuration: 3, delay: 0, options: .repeat, animations: {
self.animated.frame.size.width += 200
self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
// when I put sumFunc here and updateFunc here, the app breaks, and will not compile
}, completion: {
(end: Bool)->Void in
// when I put sumFunc here and updateFunc here, the app runs, but it never executes, because I have noticed that .repeat animation never has a completion.
我也试过让任务在不同的线程中执行,但是至今没有成功。
class YourClass {
var isAnimationStop = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
startanimation()
}
func startanimation(){
UIView.animate(withDuration: 2, animations: {
self.animated.frame.size.width += 10
self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
}, completion: {_ in
self.animated.frame.size.width = 0
if !self.isAnimationStop{
self. startanimation()
self.sumFunc()
self.updateLabel()
}
})
}
// call stop when you want
func stopAnimation() {
self.isAnimationStop = true
}
}