2010-09-02 4 views
2

Итак, у меня есть модальный вид, отображаемый в моем приложении, в котором есть небольшая информация для пользователя. Проблема в том, что когда устройство вращается, происходит некоторая анимация, но только в кадре. Сама форма не вращается. Все параметры авторотации установлены на YES. Я показываю его, когда пользователь нажимает на поле в popover. Это заставляет меня подозревать, что это имеет какое-то отношение к этому, но я не уверен. Это bizzare, потому что если устройство находится в любом представлении, а затем отображается модальное окно, это нормально. Это происходит только тогда, когда устройство поворачивается в режиме просмотра. Кто-нибудь знает, что может вызвать такое поведение при повороте устройства? Благодаря!iPad Модальный вид не вращается

Вот отрывок, который обрабатывается в контроллере представления поповер:

if (currentLevel == 1 && businessOrLocation == 0){ 
    if(tbsViewController == nil) 
     tbsViewController = [[BusinessFilteredViewController alloc] initWithNibName:@"BusinessFilteredView" bundle:[NSBundle mainBundle]]; 

    NSMutableArray *tempBusiness = [[NSMutableArray alloc] init]; 
    for (id theKey in appDelegate.groupedBusiness) { 
     NSMutableArray *tempArr = [appDelegate.groupedBusiness objectForKey:theKey]; 
     [tempBusiness addObject:tempArr]; 
    } 

    tbsViewController.businessOrLocation = businessOrLocation; 
    tbsViewController.modalPresentationStyle = UIModalPresentationFullScreen; 
    tbsViewController.modalTransitionStyle = UIModalPresentationFullScreen; 
    [self presentModalViewController:tbsViewController animated:YES]; 
} 
+0

Можете ли вы опубликовать еще несколько кода, особенно некоторых из вашего BusinessFilteredViewController? Как вы делаете что-то особенное в функции willRotateToInterfaceOrientation: duration в обоих контроллерах? – MishieMoo

+0

У меня нет, это опция по умолчанию. Нужно ли мне что-то делать? – gabaum10

ответ

5

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

Поскольку у меня уже есть протокол делегатов, чтобы очистить представление от popor, когда пользователь нажимает «done», это было всего лишь небольшим шагом, чтобы заставить авторотацию работать так, как я этого хотел. Вот некоторые фрагменты:

@protocol InfoViewControllerDelegate <NSObject> 

@optional 

// Implement this to close the info view once the user clicks done. 
- (void)infoViewDidFinish:(InfoViewController *)view; 

// Implement this method if the delegate launched us as a popup view and must therefore 
// take responsibility for diplaying help. 
- (void)infoViewDidRequestHelp:(InfoViewController *)view; 

@end 

И в моем главном экране IPad, который представляет этот вид всплывающий:

#pragma mark - InfoViewControllerDelegate methods 

- (void)infoViewDidFinish:(InfoViewController *)view { 
    [self hideInfo:self]; 
} 

- (void)infoViewDidRequestHelp:(InfoViewController *)view { 
    [self hideInfo:self]; // Close the info view first 
    HelpViewController *help = [[HelpViewController alloc] init]; 
    help.delegate = self; 
    [self presentModalViewController:help animated:YES]; 
    [help release]; 
} 

Чтобы сделать жизнь простым для случаев, когда я запускающие представление информации за пределами вида всплывающий (например, на iPhone, это просто модальное представление), он проверяет, обрабатывает ли делегат модальные подзапросы, а если нет, обрабатывает их самостоятельно. Таким образом, мне не нужно было менять базовый контроллер iPhone вообще, так как авторотация уже работала нормально.Вот «Помощь» действие кнопки в контроллере представления информации, показывая, как я сделал это:

- (IBAction)help:(id)sender { 
    if ([delegate respondsToSelector:@selector(infoViewDidRequestHelp:)]) { 
     [delegate infoViewDidRequestHelp:self]; 
    } else { 
     HelpViewController *help = [[HelpViewController alloc] init]; 
     help.delegate = self; 
     [self presentModalViewController:help animated:YES]; 
     [help release]; 
    } 
} 

С помощью этого кода на месте, весь мой интерфейс autorotates гладко на обоих устройствах, будь то или нет всплывающих окон мнения были вовлечены.

+0

Возможно, вы не можете представить свой контроллер. Я нуждался в этом для внутренних целей и не планировал выпускать этот дизайн. Вместо этого вместо этого используется «родительский» контроллер popover, он отлично работает. – Chase

0

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

Прежде всего, кажется, что я думаю, что это раздражает пользователя. Попкор дает вам приятный интегрированный пользовательский интерфейс, и модальность уводит вас.

Что еще более важно, хотя ваш контроллер просмотра popover на самом деле не обладает полномочиями по всему экрану, поэтому представление полноэкранного модального кода из popover просто кажется неправильным.

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

Если это не работает для вас, я бы предложил просмотреть ваши потребности в пользовательском интерфейсе и перепроектировать макет.

0

Я предполагаю, что вы реализовали - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation в BusinessFilteredViewController и возвращает YES

Не могли бы вы проверить, что вы добавляете более 1 подвидов в окне приложения. Если это так, попробуйте создать контейнер UIViewController для всех viewControllers, которые вы хотите добавить в окно.

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