ориентация изменилась не работает - PullRequest
1 голос
/ 12 марта 2012

Заранее спасибо

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

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

и метод изменения ориентации -

- (void) orientationChanged:(id)obj
{  
    if( [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight )
    {
        self.view=self.landscapeView;
        NSLog(@"landscapeView");

       //[self loadView1];
    }
    else 
    {
       self.view = self.portraitView;
       NSLog(@"portraitView");

       //[self loadView1];
    }    
}

и каждый раз, когда он переходил в ту ориентацию, которая была в методе ViewDidLoad () ...

может мне помочь любой ...

Ответы [ 4 ]

6 голосов
/ 12 марта 2012

Ваш вопрос был очень расплывчатым. Это общее объяснение.Вы можете переопределить перечисленные ниже методы для обработки изменений ориентации

Переопределить перечисленные ниже методы

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   // return YES to supported orientation.
}

 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
/* Subclasses may override this method to perform additional actions immediately 
   prior to the rotation. For example, you might use this method to disable view 
   interactions, stop media playback, or temporarily turn off expensive drawing or live 
   updates. You might also use it to swap the current view for one that reflects the new
   interface orientation. When this method is called, the interfaceOrientation property 
   still contains the view’s original orientation. 
*/

}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    /*Subclasses may override this method to perform additional actions immediately after
      the rotation. For example, you might use this method to reenable view interactions, 
      start media playback again, or turn on expensive drawing or live updates. By the time 
      this method is called, the interfaceOrientation property is already set to the new 
      orientation.*/
}


- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
    /*This method is called from within the animation block used to rotate the view. 
      You can override this method and use it to configure additional animations that should 
      occur during the view rotation. For example, you could use it to adjust the zoom level 
      of your content, change the scroller position, or modify other animatable properties
      of your view.*/
}

Не проверяйте ориентацию устройства в viewDidLoad или viewDidAppear, как это

    if( [UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeLeft)
OR if(UIInterfaceOrientationIsLandscape([UIDevice currentDevice].orientation))

Потому что много раз это даст непредвиденные результаты, например, если iPhone / iPad будет помещен поверх стола (у меня это было ... Очень неприятная проблема).

Это яблокоссылка для разработчиков даст больше информации об управлении ориентациями

1 голос
/ 12 марта 2012
Try this
[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
 if ( ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) )
{
    //code here     
}
1 голос
/ 12 марта 2012

изменить следующее

- (void) orientationChanged:(id)obj
{  

  if( [UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeLeft || [UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeRight )
  {
    self.view=self.landscapeView;
    NSLog(@"landscapeView");

    //[self loadView1];
  }
  else 
  {
    self.view = self.portraitView;
    NSLog(@"portraitView");

    //[self loadView1];
  }    
}  
0 голосов
/ 12 марта 2012

почему бы вам просто не использовать shouldAutorotateToInterfaceOrientation? это метод в UIViewController, который уже вызывается ...

...