对于某些视图控制器,以编程方式允许纵向和横向

时间:2014-01-13 11:13:29

标签: ios objective-c orientation uiinterfaceorientation

我有iPhone的应用程序,它已经完成。这仅适用于potrait模式。

客户需要更新说,每当用户浏览照片/观看视频时,他也需要横向模式,这样当他旋转图像或视频时,它将全屏显示。

为此,我勾选了所有四个设备方向。

enter image description here

然后基于this answer,我制作了自定义导航控制器文件并分配了它。

.h文件

#import <UIKit/UIKit.h>

@interface CustomNavigationController : UINavigationController

@end

.m文件

#import "CustomNavigationController.h"

@interface CustomNavigationController ()

@end


@implementation CustomNavigationController

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

@end

现在当我运行app并旋转到横向时,我仍然只能看到potrait模式。

直到现在这很好

现在我想做的是,对于某些屏幕,我也想要横向模式。知道我怎么能这样做?


编辑2

当我隐藏CustomNavigationController中的内容并尝试旋转iPhone时,图像也在旋转。发生这种情况是因为我隐藏了代码“我不允许轮换”return NO

那么有什么方法我可以说图像,也允许iPhone进入横向模式?

对于照片浏览,我使用https://github.com/mwaterfall/MWPhotoBrowser

1 个答案:

答案 0 :(得分:3)

当我们谈论方向时,它们是图中的两件事:

  1. 设备方向
  2. 界面定位
  3. 仅通过名称清楚,设备方向告知,设备的方向是什么,界面方向说明您的应用在哪个方向呈现其界面。

    “客户需要更新说,每当用户浏览照片/观看视频时,他也需要横向模式,以便在旋转图像或视频时,它将全屏显示。”

    由此可见,您无需更改应用程序的界面。当设备方向发生变化时,您需要旋转图像。

    为此,您应该做的第一件事是,看看这个方法beginGeneratingDeviceOrientationNotifications

    写下此信息,以便每次更改设备方向时收到通知     [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

    现在,在你要显示图像/视频的viewController中,写下这个

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
    

    deviceOrientationDidChange方法中,按照设备方向旋转图像 如果需要更多信息,请告诉我..

    修改 有4种方向可供选择:

    • UIInterfaceOrientationLandscapeLeft
    • UIInterfaceOrientationPortrait
    • UIInterfaceOrientationLandscapeRight&amp;
    • UIInterfaceOrientationPortraitUpsideDown

    正如您所说,您正在使用MPMoviePlayerController,它支持横向模式。您的代码不应该取决于玩家支持的方向,而不是。你应该以一种它应该支持所有方向的方式编写代码。

    因此,正如我之前所说,在deviceOrientationDidChange方法中,按照设备方向旋转图像。

    如果还有一些问题,请告诉我。

    编辑2: 首先取消选中所有方向支持(除了肖像一)。现在您不必在代码中更改界面方向。您需要做的是,您必须检测设备方向的变化&amp;像这样旋转图像:

    myImage.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2);
    

    我认为你不需要customNavigationController来做到这一点。试试我用默认的NavigationController告诉你的步骤。对于类似的应用程序,它对我来说很好。尝试使用演示应用程序&amp;然后在主应用程序中进行必要的更新。如果你陷入某个地方,请告诉我。 :)