gpt4 book ai didi

swift - animateWithDuration 动画一次但不是两次

转载 作者:搜寻专家 更新时间:2023-11-01 06:22:04 29 4
gpt4 key购买 nike

我在 switch 语句中有一段动画,该语句运行并执行预期的操作。在计时器内每二十秒成功调用一次动画。但是,动画不会在任何时候发生,而是在第一次发生。在我下面的代码中,您将看到我用来尝试突出显示问题的 println 语句。每个 println 语句都打印但没有动画发生。我缺少什么?

func popAnimation(indexNumber: Int) {

let image = self.overlayImageView[indexNumber]
image.hidden = false
image.alpha = 0.0

UIView.animateWithDuration(0.75, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: nil, animations: { () -> Void in

println("animation ran")

println(image.alpha)
image.image = UIImage(named: "lowCountOverlay")
image.alpha = 1.0


}, completion: { (Bool) -> Void in

UIView.animateWithDuration(0.75, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: nil, animations: { () -> Void in

println("animation 2 ran")

println(image.alpha)
image.alpha = 0.0


}, completion: { (Bool) -> Void in

println("animation 3 ran")
image.hidden = true

})

})

}

更新:如果我从第二个完成 block 中删除 image.hidden,它可以正常工作并重复设置动画。这很有趣,因为如果它没有隐藏,它应该覆盖 View 中的其他交互式内容,但事实并非如此。其他内容可以在模拟器中完全访问。 UIImageView image 绝对是 Storyboard中的顶层。

最佳答案

我可能会离开,但看起来你正在从一个 NSTimer 运行,它可能在也可能不在主线程中。UI 更新需要在主线程中进行,尝试将完成处理程序包装在定向到主线程的 GCD 分派(dispatch)中,如下所示,看看是否有帮助?甚至可能将整个事情强制到主线程。

UIView.animateWithDuration(0.75, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: nil, animations: { () -> Void in
// First animation
}, , completion: { (Bool) -> Void in
dispatch_async(dispatch_get_main_queue(),{
// second animation
})
})

关于swift - animateWithDuration 动画一次但不是两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32172303/

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