0

我有一个带有一些单词的表格视图,并且当设备旋转时我会呈现闪存卡样式的横向视图。我通过观察“UIDeviceOrientationDidChangeNotification”做到了。

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(openLandscapeMode) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

1)效果很好,很流畅,但问题是当我们在风景中时,我不希望视图控制器对围绕垂直轴的旋转做出反应,这样我就可以把手机放在桌子上仍然会在风景中。也许我应该以某种方式观察水平旋转,而不是设备方向?

-(void)openLandscapeMode
{

    if([[UIDevice currentDevice]orientation]==UIDeviceOrientationLandscapeLeft||[[UIDevice currentDevice]orientation]==UIDeviceOrientationLandscapeRight)
    {
        LandscapeCardViewController *landscape = [[LandscapeCardViewController alloc]init];
        landscape.words = words;
        landscape.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController:landscape animated:YES];
        NSLog(@"Switch to %@",[[NSUserDefaults standardUserDefaults]valueForKey:@"ChosenWordInCard"]);
        [landscape release];
    }
    else
    {
        [self dismissModalViewControllerAnimated:YES];  
        [[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationPortrait];

    }
}

2)第二个问题是在哪里删除观察者,如果这个控制器在标签栏中,我想在同一个标​​签栏中的另一个控制器中执行相同的转换,但是,当然,还有另一个横向视图?我在 viewWillDissappear 中尝试过,但它不能正常工作。非常感谢!

4

2 回答 2

2

对于您的第一个问题,您的视图控制器中应该有一个方法,您可能需要对其进行编辑以仅支持纵向

-(BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationPortrait(interfaceOrientation); //only allow portrait
}

这将阻止它自动旋转到横向,同时保持原始方法不变

对于第二个。过渡完成后怎么办?然后在视图再次出现时重新添加它。然后在您的横向控制器中,添加它以重新检测设备何时为纵向。

于 2012-03-07T11:51:16.643 回答
0

我找到了 我改成的解决方案if([[UIDevice currentDevice]orientation]==UIDeviceOrientationPortrait||[[UIDevice currentDevice]orientation]==UIDeviceOrientationPortraitUpsideDown),一切正常!奇怪,但它有效!

关于移除观察者 - 我这样做-viewWillAppear,检查,如果我现在不在风景中。

于 2012-03-27T18:45:44.303 回答