有没有办法强制在iPhone中更改界面方向?

时间:2011-06-14 17:06:02

标签: ios uiinterfaceorientation

我知道如何允许/禁止使用

旋转方向

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

然而,我现在遇到的问题是手机可能处于纵向(或倒置),并且在某些时候我想要旋转屏幕,就像用户旋转到横向一样。此时,我不想让自动旋转工作了。我想强制界面方向保持在横向。有没有办法做到这一点?我可能想出一个关闭自动旋转的黑客攻击,但是在第一时间强迫旋转我不知道该怎么做。

这是我正在尝试做的事情:

  • 应用程序可以旋转到任何和所有方向。一切都很正常。

  • 发生事件。

  • 现在自动旋转仅适用于landscapeleft和landscaperight。此外,如果用户处于纵向或纵向倒置,我会以编程方式旋转到landscaperight以将用户锁定在该方向。

只是为了让事情变得棘手,我想在强制轮换之前弹出一个UIAlertView(我知道该怎么做),让用户知道发生了什么,我想在alertView后面屏蔽旋转但不是alertView。这甚至可能吗?

感谢。

5 个答案:

答案 0 :(得分:1)

针对您的情况的最佳解决方案是通知用户将其转为横向并暂停程序,直到用户转动方向。然后,当用户旋转设备时,您可以处理委托方法并开始以横向模式显示屏幕。许多应用程序商店应用程序已经处理了这种方法,看起来这是在应用程序商店中批准应用程序的最佳方法之一。我希望这是有道理的。

答案 1 :(得分:0)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
    }


    // orientation view swapping logic
- (void)didRotate:(NSNotification *)notification {


    UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation];
    if (newOrientation != UIDeviceOrientationUnknown || newOrientation != UIDeviceOrientationFaceUp || newOrientation != UIDeviceOrientationFaceDown) 
    {
           orientation = newOrientation;

    }

    // Write your orientation logic here
        if ((orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)) 
    {
     // Clear the current view and insert the orientation specific view.
         [self clearCurrentView];
         [self.view insertSubview:yourLandscapeView atIndex:0];

    } else if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) 
    {
           // Clear the current view and insert the orientation specific view.
            [self clearCurrentView];
            [self.view insertSubview:yourPortraitView atIndex:0];

     }
}

并在事件中添加该通知

答案 2 :(得分:0)

你做不到。至少不是苹果允许的方式。自转旋转设计与整个应用相同。您可以制作手动旋转视图的代码,但就UIDevice而言,您将处于相同的方向。

答案 3 :(得分:0)

根据Apple的说法,如果您不想要设备方向旋转API提供的默认行为:

  

您可以控制:

     
      
  • 您的应用支持的方向
  •   
  • 如何在屏幕上设置两个方向之间的旋转动画。
  •   

我读到这个的方式是“你可以控制其中任何一个,但没有别的”或“你只能控制这两件事。”

我没有在文档中看到任何明确告诉您如何“强制”改变方向的内容。所有这一切都由设备处理,因为它对于持有设备的人来说看起来更自然和友好。这有意义吗?

请参阅此处有关轮换更改的文档:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html

最后,我想说这是不可能的,而且它不会被Apple批准。我投票赞成Praveen的答案,因为我认为你可能需要考虑采用不同的方法来做你想做的事情。

答案 4 :(得分:-2)

是的,你可以这样做。你需要做的是 - (void)viewwillappear方法只需包含以下代码

if (self.interfaceOrientation == <current orientation>) {
        [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)<to which orientation you want to change.>];
    }

它将解决您的问题