Итак, без лишних слов, вот рабочий код:
использовать UISplitViewController, я заменяю мой корневой оконный контроллер при переходе от одного контроллера представления к другому.
Чтобы получить при этом хороший переход, я использую эффект масштабирования, подобный этому:
MyOtherViewController *controller = [[MyOtherViewController alloc] initWithNibName:@"MyOtherView" bundle:nil];
UIWindow *window = ((MyAppDelegate *)[[UIApplication sharedApplication] delegate]).window;
controller.view.frame = [window frame];
controller.view.transform = CGAffineTransformMakeScale(0.01,0.01);
controller.view.alpha = 0;
[window addSubview:controller.view];
[UIView animateWithDuration:0.2 animations:^{
controller.view.transform = CGAffineTransformMakeScale(1,1);
controller.view.alpha = 1.0;
} completion:^(BOOL finished) {
if (finished) {
[self.view removeFromSuperview];
window.rootViewController = controller;
}
}];
и это работает довольно хорошо, за исключением того, что во время анимации новый вид всегда ориентируется как в портретном режиме, независимо от текущей ориентации устройства. Когда анимация закончена, вид ориентируется правильно.
Чего мне не хватает?
Вещи, которые я пробовал:
положить мой новый вид контроллера в качестве единственного подпредставления UIWindowсделать мой новый контроллер корневым контроллером до начала анимацииЛюбопытно, что, если я делаю recursiveDescription для окна в начале моего метода, оконная рама определяется как имеющая размер 768x1024 (т. Е. Портретная), и представление внутри нее 748x1024, но с преобразованием [0, -1, 1, 0, 0, 0] (это означает вращение или что? Разве это не должно быть преобразование идентичности?)