У меня есть приложение iOS с двумя способами изменения и навигации между диспетчерами, первый способ - использование push/pop с контроллером навигации, а второй - настраиваемый способ перехода с использованием Пользовательский Контейнер View Controller из яблочной документации,Проблема с замораживанием iOS при смене контроллеров просмотров
здесь экран раскадровки выстрел:
и в ViewController.swift:
var contentViewController: UIViewController! {
didSet {
// remove any previous views
for view in self.contentView.subviews {
view.removeFromSuperview()
}
// add the view
// the ViewController must be aded to the children list to avoid being released (as it become a Zombie)
self.addChildViewController(self.contentViewController)
if registerDoneFlag {
//do some animation
let animation = CATransition()
animation.duration = 0.3
animation.type = kCATransitionPush
animation.subtype = kCATransitionFromTop
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
self.contentView.layer.addAnimation(animation, forKey: "SwitchToView1")
registerDoneFlag = false
}
if backFlag {
//do some animation
let animation = CATransition()
animation.duration = 0.3
animation.type = kCATransitionPush
animation.subtype = kCATransitionFromBottom
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
self.contentView.layer.addAnimation(animation, forKey: "SwitchToView1")
backFlag = false
}
self.contentView.addSubview(self.contentViewController.view)
self.contentViewController.didMoveToParentViewController(self)
}
}
и мы делаем эти анимации в начале приложения:
func upperViewAnimation() {
contianerTop.constant = 0
UIView.animateWithDuration(0.45, animations: {() -> Void in
self.view.layoutIfNeeded()
}, completion:{(finished) in
if finished {
if noInternetConnection && !noInternetConnectionPopup {
if isiPadFlag {
self.noConnectionViewHeight.constant = 60
}
else {
self.noConnectionViewHeight.constant = 50
}
UIView.animateWithDuration(0.3, animations: {
self.view.layoutIfNeeded()
})
noInternetConnectionPopup = true
openNoInternetConnection()
}
else if noInternetConnection {
if isiPadFlag {
self.noConnectionViewHeight.constant = 60
}
else {
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
}
})
//self.notificationButtonAnimationAndMenuButton()
}
каждая вещь работает отлично, за исключением в некоторых случаях приложение входит в проводных ситуациях замораживания, навигационный способ работы fine (push/pop), но измененный способ управления просмотром вообще не работает даже приложение выполняет выполненный набор contentViewController, но не делает никаких изменений с приложением
привет благодарю вас за ответ, но что вы подразумеваете под «во время полного процесса загрузки» :) –