Swift:dispatch_async效果与动画不一致

时间:2015-12-08 16:03:28

标签: ios swift animation dispatch-async

我的应用程序中有一个globalstate。根据状态,GUI是不同的。

当我从开始查看A到视图B时,我有globalstate 3 它应该显示一个信息屏幕,但它没有。但是:当视图B仅加载一次并且我从视图C / D / E跳回到视图B时,代码完美地工作。 (您必须在视图A中才能进入视图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-Static-Class:

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() }

1 个答案:

答案 0 :(得分:2)

viewDidLoad() 表示您的视图已经可见。由于它不可见,您无法对其应用动画。 viewDidLoad()仅用于配置视图控制器的视图并设置视图层次结构 - 即添加子视图。

您要使用的是viewWillAppear()(或viewDidAppear()),以便在视图变为(或变为)可见时立即开始动画。

此外,所有dispatch_async次来电都不太可能。当你在主(= UI)线程上时,通常只需要它们。只需删除它们。

相关问题