在仅纵向应用程序中以横向模式添加子视图
Posted
技术标签:
【中文标题】在仅纵向应用程序中以横向模式添加子视图【英文标题】:Add SubView in Landscape mode in Portrait only app 【发布时间】:2013-03-19 13:00:51 【问题描述】:我的应用是仅纵向应用。我需要在横向模式下添加一个子视图。对于要添加的新视图,我在 ios 6 中设置了以下方向。
-(NSUInteger)supportedInterfaceOrientations
NSUInteger options = UIInterfaceOrientationMaskAll;
if (self.inAppBrowserOrientation)
if (self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeLeft || self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeRight)
options = UIInterfaceOrientationMaskLandscape;
return options;
视图将以纵向模式添加。在定向时,此视图将仅在横向模式下旋转,这是预期的。
第一次添加视图时,为什么要在纵向模式下添加?而self.inAppBrowserOrientation
是UIInterfaceOrientationLandscapeRight
。
【问题讨论】:
用 else 部分也试试。写 return UIInterfaceOrientationMaskLandscape;在其他部分也。 【参考方案1】:- (void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(270));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
[[self navigationController].view setTransform:landscapeTransform];
self.navigationController.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
self.navigationController.navigationBar.frame = CGRectMake(0.0, 20.0, 480, 44.0);
-(void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(0));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
[[self navigationController].view setTransform:landscapeTransform];
self.navigationController.view.bounds = CGRectMake(0.0, 0.0, 320, 480);
self.navigationController.navigationBar.frame = CGRectMake(0.0, 20.0, 320.0, 44.0);
这里,默认方向是纵向,但是当编译器转到 viewDidAppear 时,它将旋转 270 度,因此处于横向模式.. 相应地调整帧大小...
祝你好运!!
【讨论】:
【参考方案2】:试试下面的sn-p
-(NSUInteger)supportedInterfaceOrientations
NSUInteger options = UIInterfaceOrientationMaskAll;
if (self.inAppBrowserOrientation)
if (self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeLeft || self.inAppBrowserOrientation == UIInterfaceOrientationLandscapeRight)
options = UIInterfaceOrientationMaskLandscape;
return options;
else
return UIInterfaceOrientationMaskLandscape;
我不确定,但可能在您第一次加载 aqpp 时会出现问题
享受编程!
【讨论】:
仍将视图添加为纵向。由于self.inAppBrowserOrientation是UIInterfaceOrientationLandscapeRight,所以每次只会返回UIInterfaceOrientationMaskLandscape。 你检查调试点了吗?第一次加载视图时,在 viewWillAppear 之后,supportedInterfaceOrientations 会发生什么? po self.inAppBrowserOrientation $0 = UIInterfaceOrientationLandscapeRight [没有可用的 Objective-C 描述] 尝试添加这一行 [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];在视图的 viewDidLoad 方法中,如果完成,则将其应用于每个屏幕都支持的方向以上是关于在仅纵向应用程序中以横向模式添加子视图的主要内容,如果未能解决你的问题,请参考以下文章