2010-09-09 3 views
0

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

Раньше считалось, что приложение TabBar по умолчанию не позволяют пейзажное, если он не был включен для всех видов в приложении, но можно было бы добавить

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotateFromInterfaceOrientation) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 

поймать сообщения об изменении ориентации & затем соответственно реагировать на сообщения.

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

Итак, View1 (не поддерживает ландшафт) наклонены телефон показывает View1 вбок, View2 (поддерживает ландшафт) наклонены телефон показывает Landscapeview2, теперь вид пейзаж показать один раз, View1 наклонена показывает Landscapeview2

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

Любые идеи? У кого-то еще такая же проблема? (Это никогда не случалось с версиями ОС 3.x)

ответ

0

Для всех заинтересованных; Кажется, что контроллер просмотра с включенным ландшафтом оставался наблюдателем для изменений ориентации, даже если он больше не был активным видом, в основном он отвечал на изменения для каждого вида.

Моим решением было создать 2 новых BOOL, 1 называется isActiveView и 1, называемый isShowingLandscape, и использовали их, чтобы гарантировать, что диспетчер представлений ответил только тогда, когда он или его пейзаж выглядят.

Соответствующий код:

-(void)viewDidAppear:(BOOL)animated 
{ 
    isActiveView = TRUE; 
} 

-(void)viewDidDisappear:(BOOL)animated 
{ 
    isActiveView = FALSE; 
} 

-(void)didRotateFromInterfaceOrientation 
{ 
    if ((orientation == UIDeviceOrientationPortrait) && ((isActiveView) || (showingLandscape))) 
    { 
    [self dismissModalViewControllerAnimated:YES]; 
    showingLandscape = FALSE; 
    } 
    else if ((orientation == UIDeviceOrientationLandscapeLeft) && (isActiveView)) 
    { 
    LandscapeViewController *landscapeViewControllerObject = [[LandscapeViewController alloc] initWithNibName:@"LandscapeView" bundle:[NSBundle mainBundle]]; 
    [self presentModalViewController:landscapeViewControllerObject animated:YES]; 
    [landscapeViewControllerObject release]; 
    showingLandscape = TRUE; 
    } 
    else if ((orientation == UIDeviceOrientationPortraitUpsideDown) && ((isActiveView) || (showingLandscape))) 
    { 
    [self dismissModalViewControllerAnimated:YES]; 
    showingLandscape = FALSE; 
    } 
    else if ((orientation == UIDeviceOrientationLandscapeRight) && (isActiveView)) 
    { 
    LandscapeViewController *landscapeViewControllerObject = [[LandscapeViewController alloc] initWithNibName:@"LandscapeView" bundle:[NSBundle mainBundle]]; 
    [self presentModalViewController:landscapeViewControllerObject animated:YES]; 
    [landscapeViewControllerObject release]; 
    showingLandscape = TRUE; 
    } 
} 

Надеется, что это помогает кто-то другое с теми же проблемами.