2012-02-08 108 views
0

你好我想提供屏幕方向在我的应用程序,我看了很多网上的文档,但是当我尝试,它只是一个彻头彻尾的灾难(我试过仿真器和iPhone)。在屏幕旋转到一半时,一部分视图不再可见。他们的立场是在左侧和右侧是空的,再加上如果我打开下一个视图控制器,然后再次旋转,我可以通过第一视图的第二视图部分看到它仅仅是可怕的,我不知道如何解决它(不包括阻止锁定肖像方向的可能性)。 我知道在Android中,您可以为纵向和横向提供不同的xml布局。有没有办法让iPhone在iPhone?如果是这样如何?iphone屏幕方向

我的每一个观点

由一个控制器和的.xib 有一个“主”控制器和其他控制器被称为这样的:

ayuda=[[AyudaView alloc] 
       initWithNibName:@"AyudaView" 
       bundle:nil]; 
     [self.view addSubview:ayuda.view]; 

还我已经添加了这些metods到maincontroller :

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
if(UIDeviceOrientationIsValidInterfaceOrientation(orientation)) { 
    [self handleInterfaceRotationForOrientation:orientation]; 
} 

} 
#pragma mark - 
#pragma mark Screen Orientation Handling 
- (void)handleInterfaceRotationForOrientation:(UIInterfaceOrientation)interfaceOrientation { 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
[self handleInterfaceRotationForOrientation:interfaceOrientation]; 
return YES; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
[self handleInterfaceRotationForOrientation:toInterfaceOrientation]; 
} 

指示here ,并试图与自动调整大小参数去发挥,但它只能越来越糟

非常感谢您

编辑:确定我一直在阅读一些:

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

http://www.cocoaosx.com/2011/11/10/rotatingviewcontroller-display-a-different-uiviewcontroller-depending-on-the-rotation-of-the-device/

,基本上我所发现的是,你必须创建2个控制器,但这由于nib文件,解决方案对我来说是有问题的。我的意思是我还必须创建2个笔尖,使代码量增加一倍(或者使用上面的库)。如果我在我的文本字段中有值,我只需要发送它们呢?

+0

你几乎不知道事情应该如何工作,因此如果没有引导你完成整个解决方案,问题是不可能回答的。而堆栈溢出并不意味着要这样工作。我建议你谷歌一些可可界面方向教程,并慢慢通过它,从简单的案件进展到更复杂的。 – zoul 2012-02-08 12:41:33

+0

您是否阅读过与此相关的Apple文档? – 2012-02-08 12:44:40

回答

0

所以,除了提示你没有你的代码中发生了什么任何想法(这可能会或可能不会是真的吗? - 我是谁的判断)的评论,我看到了一些问题。

的第一个问题是,我不认为你理解MVC和iOS如何处理视图层次结构。每个视图都由一个控制器控制,并由一个.xib设计(有些情况下视图不需要自己的控制器,但为了简单起见,我们假定您的视图是这样的),这是正确的。但是,您在屏幕上呈现这些视图的方式不正确。视图的控制器负责在屏幕上显示或删除视图。视图只知道它显示的内容,如标签或按钮。该控制器负责告诉视图什么显示这些标签和按钮。不要将新视图的视图添加为主视图的子视图,而是将其推入导航控制器的堆栈或以模态方式呈现视图。如果您在主VC的时候,你可以说

ayuda = [[AyudaView alloc] initWithNibName:nil bundle:nil]; 
[self presentModalViewController:ayuda animated:YES]; 

我想,让视图层次正确的可能仅仅是足以解决您的横向/纵向交换混乱。但是,当我们谈论那个话题时...为什么你要创建这个handleInterfaceRotation方法?视图控制器已经有一种方法称为

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration; 

使用此方法处理旋转。

+0

非常感谢您的回复!我以错误的方式打电话给我所有的子视图。另一方面,我发现了旋转问题,并且我没有在父视图中保留我的视图,保留它们解决了我的问题 – vallllll 2012-02-08 16:24:15

+0

我仍然会建议不要尝试重新发明轮子并使用willAnimateRotationToInterfaceOrientation方法来处理当发生什么情况时你的观点的方向会改变。 – jmstone617 2012-02-08 18:06:31

+0

会做到这一点非常感谢 – vallllll 2012-02-09 13:05:40