默认应用方向

时间:2013-04-18 17:38:07

标签: ios objective-c cocoa-touch orientation

我有一个用旧版Xcode编写的应用程序。现在我正在使用Xcode 4.6.1。这是我从另一个在公司外部开发的开发人员继承的应用程序。

这个应用程序的一个问题是它的界面。它应默认为LandscapeLeft(这是pList文件中设置的值)。该应用程序忽略此指令,而是默认为纵向模式。

我是否需要采取措施强制代码遵守此值?我对iOS / Objective-C比较陌生。代码编译并运行,只是界面没有做我想要的。

这是一个更容易,因为这是一个仅限iPad的应用程序。

修改 我已经尝试将以下代码添加到我的一个有问题的viewControllers中,但它并没有被尊重。关于如何强迫这种观点进行景观的任何想法? (IDE中是否有设置 - 看起来Xcode曾经有一个方向属性,但我在4.6.1中找不到它)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Overriden to allow any orientation.
    return ((interfaceOrientation==UIInterfaceOrientationMaskLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationMaskLandscapeRight));
}

- (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft;
}

- (NSInteger) supportedInterfaceOrientationsForWindow
{
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL) shouldAutoRotate
{
    return YES;
}

12 个答案:

答案 0 :(得分:6)

我希望这会对你有所帮助。 在AppDelegate.m

中添加其中一个(您想要的方向)方法

在横向模式下强制完全运行应用程序:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskLandscape;
}

在纵向模式下强制完全运行应用程序:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait;
}

答案 1 :(得分:3)

检查app中的视图控制器是否强制查看方向。在Apple文档中查看“处理视图旋转”部分和与旋转相关的任务:

http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html

答案 2 :(得分:1)

好像你在视图控制器中正确实现了所有旋转代码,所以这可能是你的问题。前一阵子我在你的鞋子里我设置我的代码,苹果如何指定它是为了在横向模式下加载我的应用程序但由于某种原因它只是没有正确加载应用程序。所以在一堆论坛帖子和许多论坛回复之后,我在视图控制器中发现我没有在loadView中设置视图控制器视图。因此,请确保在视图控制器的加载视图方法中,您希望根视图的视图设置为视图控制器self.view。告诉我它是怎么回事

答案 3 :(得分:0)

点击Xcode中的项目文件。然后点击“目标”。选择你的方向(向下滚动!) 在IB中确保将视图(在检查器下)设置为纵向。

答案 4 :(得分:0)

以横向模式启动

在iOS 5中,您需要在每个视图控制器中实现以下方法。

// Called only in IO 5 and earlier.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
            interfaceOrientation == UIInterfaceOrientationLandscapeLeft );
}

将UIInterfaceOrientation“初始界面方向”设置为Info.plist中的UIInterfaceOrientationLandscapeRight

以横向模式布置你的观点。

Apple's developer docs

答案 5 :(得分:0)

在iOS 6之前,即在iOS 5及更早版本中,应用程序和视图控制器的旋转由各个视图控制器控制,而在iOS 6及更高版本中,负责旋转的视图控制器是容器ViewControllers,例如UINavigationController& UITabBarController。你在项目中使用什么作为rootviewcontroller?

此后Autorotation in iOS

清楚地解释了自动旋转

答案 6 :(得分:0)

试试这个,我们遇到了同样的问题。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    BOOL returningValue=NO;

    if (interfaceOrientation==UIInterfaceOrientationIsPortrait(interfaceOrientation))
    {
        returningValue=NO;
    }
    else if(UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        returningValue=YES;
    }

    return returningValue;
}

答案 7 :(得分:0)

在较旧的Xcode版本中,您只需要转到.xib文件,选择带有Portrait的箭头框,然后将其更改为Landscape,然后在.m文件中执行:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return interfaceOrientation==UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight;
 }

答案 8 :(得分:0)

检查帖子 Launching application in landscape orientation for IPad
从那里引用jhhl:

  如果有的话,

在info.plist中设置初始界面方向将被忽略   支持的界面方向在第一个插槽中设置了另一个方向!把你的   那里的初始方向 - 模拟器将正确启动,应用程序

编辑:还有一件事 - 问题可能出在完全不同的地方。您确定您拥有适当的视图控制器层次结构吗?如果控制器没有以正确的方式添加到窗口或其他控制器,则旋转事件和逻辑将不起作用。事实上,我刚刚查看了几个月前写过的应用程序,它有同样的问题 - iPad,必须从横向开始。没有花哨的东西,但在Info.plist中设置方向,附加rootViewController并在旋转方法中设置正确的返回值。

答案 9 :(得分:0)

只需打开您的plist并编辑“支持的界面方向” 并将“横向(左主页按钮)”拖到“纵向(底部主页按钮)”上方的顶部

默认情况下,如果您支持iOS6之前并在iOS6之后的SDK中运行,则首先加载最高值。

答案 10 :(得分:0)

您使用的是iOS 6.0或更高版本吗?然后尝试实现preferredInterfaceOrientationForPresentation方法。

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeLeft;
}

如果您的根视图是UINavigationController,您可能希望将其子类化并在其中实现新的方向方法。

当我想在不同的UIViewController中支持不同的默认方向推送到同一导航控制器时,我有一个像这样的自定义UINavigationControler:

@implementation MyNavigationController

- (BOOL)shouldAutorotate;
{
    return YES;
}

- (NSUInteger) supportedInterfaceOrientations
{
    if ([[self topViewController] respondsToSelector:@selector(supportedInterfaceOrientations)])
        return [[self topViewController] supportedInterfaceOrientations];
    else
        return [super supportedInterfaceOrientations];
}

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation
{
    if ([[self topViewController] respondsToSelector:@selector(preferredInterfaceOrientationForPresentation)])
        return [[self topViewController] preferredInterfaceOrientationForPresentation];
    else
        return [super preferredInterfaceOrientationForPresentation];
}

@end

答案 11 :(得分:0)

rootViewController - 属性已添加到iOS 4中的UIWindow - 类。通常此值在UIApplicationDelegate中设置(在您的情况下可能为AppDelegate.m)。如果rootViewController - 属性不正确,则旋转事件有时无法通过视图层次传递。

如果它已经存在,请尝试self.window.rootViewController = myRootViewController;