0

我做了一些自定义布局,包括 willAnimateRotationToInterfaceOrientation:duration: 中的动画我遇到的问题是,如果设备从 LandscapeLeft 更改为 LandscapeRight,界面应该旋转,但布局代码,尤其是动画不应该运行。我怎样才能检测到它正在从一种景观变为另一种景观?self.interfaceOrientation 以及 [[UIApplication sharedApplication] statusBarOrientation] 不返回有效结果,他们似乎认为设备已经旋转。因此,以下不起作用

if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation) && UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) {...}
4

3 回答 3

5

您可以检查设备方向,然后设置一个标志,以确定您是在左方向还是右方向。然后,当您的设备切换时,您可以抓住它并随心所欲地处理它。

要确定方向,请使用:

if([UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft)
{
    //set Flag for left
}
else if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)
{
    //set Flag for right
}

您还可以在设备旋转时使用以下命令捕获通知:

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

然后像这样写一个方法detectOrientation

-(void) detectOrientation 
{
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft)
    {
        //Set up left
    } else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)
    {
        //Set up Right
    } else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) 
    {
        //It's portrait time!
    }   
}
于 2012-07-25T16:50:36.300 回答
3
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
 {
   if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation ]== UIDeviceOrientationLandscapeRight)
    {
      NSLog(@"Lanscapse");
    }
   if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown )
    {
      NSLog(@"UIDeviceOrientationPortrait");
    }
 }
于 2014-12-24T09:45:20.673 回答
1

似乎唯一的解决方案是缓存最后的方向变化。到时 willAnimateRotationToInterfaceOrientation: 被称为设备并且界面方向已经更新。解决方法是在每次变化结束时记录下目标方位,以便在再次设置方位变化时可以查询到这个值。这并不像我希望的那样优雅(我的视图控制器上的另一个属性),但据我所知似乎是唯一的方法。

于 2012-07-25T20:11:32.747 回答