gpt4 book ai didi

ios - Swift:dispatch_async is effect is inconsistent for animation

转载 作者:行者123 更新时间:2023-11-28 12:59:45 25 4
gpt4 key购买 nike

我的应用程序中有一个全局状态。 GUI 因状态而异。

当我从开始 View A 转到 View B 时,我有全局状态 3它应该显示一个信息屏幕,但它没有。但是:当 View B 只加载一次并且我从 View C/D/E 跳回 View B 时,代码可以完美运行。 (您必须在 View A 中才能进入 View B。)

我经常使用 dispatch_async(dispatch_get_main_queue.. 这不是很好的风格,是吗?

为什么我的动画一开始没有加载?什么是好的风格?感谢您的回答,对错误表示抱歉(英语不是我的母语)

  override func viewDidLoad() {
super.viewDidLoad()

dispatch_async(dispatch_get_main_queue(), {

self.animateTheInformationViewWhenGlobalStateIsThree()
})

}


func animateTheInformationViewWhenGlobalStateIsThree() {

print("GLOGBALSTATE \(globalState)") //it is 3


if globalState == 3 {

setGlobalState(3)

dispatch_async(dispatch_get_main_queue(), {
GUITools.animateTheInformationView(self.tableView, animateBottomLayout: self.animationBottomConstraint, value: self.negativValue)
})

print("THE POSITIV VALUE THE NEGATIV")
}

//GUITools-静态类:

class func animateTheInformationView(tableView: UITableView, animateBottomLayout: NSLayoutConstraint, value: CGFloat) {


dispatch_async(dispatch_get_main_queue(), {

animateBottomLayout.constant += value


UIView.animateWithDuration(Constants.animationTime, animations: { () -> Void in

tableView.layoutIfNeeded()

},completion: {
(value: Bool) in
})

})

}

编辑使用 viewDidAppear 它可以工作。但动画不是真正的动画。 tableView“跳跃”。所以没有滑动/动画。

我删除了所有 dispatch_async..

override func viewDidAppear(animated: Bool) {
self.animateTheInformationViewWhenGlobalStateIsSeven()

最佳答案

viewDidLoad() 意味着您的 View 已经可见。由于它还不可见,因此您无法对其应用动画。viewDidLoad() 仅用于配置 View Controller 的 View 并设置 View 层次结构 - 即添加 subview 。

您要使用的是 viewWillAppear()(或 viewDidAppear()),以便在 View 变得(或变得)可见时立即启动动画。

此外,所有 dispatch_async 调用很可能都是不必要的。通常只有当您在主(= UI)线程上时才需要它们。只需删除它们。

关于ios - Swift:dispatch_async is effect is inconsistent for animation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160466/

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