私のアプリの設計では、UIViews が回転に対応している必要があります。
私のアプリが起動すると、UIApplicationWillChangeStatusBarOrientationNotification
.
ただし、最初の回転 (いずれかの向きからいずれかの向き) では、通知は受信されません。
後続のローテーション イベントごとに、予想されるUIApplicationWillChangeStatusBarOrientationNotification
通知が生成されます。
UIDeviceOrientationDidChangeNotification
以下のコードがデバイスの向きをチェックするように変更された場合、通知にも同じことが当てはまります- 結果は同じです。
コード: (myUIView init)
// set up to listen for rotation
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
(回転時の myUIView)
-(void)didRotate
{
if ([self landscape]) // rotated TO landscape
{
// do landscape stuff
}
}
(myUIViewで回転チェック)
// answer the question: are we landscape? Yes or no. No indicates portrait.
-(BOOL)landscape
{
UIInterfaceOrientation iOrientation = [UIApplication sharedApplication].statusBarOrientation;
// Just get a displayable string version
NSString* iOrientationString ;
switch (iOrientation) {
case UIInterfaceOrientationPortrait : iOrientationString = @"UIInterfaceOrientationPortrait" ; break ;
case UIInterfaceOrientationPortraitUpsideDown : iOrientationString = @"UIInterfaceOrientationPortraitUpsideDown" ; break ;
case UIInterfaceOrientationLandscapeLeft:iOrientationString = @"UIInterfaceOrientationLandscapeLeft" ; break ;
case UIInterfaceOrientationLandscapeRight:iOrientationString = @"UIInterfaceOrientationLandscapeRight " ; break ;
}
NSLog(@"%@=%@" , @S(iOrientation ) , iOrientationString ) ;
return UIInterfaceOrientationIsLandscape(iOrientation);
}
では、最初の回転とすべてが正しく呼び出されUIViewController
ていることに注意してください。-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
しかし、回転を意識したビューが欲しいです。欠落している最初のイベントの説明や回避策はありますか?