0

对于我的应用程序,我想让设备旋转但倒置。这工作正常。但是,我想阻止应用程序专门从

横向左->横向右-反之亦然

如果有人好奇,这是因为旋转会弄乱我的布局,因为它们每个都从一个共同点旋转

我认为可行的 iOS 5 代码是这样的:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {

    NSLog(@"Rotating");
    if((lastOrient == 3 && toInterfaceOrientation == 4) || (lastOrient == 4 && toInterfaceOrientation == 3)){
       lastOrient = toInterfaceOrientation;
       return NO;
    }

   lastOrient = toInterfaceOrientation;
   return YES;

}

其中 3= 横向左侧和 4= 横向右侧

有关如何使用 iOS6 执行此操作的任何建议?还是完全不同的解决方案?

4

2 回答 2

1

shouldAutorotateToInterfaceOrientation 在 ios6 中已弃用。用这个:

- (BOOL)shouldAutorotate {

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

if (lastOrientation==UIInterfaceOrientationPortrait && orientation == UIInterfaceOrientationPortrait) {
 return NO;

}

return YES;
}

没有测试过这个代码。您可以获得有关这些帖子的更多信息: shouldAutorotateToInterfaceOrientation is not working in iOS 6 shouldAutorotateToInterfaceOrientation not being called in iOS 6

于 2012-11-27T21:17:41.490 回答
0

好的,我在这里回答了我自己的问题:

好消息是,绝对有办法做到这一点!所以这是基础知识:

在 iOS6 中,一般由 appDelegate 来处理应用程序是否可以旋转。然后,当设备收到旋转信号时,它会询问您的视图以了解其支持的方向。这是我实现我的代码的地方。事实上, shouldAutorotate() 在解决方案中没有任何作用。

所以我创建了一个变量来跟踪最后一个方向,并将其更改为

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

这样我可以比较方向

-(NSUInteger)supportedInterfaceOrientations
{
    NSLog(@"Last Orient = %d", lastOrient);
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait;

    if (lastOrient != 3 && lastOrient != 4) {
        NSLog(@"All good, rotate anywhere");
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    else if(lastOrient == 3){
        orientations |= UIInterfaceOrientationMaskLandscapeRight;
        NSLog(@"Can only rotate right");
    }
    else if(lastOrient == 4){
        orientations |= UIInterfaceOrientationMaskLandscapeLeft;
        NSLog(@"Can only rotate left");
    }

    return orientations;
}

似乎对我有用。有点hack,但它做了它需要做的事情

于 2012-11-27T21:20:32.220 回答