Рекомендуемый способ полного экрана - PullRequest
1 голос
/ 03 июня 2010

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 12 июля 2010

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

1 голос
/ 03 июня 2010

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

  • В iPhone OS координаты корневого представления всегда находятся в буквальных фиксированных координатах физического экрана. «Вверх» - это всегда устройство вверх. Подвиды должны получить координаты, которые были преобразованы в заданную ориентацию, так что «Вверх» - это то, что мы ожидаем: гравитация вверх.
  • Для размещения 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];
    }       
}
}

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

...