Рекомендуемый способ пойти полный экран

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

Спасибо.

1
задан Matt Long 2 June 2010 в 20:14
поделиться

2 ответа

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

1
ответ дан 3 September 2019 в 00:06
поделиться

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

  • В 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];
    }       
}
}

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

1
ответ дан 3 September 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: