15

UIViewController へのポインターがある場合、コントローラーのコードを変更せずに interfaceOrientation が変更されたときに通知を受け取ることはできますか?

デバイスの向きの変化を検出し、UIViewController が回転するかどうかを確認するのが最善の策ですか?

4

2 に答える 2

16

NSNotificationCenter を使用できます。

 [[NSNotificationCenter defaultCenter] addObserver:self // put here the view controller which has to be notified
                                         selector:@selector(orientationChanged:)
                                             name:@"UIDeviceOrientationDidChangeNotification" 
                                           object:nil];
- (void)orientationChanged:(NSNotification *)notification{  
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

    //do stuff
    NSLog(@"Orientation changed");          
}
于 2013-01-17T20:44:06.793 に答える
3

willAnimateRotationToInterfaceOrientation:duration:UIViewController でこのメソッドを使用してから、UIView (またはその他のコード) を横向きまたは縦向きに再配置できます。例えば

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
  if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    // change positions etc of any UIViews for Landscape
  } else {
    // change position etc for Portait
  }

  // forward the rotation to any child view controllers if required
  [self.rootViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
于 2013-01-18T00:17:42.807 に答える