2010-06-02 3 views
1

Я хочу, чтобы UIView занимал весь экран, чтобы отображать изображение время от времени, но большую часть времени я использую UISplitViewController для основной функциональности приложения. Есть ли рекомендуемый/лучший способ для этого? Прямо сейчас у меня есть указатель на главное окно, и я просто добавляю UIView в качестве подвидного представления и выводя его на передний план, но он не будет отображаться в правильной ориентации. Мне просто интересно, есть ли лучший способ/что-то простое, что мне не хватает.Рекомендуемый способ выхода на полный экран

Спасибо.

ответ

1

Я закончил использовать modal view controller, который я представляю из контроллера разделенного вида. Затем я указываю разрешенные ориентации в -shouldAutorotateToInterfaceOrientation. Я также скрываю строку состояния. Это работает для моих нужд.

1

Я боролся с этим же вопросом в течение некоторого времени и придумал неуклюжее обходное решение. Перед моим решением еще немного фона на препятствиях:

  • В iPhone OS координаты корневого представления всегда находятся в фиксированных фиксированных координатах физического экрана. «Вверх» - это всегда устройство. Subviews должны получить координаты, которые были преобразованы в заданную ориентацию, так что «Вверх» - это то, что мы ожидаем быть: гравитационным.
  • Поэтому размещение UIView в верхней части иерархии представления (выше UIScrollView) потребует, чтобы вы делали эти преобразования самостоятельно во время событий ориентации. Вы получаете полноэкранный режим, но вы теряете выгоду от координат ориентации управления scrollView для ваших подзонов.
  • Сохраняя ваш взгляд в scrollView, нет простого способа, как в Mac OS просто свернуть панель splitView. При просмотре файла заголовка отображаются некоторые методы частного экземпляра, используемые для управления шириной.

Так что, я думаю, что вы можете сделать, это сохранить два «ориентацию» знают контроллеры отображений (один 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]; 
    }  
} 
} 

Я получил много этого код из здесь и других источников, но, насколько я знаю, эта реализация является уникальной. Наверное, потому что это несовершенно.

+0

Спасибо за ваш отзыв. Я действительно сделал что-то подобное. Я просто надеялся, что существует более простой (меньше кода) способ его реализации. Вы посмотрели на -setWantsFullScreenLayout на UIViewController? Там, кажется, что-то есть, но когда я использую, что-то все еще испортилось, поскольку представление отображается в портрете, хотя я в пейзаже. Это раздражает, но я уверен, что я просто делаю это неправильно. ;-) –

+0

Из того, что я прочитал, этот метод влияет только на отображение черной панели состояния или нет. Это неверное слово в «хочет полный экран»; его следует называть «показывает строку состояния». – SG1

Смежные вопросы