我的应用程序中有一个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()
}
答案 0 :(得分:2)
viewDidLoad()
不表示您的视图已经可见。由于它不可见,您无法对其应用动画。
viewDidLoad()
仅用于配置视图控制器的视图并设置视图层次结构 - 即添加子视图。
您要使用的是viewWillAppear()
(或viewDidAppear()
),以便在视图变为(或变为)可见时立即开始动画。
此外,所有dispatch_async
次来电都不太可能。当你在主(= UI)线程上不时,通常只需要它们。只需删除它们。