停止轮换通知传播到子视图

时间:2013-03-22 22:54:20

标签: ios objective-c

我正在使用设备方向通知,以便知道设备是否已旋转,以便我可以执行选择器。这是我正在使用的代码:

- (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];

它也没用。旋转设备时,我的应用程序实际上会以横向模式弹出另一个视图。所以在子视图中,横向视图出现在我旋转设备中。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

删除UIDeviceOrientationDidChangeNotification

[[NSNotificationCenter defaultCenter] removeObserver:self name: UIDeviceOrientationDidChangeNotification object:nil];

删除所有通知

[[NSNotificationCenter defaultCenter] removeObserver:self];

答案 1 :(得分:0)

在父视图控制器中:

- (BOOL)shouldAutomaticallyForwardRotationMethods {
    return NO;
}

来自文档:

  

调用此方法以确定是否自动转发   与子视图控制器相关的与旋转相关的包含回调。

     

默认实现返回YES。的子类   实现包含逻辑的UIViewController类可以覆盖   这种方法可以控制这些方法的转发方式。如果你   覆盖此方法并返回NO,您负责转发   以下方法适用于子视图控制器   次:

     

willRotateToInterfaceOrientation:duration:   willAnimateRotationToInterfaceOrientation:duration:   didRotateFromInterfaceOrientation: