В моем приложении, и как только пользователь входит в него, у меня слишком много анимаций на панели инструментов, когда это происходит только один раз - когда пользователь впервые заходит в приложение -Зачем использовать self.view.layoutIfNeeded() в анимации заставлять приложение замораживать?
Я выполняю анимацию таким образом в 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
}
}
, когда я выполняю предыдущий код мое приложение иногда замерзает, и, кажется, что расположение никогда не изменял (т. е. кажется, что приложение никогда не отображает пользовательский интерфейс)
Интересно, если слишком много self.view.layoutIfNeeded() вызывают эту проблему?
Действительно я отказаться от этой странной проблемы,
Пожалуйста, помогите,
Спасибо.
Необходимо увидеть ваш видDidLayoutSubviews. 99% вероятность того, что вы что-то делаете, что снова запускает макет, так что он работает в бесконечном цикле. Его легко проверить; разместите там заявление печати и посмотрите, печатает ли он несколько раз. –
@JoshHomann эй Josh, спасибо за вашу помощь, actullay я не делал каких-либо важных вещей в viewDidLayoutSubviews, это мой код в нем: переопределение функ viewDidLayoutSubviews() { infoButtoniPad.highlighted = MainDashboardState.InfoStatus settingsButtoniPad.highlighted = MainDashboardState.SettingStatus profileButtoniPad.highlighted = MainDashboardState.ProfileStatus dashboardButtoniPad.highlighted = MainDashboardState.DashboardStatus openGreenPointFromDashboard = ложь } – Rawan