12

到目前为止,我已经查看了每个问题,但似乎没有人真正回答这个问题。

我创建了一个 UITabBarController 并向其中添加了几个视图控制器。大多数视图都是纵向查看的,但应该以横向查看。我不想使用加速度计或检测用户何时旋转设备,我只想在他们从底部的选项卡中选择视图时以横向模式显示视图。

我希望在他们选择该项目时发生常规动画,例如选项卡退出,视图旋转等,而当他们选择不同的视图时发生相反的情况。

是否没有内置属性或方法来告诉系统将视图显示为什么方向?

据我所知,覆盖 shouldautorotate... 方法绝对没有任何作用。

我不喜欢的答案类型是“RTFM”,因为我已经有了,到目前为止,为 iPhone 开发的任何人都知道 F-ing R 几乎没有有用的 M。

4

4 回答 4

9

论坛上的帖子可能会有所帮助简短的回答是,一旦视图被绘制,您必须在 viewWillAppear: 方法中手动旋转视图或控制器

CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0);

[[appDelegate navController].view setTransform:landscapeTransform];
于 2008-12-10T17:34:17.593 回答
9

这是我正在做的事情:

首先,将此定义放在文件顶部,就在您的#imports 下方:

#define degreesToRadian(x) (M_PI * (x) / 180.0)

然后,在 viewWillAppear: 方法中

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}

如果你想让它被动画化,那么你可以将整个东西包装在一个动画块中,如下所示:

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];
于 2009-01-21T04:02:52.250 回答
0

覆盖控制器类中的 Orientation 方法并强制它为 Landscape,如下所示:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    // Overriden to allow any orientation.
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

简单高效!

于 2012-01-13T21:06:20.513 回答
0

shouldAutorotateToInterfaceOrientation 仅在 tabbarcontroller 中的所有视图或 navigationcontroller 中的所有视图控制器都同意旋转时才有效。

于 2012-04-20T15:28:42.450 回答