gpt4 book ai didi

ios - 为什么在 Animation 中使用 self.view.layoutIfNeeded() 会导致 App 卡顿?

转载 作者:行者123 更新时间:2023-11-28 06:25:39 27 4
gpt4 key购买 nike

在我的应用程序中,一旦用户进入它,我在仪表板上有太多动画只发生一次 - 即当用户第一次进入应用程序时 -

我在 viewDidAppear 中以这种方式执行动画,调用 upperViewAnimation() 函数调用另一个动画函数,更清楚地说,这是使用的代码:

 func upperViewAnimation() {

contianerTop.constant = 0
UIView.animateWithDuration(0.45, animations: { () -> Void in

self.view.layoutIfNeeded()

}, completion:{(finished) in

if finished {
if noInternetConnection && !noInternetConnectionPopup {
self.noConnectionViewHeight.constant = 50
UIView.animateWithDuration(0.3, animations: {
self.view.layoutIfNeeded()
})

noInternetConnectionPopup = true
openNoInternetConnection()
}
else if noInternetConnection {
self.noConnectionViewHeight.constant = 50
UIView.animateWithDuration(0.3, animations: {
self.view.layoutIfNeeded()
})

}
else {
self.noConnectionViewHeight.constant = 0
UIView.animateWithDuration(0.3, animations: {
self.view.layoutIfNeeded()
}, completion: { (finished) in
self.pullToRefreshAction()
})
}
self.notificationButtonAnimationAndMenuButton()
self.moreAppsLabel.hidden = false
}
})
}

func pullToRefreshAction() {
pullToRefreshContainsFailure = false
addBlurToCellDelegate?.removeBlurFromAllCells()

if firstAppear || userLoggedIn {
self.firstAppear = false
userLoggedIn = false
loadingView2.removeFromSuperview()
sucessView.removeFromSuperview()
var viewHeight:CGFloat = 50
if isiPadFlag {
viewHeight = 60
}
loadingView2 = NSBundle.mainBundle().loadNibNamed("GettingDataView", owner: self, options: nil)[0] as! GettingDataView
loadingView2.frame = CGRect(x: 0, y: 0, width: screenWidth, height: viewHeight)
self.noConnectionView.addSubview(loadingView2)
loadingView2.initView()
gettingDataForFirstTime = true

if showPullToRefreshBool {
self.noConnectionViewHeight.constant = 50
}
UIView.animateWithDuration(0.3, animations: {
self.view.layoutIfNeeded()
})
}
else {
self.noConnectionViewHeight.constant = 0
}
} if !gettingData {
// I called requests to get data

}
}

当我执行前面的代码时,我的应用程序有时会卡住,而且布局似乎从未改变(即应用程序似乎从未呈现 UI)

我想知道是否使用过多的 self.view.layoutIfNeeded() 会导致此问题?

真的我放弃了这个奇怪的问题,

请帮忙,

谢谢。

最佳答案

尝试在 upperViewAnimation 的第一个完成 block 中为 UIView 动画设置一个完成 block ,并在完成 block 中而不是外部继续运行你的东西。

如果这没有帮助。尝试在 viewDidLayoutSubviews 中添加您的方法。 还要确保你的动画一次只被调用一次,viewDidAppear/viewDidLayoutSubviews 可以被调用多次,如果在你的动画进行过程中多次调用,事情可能会卡住或变得奇怪。

您可以在动画运行时通过简单的 BOOL 标志检查来解决这个问题,并在动画在 finished block 中完成时将其设置为 false。

关于ios - 为什么在 Animation 中使用 self.view.layoutIfNeeded() 会导致 App 卡顿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975489/

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