4

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

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

我需要做些什么来强制代码尊重这个值吗?我对 iOS/Objective-C 比较陌生。代码编译并运行,只是界面没有做我想要的。

因为这是一个仅限 iPad 的应用程序,所以要容易一些。

编辑 我尝试将以下代码添加到我的一个有问题的视图控制器中,但它没有被兑现。关于如何将这种观点强制为景观的任何想法?(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;
}
4

12 回答 12

7

我希望这能帮到您。AppDelegate.m在类中添加其中一个(您想要的方向)方法

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

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

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

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait;
}
于 2013-05-07T14:19:47.603 回答
3

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

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

于 2013-04-18T18:05:16.903 回答
1

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

于 2013-05-07T16:19:47.573 回答
0

rootViewController-property 被添加到 iOS 4 中的-class 中。UIWindow通常这个值设置在UIApplicationDelegate(在你的情况下可能AppDelegate.m)。如果rootViewController-property 不正确,则旋转事件有时无法通过视图层次结构正确传递。

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

于 2013-05-08T12:24:31.193 回答
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
于 2013-05-08T11:42:40.560 回答
0

Click on your Project file in Xcode. Then click on 'Targets'. Choose you orientation (Scroll down!) Make sure in IB that the View (Under inspector) is set to portrait.

于 2013-04-18T18:06:15.167 回答
0

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

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

于 2013-05-08T09:24:38.157 回答
0

在较旧的 Xcode 版本中,您所要做的就是转到 .xib 文件,选择带有“Portrait”箭头的框,然后将其更改为“Landscape”,然后在 .m 文件中执行以下操作:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return interfaceOrientation==UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight;
 }
于 2013-05-07T14:56:25.010 回答
0

以横向模式启动

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

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

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

并以横向模式布置您的视图。

根据Apple 的开发者文档

于 2013-05-02T18:30:11.020 回答
0

试试这个,我们有同样的问题。

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

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

    return returningValue;
}
于 2013-05-07T08:31:03.773 回答
0

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

自动旋转在这篇文章中清楚地解释了iOS中的自动旋转

于 2013-05-06T11:51:30.497 回答
0

从那里检查 iPad 引用 jhhl的横向启动应用程序:

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

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

于 2013-05-08T04:35:13.290 回答