[求教][IOS orientation] IOS-7如何固定单个viewController的方向?

2014-01-19 10:56:37 +08:00
 parkman
app需要支持两个屏幕方向,其中一些controller是固定竖屏,一些是固定横屏,我试了下stackoverflow中的这种方法,
http://stackoverflow.com/questions/12520030/how-to-force-a-uiviewcontroller-to-portait-orientation-in-ios-6

我写了一个sample code 在GitHub上 https://github.com/cseparkman/onlyTest:
分别设置第一个VC(View Controller)仅仅支持LandscapeRight,第二个VC支持Portrait.

问题在于:
1. 第一个VC(View Controller) LandscapeRight。 [没问题]
2. 紧接着点击button进入第二个VC 还是LandscapeRight [有问题] ,然后你尝试着晃动手机。第二个VC 将成为 Portrait。
3. 再紧接着点击返回时, 第一个又是 LandscapeRight


请问大家知不知道如何解决这个问题?
17141 次点击
所在节点    iDev
27 条回复
parkman
2014-01-19 18:26:40 +08:00
@qdvictory 能丢个code 出来看看吗? 我不是很理解你的意思
txx
2014-01-19 18:34:54 +08:00
@parkman 为什么还没截贴呢 就因为我用了私有api么?
parkman
2014-01-19 19:18:39 +08:00
@txx 没有 就是其他人也有说了一些方法,我试了不可行。 就问问什么原理
icyalala
2014-01-19 22:46:40 +08:00
在你的NavigationController里面加几句话:

- (void)viewDidLoad
{
[super viewDidLoad];
self.delegate = self;
}


- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
UIViewController *vc = [[UIViewController alloc] init];
[self presentViewController:vc animated:NO completion:NULL];
[vc dismissViewControllerAnimated:NO completion:NULL];
}

详情见http://stackoverflow.com/questions/15519486/presenting-navigation-controller-in-landscape-mode-is-not-working-ios-6-0

主要是,你一直是在push和pop,rootViewController始终NavigationController。不旋转设备,不会引起auto rotate动作,只能用一些其他奇葩的方法了。

你要用presentViewController,改变了rootViewController,就不会有这些问题了。
ldehai
2014-01-19 23:12:48 +08:00
在CRPortaint类中加上这个来触发方向更新
- (void)viewWillAppear:(BOOL)animated
{
[self presentViewController:[UIViewController new] animated:NO completion:^{ [self dismissViewControllerAnimated:NO completion:nil]; }];
}
ldehai
2014-01-20 07:28:36 +08:00
@parkman 其实这种交互设计不符合苹果的要求。具体到你这个例子,第一个viewController应该所有方向都支持,然后第二个可以固定一个方向。从第二个返回时,方向保持不变。
parkman
2014-01-20 08:29:12 +08:00
@ldehai @cyalala

I see。
必须是modal 出来的 view 才可以变换设备方向。
navigation controller Pop Push的view 是 苹果设计HIG的原则。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/97577

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX