Я хочу иметь UIView, принимают целый экран для отображения изображения время от времени, но большую часть времени я использую UISplitViewController для функциональности главного приложения. Существует ли рекомендуемая/лучшая практика способ сделать это? Прямо сейчас у меня есть указатель на главное окно, и просто добавляю UIView как представление sub и переношу его на передний план, но это не отобразится в надлежащей ориентации. Я просто задавался вопросом, существует ли лучший путь/что-то, простой, я отсутствую.
Спасибо.
В итоге я использовал модальный контроллер представления, который я представляю из разделенного контроллера представления. Затем я указываю допустимые ориентации в -shouldAutorotateToInterfaceOrientation. Я также скрываю строку состояния. Это работает для моих нужд.
Я боролся с этой же проблемой в течение некоторого времени и придумал неуклюжий обходной путь. Перед моим решением несколько дополнительных сведений о препятствиях:
Итак, я думаю, что вы можете поддерживать два контроллера представления с учетом ориентации (один splitView, один полноэкранный), а также отключать их и перемещать представление между ними при переключении в полноэкранный режим. Я не пошел по этому пути, так как это, очевидно, болезненная ситуация с точки зрения памяти и иерархии взглядов.
Что я делаю, так это переключаюсь между "почти полноэкранной" шириной для основного вида и обычной шириной разделения. Это отлично работает, за исключением того, что закругленные углы splitView на самом деле являются жестко закодированными изображениями, которые отрисовываются независимо от размеров splitView. Вы будете видеть эти крошечные черные круглые углы в 100% случаев.Вот эффект:
- (IBAction)toggleFullscreen:(id)sender; {
id appDelegate = [[UIApplication sharedApplication] delegate];
UISplitViewController *split = [appDelegate splitViewController];
//get master and detail view controller
UIViewController *master = [split.viewControllers objectAtIndex:0];
UIViewController *detail = [split.viewControllers objectAtIndex:1];
//In landscape permit fullscreen
if(self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
CGRect f = detail.view.frame;
if ( f.origin.x == 0 ) { //exiting fullscreen
[sender setImage:[UIImage imageNamed:@"SlideLeft.png"]];
//adjust detail view
f.size.width = 703;
f.origin.x = 321;
[detail.view setFrame:f];
//adjust master view
f = master.view.frame;
f.size.width = 320;
f.origin.x = 0;
[master.view setFrame:f];
} else { //entering fullscreen
[sender setImage:[UIImage imageNamed:@"SlideRight.png"]];
//adjust detail view
f.size.width = 1024;
f.origin.x = 0;
[detail.view setFrame:f];
//adjust master view
f = master.view.frame;
f.size.width = 1;
f.origin.x = -1;
[master.view setFrame:f];
}
}
}
Я получил много этого кода отсюда и из других источников, но, насколько мне известно, эта реализация уникальна. Наверное, потому, что он несовершенный.