如何将视图初始化为界面方向?

时间:2010-08-13 05:40:21

标签: iphone interface orientation autorotate

问题是我正在启动应用程序内电子邮件并触发键盘(通过UITextFields),他们正在我的横向应用程序上出现肖像。我可以将其旋转为纵向,然后再次将其旋转,观察应用程序从纵向旋转到横向时发生的黑色旋转角落动画。由于我已经在我的shouldAutorotateToInterfaceOrientation()方法中锁定了任何方向但风景正确,因此视图本身不会旋转,这很好。但是,当我添加这些视图时,应用程序一直认为它们是纵向的,这可以通过UITextField键盘和应用程序内电子邮件方向来证明,除非我旋转为纵向,然后返回横向(这会触发自动旋转方法返回true。

当我添加视图时,有关如何让这个应用知道的任何建议都知道它已经开始了吗?

更新:我曾尝试设置状态栏方向,但它对我不起作用。我不知道是否有一些事实,我删除然后添加视图到应用程序,这混淆了它对方向的理解。你知道苹果对象如UITextField和应用程序内邮件如何确定要显示的方向?他们只是简单地轮询sharedApplication方向吗?对我来说奇怪的是,似乎当我删除并添加新视图时,这些苹果小部件我已经倾斜手机以改变为风景突然恢复显示为肖像。即这一般事件序列:

1)应用程序在横向,触发键盘,它显示肖像

2)倾斜装置使其进入风景。关闭并打开键盘,它在风景中。

3)删除并添加一些视图。

4)再次触发键盘,它以纵向显示

5 个答案:

答案 0 :(得分:1)

[UIApplication setStatusBarOrientation:animated:]应该可以提供你想要的东西。

答案 1 :(得分:1)

在Project plist中设置Initial interface orientation字段

答案 2 :(得分:0)

有趣的是,我发现在发布时设置状态栏方向是不够的。看着字段值,我注意到它在不同时间重置为肖像,例如从取消应用内邮件返回时。我发现多次调用设置状态栏似乎可以解决问题。感谢输入,mbehan。

答案 3 :(得分:0)

删除/添加视图不应更改状态栏方向;据我所知,除非你明确地设置它,否则默认为视图控制器的方向(然后你必须小心,因为视图控制器重置它)。您可以尝试使用UIStatusBarStyleBlackTranslucent并在VC上设置UIViewController.wantsFullScreenLayout以查看正在发生的事情。

(过去,我注意到当我直接在窗口上添加一个视图时,它会变得混乱。在一个只有纵向视图的顶部。它似乎适用于所有其他情况但是......)

您对shouldAutorotateToInterfaceOrientation的实施是什么:?

答案 4 :(得分:0)

试试这个:

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

//Rotate the complete view to look like landscape view
    [self rotateToLandscape];
}

和旋转方法;

-(void)rotateToLandscape
{
    UIWindow *win = [[UIApplication sharedApplication]keyWindow];
if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){
    [[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor blackColor]];
    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    win.transform = CGAffineTransformIdentity;
    win.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    win.bounds = CGRectMake(0.0f, 0.0f, 480, 320);
    win.center = CGPointMake(160.0f, 240.0f);
    [UIView commitAnimations];
}   

}