gpt4 book ai didi

ios - UIView.animate 和完成问题

转载 作者:行者123 更新时间:2023-11-30 11:47:52 24 4
gpt4 key购买 nike

我在使用 UIView.animate 时遇到问题。

我想要的功能(看起来)很简单:有一个按钮,当你按住它时,整个屏幕会慢慢地从底部开始被一种不同的颜色填充(通过一个名为 bar 的 UIView 向上移动到顶部来实现) ,最终填满整个屏幕)。当栏到达顶部时,背景颜色将更改为栏的颜色,栏将移回到其原始状态(从 View 中隐藏),并更改其颜色。当用户在条到达顶部之前释放按钮时,条会再次快速向下移动。

现在我已经解决了,如下:

  @IBAction func buttonPressed(_ sender: Any) {        
UIView.animate(withDuration: 3, animations: {
self.bar.frame.origin.y = 0
}, completion: {(finished: Bool) in
if self.bar.frame.origin.y == 0 {

self.backColor = self.barColor
self.view.backgroundColor = UIColor(rgb: self.colors[self.backColor])

self.changeBarColor()
self.bar.backgroundColor = UIColor(rgb: self.colors[self.barColor])

self.bar.frame.origin.y = self.view.frame.size.height

}
})

}


@IBAction func buttonReleased(_ sender: Any) {

UIView.animate(withDuration: 0.5, animations: {
self.bar.frame.origin.y = self.view.frame.size.height
})
}

当用户在原始动画结束 3 秒之前释放按钮并再次按下按钮时,就会出现此问题。突然间,完成 block 内的所有内容都被执行了。我尝试使用 if 语句来缓解问题,但这似乎不起作用。

我认为需要发生的是,当用户在第一个动画完成之前释放按钮时,需要取消动画。有人能指出我正确的方向吗?

我附上了一个视频来说明问题:

Video of Problem

最佳答案

您面临的问题是因为之前的动画仍在执行。关键是把之前的动画去掉。

@IBAction func buttonPressed(_ sender: Any) {     

if self.bar.frame.origin.y != self.view.frame.size.height
{
view.layer.removeAllAnimations()
UIView.animate(withDuration: 3, animations: {
self.bar.frame.origin.y = 0
}, completion: {(finished: Bool) in
self.backColor = self.barColor
self.view.backgroundColor = UIColor(rgb: self.colors[self.backColor])
self.changeBarColor()
self.bar.backgroundColor = UIColor(rgb: self.colors[self.barColor])
self.bar.frame.origin.y = self.view.frame.size.height
})
}
else
{
UIView.animate(withDuration: 3, animations: {
self.bar.frame.origin.y = 0
}, completion: {(finished: Bool) in
if self.bar.frame.origin.y == 0 {

self.backColor = self.barColor
self.view.backgroundColor = UIColor(rgb: self.colors[self.backColor])

self.changeBarColor()
self.bar.backgroundColor = UIColor(rgb: self.colors[self.barColor])

self.bar.frame.origin.y = self.view.frame.size.height

}
})
}
}

@IBAction func buttonReleased(_ sender: Any) {
view.layer.removeAllAnimations()
UIView.animate(withDuration: 0.5, animations: {
self.bar.frame.origin.y = self.view.frame.size.height
})
}

关于ios - UIView.animate 和完成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48632785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com