无法在 Swift 中使用时间延迟为 UIImage 设置动画
Posted
技术标签:
【中文标题】无法在 Swift 中使用时间延迟为 UIImage 设置动画【英文标题】:Cannot animate UIImage with timing delay in Swift 【发布时间】:2018-02-13 13:43:55 【问题描述】:我试图在 3 秒后为 UIImage 的 alpha 设置动画。默认情况下,alpha 设置为 0,3 秒后,alpha 应更改为 1,从而向用户显示图像。我为动画编写的代码确实将 alpha 设置为 0,但我无法在 3 秒后将 alpha 更改为 1。我是 swift 的新手,不知道我哪里出了问题。这是我的代码。
import UIKit
class WelcomeOneViewController: UIViewController
@IBOutlet weak var swipeImageView: UIImageView!
override func viewDidLoad()
super.viewDidLoad()
swipeImageView.alpha = 0
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
displaySwipeView()
func displaySwipeView()
UIView.animate(withDuration: 1.0, delay: 3.0, options: .beginFromCurrentState, animations:
DispatchQueue.main.async [weak self] in
self?.swipeImageView.alpha = 1
, completion: nil)
【问题讨论】:
如果你想让你的动画在 3 秒内完成,那么 withDuration: 1.0, 应该是 withDuration: 3.0, 我希望动画在 3 秒延迟后开始,而不是 3 秒完成。 你从哪里调用这个方法?确保它是视图将出现而不是视图加载并在主队列中尝试 我在 viewDidAppear 中调用该函数没有运气 【参考方案1】:用这段代码试试吧:
import UIKit
class WelcomeOneViewController: UIViewController
@IBOutlet weak var swipeImageView: UIImageView!
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
swipeImageView.alpha = 0
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
displaySwipeView()
func displaySwipeView()
swipeImageView.alpha = 0
UIView.animate(withDuration: 1.0, delay: 3.0, options: [], animations:
self.swipeImageView.alpha = 1
, completion: nil)
【讨论】:
那没有成功。视图加载后,图像仍然立即可见。 @AndrewTuzson 现在怎么样? 成功了!但是,现在图像在消失之前可以看到一瞬间。我该如何克服呢? 我会在 viewWillAppear 中使用 swipeImageView.alpha = 0 吗? @AndrewTuzson 这意味着在viewDidLoad
和viewDidAppear
之间的某个位置,您再次将swipeImageView.alpha
设置为1.. 尝试将swipeImageView.alpha = 0
设置为viewWillAppear()
【参考方案2】:
尝试在主队列中这样做:
func displaySwipeView()
UIView.animate(withDuration: 1.0, delay: 3.0, options: .beginFromCurrentState, animations:
DispatchQueue.main.async [weak self] in
self?.swipeImageView.alpha = 1
, completion: nil)
希望对你有帮助!
【讨论】:
谢谢!在将 alpha 设置为 0 后,我复制了您的语法并在 viewDidLoad() 中调用了 displaySwipeView()。当屏幕加载时,图像现在可见。有什么想法吗? 所以现在的问题是,如果我是对的,那张图片会加载但没有动画? 没错。加载视图时立即显示图像。我已经更新了原帖中的语法。 放在主线程上没用.. viewDidLoad 已经在主线程上执行了 @AndrewTuzson 尝试使用任何其他 UIViewAnimationOptions。除了 .beginFromCurrentState 之外,请尝试使用 .curveEaseInOut。 beginFromCurrentState 有时会出现意外行为。以上是关于无法在 Swift 中使用时间延迟为 UIImage 设置动画的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 中使用延迟调用数组项 - 获取 UIResponder 错误