我有iPhone的应用程序,它已经完成。这仅适用于potrait模式。
客户需要更新说,每当用户浏览照片/观看视频时,他也需要横向模式,这样当他旋转图像或视频时,它将全屏显示。
为此,我勾选了所有四个设备方向。
然后基于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模式。
直到现在这很好。
现在我想做的是,对于某些屏幕,我也想要横向模式。知道我怎么能这样做?
当我隐藏CustomNavigationController中的内容并尝试旋转iPhone时,图像也在旋转。发生这种情况是因为我隐藏了代码“我不允许轮换”return NO
。
那么有什么方法我可以说图像,也允许iPhone进入横向模式?
答案 0 :(得分:3)
当我们谈论方向时,它们是图中的两件事:
仅通过名称清楚,设备方向告知,设备的方向是什么,界面方向说明您的应用在哪个方向呈现其界面。
“客户需要更新说,每当用户浏览照片/观看视频时,他也需要横向模式,以便在旋转图像或视频时,它将全屏显示。”
由此可见,您无需更改应用程序的界面。当设备方向发生变化时,您需要旋转图像。
为此,您应该做的第一件事是,看看这个方法beginGeneratingDeviceOrientationNotifications
写下此信息,以便每次更改设备方向时收到通知 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
现在,在你要显示图像/视频的viewController中,写下这个
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
在deviceOrientationDidChange
方法中,按照设备方向旋转图像
如果需要更多信息,请告诉我..
修改强> 有4种方向可供选择:
正如您所说,您正在使用MPMoviePlayerController
,它支持横向模式。您的代码不应该取决于玩家支持的方向,而不是。你应该以一种它应该支持所有方向的方式编写代码。
因此,正如我之前所说,在deviceOrientationDidChange
方法中,按照设备方向旋转图像。
如果还有一些问题,请告诉我。
编辑2: 首先取消选中所有方向支持(除了肖像一)。现在您不必在代码中更改界面方向。您需要做的是,您必须检测设备方向的变化&amp;像这样旋转图像:
myImage.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2);
我认为你不需要customNavigationController来做到这一点。试试我用默认的NavigationController告诉你的步骤。对于类似的应用程序,它对我来说很好。尝试使用演示应用程序&amp;然后在主应用程序中进行必要的更新。如果你陷入某个地方,请告诉我。 :)