Чтобы использовать 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] (делает этоозначает вращение или что? Разве это не должно быть преобразование идентичности?)