Я пытаюсь анимировать изменение корневого контроллера в моем приложении. После того, как я поменяю контроллеры представлений, я сразу же загружу данные, необходимые для второго контроллера. Пока данные загружаются, я показываю загрузчик (MBProgressHUD). Это моя функция для замены контроллеров отображений:UIView.transitionWithView разбивает макет загрузчика
class ViewUtils {
class func animateRootViewController(duration: NSTimeInterval, changeToViewController: UIViewController) {
let window = UIApplication.sharedApplication().delegate?.window?
if window == nil {
return
}
UIView.transitionWithView(window!,
duration: duration,
options: UIViewAnimationOptions.TransitionFlipFromLeft | UIViewAnimationOptions.AllowAnimatedContent,
animations: {
window!.rootViewController = changeToViewController
},
completion: nil
)
}
}
Все хорошо с этим, но одна вещь - это полностью ломает загрузчик. Я добавляю представление о том, что происходит: Это 2-й контроллер просмотра при вращении. Как только поворот завершен, погрузчик выглядит просто отлично, как прядильщик, так и текстовая анимация в правильном положении в закругленном прямоугольнике.
Я действительно не понимаю, почему это происходит, может кто-нибудь объяснить это мне, пожалуйста? Есть ли способ предотвратить это?
Код 2-го контроллера представления, где я показываю погрузчик:
override func viewDidLoad() {
super.viewDidLoad()
hud = HUD(containingView: view)
hud.show()
createBackground()
}
И мой класс HUD:
class HUD {
private var hudBG: UIView!
private var view: UIView!
private(set) var isShown = false
init(containingView: UIView) {
view = containingView
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func show() {
if !isShown {
if(hudBG == nil) {
hudBG = UIView(frame: CGRectMake(0, 0, view.bounds.width, view.bounds.height))
hudBG.backgroundColor = UIColor(white: 0, alpha: 0.4)
}
view.addSubview(hudBG)
let hud = MBProgressHUD.showHUDAddedTo(view, animated: true)
hud.mode = MBProgressHUDModeIndeterminate
hud.labelText = "Cargando"
hudBG.alpha = 0
UIView.animateWithDuration(0.3, animations: {() -> Void in
self.hudBG.alpha = 1
})
isShown = true
}
}
func hide() {
if isShown {
UIView.animateWithDuration(0.3, animations: {
() -> Void in
self.hudBG.alpha = 0
}, completion: {
(b) -> Void in
self.hudBG.removeFromSuperview()
})
MBProgressHUD.hideHUDForView(view, animated: true)
isShown = false
}
}
}
спасибо за любые идеи!
Почему, по вашему мнению, представление не правильно инициализировано в viewDidLoad? Он уже имеет правильные границы и правильный кадр (например, (0,0,0,0,320,0,480.0) для iP4/S). Это вращение регулятора зрения, что заставляет его сходить с ума - без перехода нет проблем. – Fygo
Как вы знаете, что представление имеет правильный фрейм? Вы поместили журнал в viewDidLoad? – pteofil
Может также иметь значение, о чем мы говорим. Что это за «вид», что вы добавляете хад, основной вид контроллера или одно из его подзонов? Если это главное мнение, я думаю, вы должны использовать его с self.view. – pteofil