セレクターを実行できるようにデバイスが回転されているかどうかを知るために、デバイスの向きの通知を使用しています。ここに私が使用しているコードがあります:
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
!isShowingLandscapeView)
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
[self performSegueWithIdentifier:@"landscape" sender:self];
isShowingLandscapeView = YES;
}
else if (UIDeviceOrientationIsPortrait(deviceOrientation) &&
isShowingLandscapeView)
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
[self dismissViewControllerAnimated:YES completion:nil];
isShowingLandscapeView = NO;
}
}
ただし、他の子ビューに移動してデバイスを回転させると、セレクターが実行されますが、上記のコードは他のビューが持つクラスから独立したクラスにあります。どうすればそれを止めることができますか?私は試した:
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
それもうまくいきませんでした。デバイスが回転すると、私のアプリは実際にランドスケープモードで別のビューにポップします。そのため、子ビューでは、デバイスを回転させると横向きのビューが表示されます。どうすればそれを修正できますか?