检测景观到横向方向的变化

时间:2012-07-25 16:08:50

标签: ios uiviewcontroller orientation

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

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

3 个答案:

答案 0 :(得分: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!
    }   
}

答案 1 :(得分: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");
    }
 }

答案 2 :(得分:1)

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