UIViewController和Orientation我正朝着正确的方向前进吗?

时间:2011-02-06 23:00:31

标签: iphone uiview uiviewcontroller

我花了最后几个小时试图让它工作,我不能这样,我需要知道我想要做的是正确的事情。它让我疯了!

我的目标是让ViewController检测方向变化。当它是肖像时,它会显示一个带有UITableView的视图,当它的横向显示一个带有我将以编程方式创建的内容的UIView时。

在我的父视图控制器中,我有:

- (void)viewDidLoad 
{
    [super viewDidLoad];

TableDataViewController *tableDataController = [[TableDataViewController alloc]  
          initWithNibName:@"TableDataViewController"                                                                                
                   bundle:nil];
self.tableDataViewController = tableDataController;
[self.view insertSubview: tableDataController.view atIndex:0];
[tableDataController release];
}

这会加载我的视图,其中包含表视图和随附的控制器。然后用户旋转设备和功能:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toOrientation                                                 
duration:(NSTimeInterval)duration
{
if (toOrientation == UIInterfaceOrientationPortrait) {
    NSLog(@"PerformAnalysisViewController: Gone to Potrait");   
} 

if ((toOrientation == UIInterfaceOrientationLandscapeLeft) || 
    (toOrientation == UIInterfaceOrientationLandscapeRight)) {
    NSLog(@"PerformAnalysisViewController: Gone to Landscape");

           // Load new view here
           CGRect frame = [[UIScreen mainScreen] applicationFrame];
       UIView *horizView = [[[HorizView alloc]
                  initWithFrame:frame] autorelease];
       [self setView:horizView];;   
}
}

将触发依赖。但它不会触发?这是因为控件已经传递给我在viewDidLoad中插入的Subview了吗?如果是这样,我该如何取回它?我是否必须让它检测方向,然后将其从超视图中移除?

如果那样那么工作会不会像我上面那样添加新视图?我曾尝试阅读Apple文档,但我无法完成这项工作。

所有人都非常感谢。

麦克

1 个答案:

答案 0 :(得分:0)

我正在使用willRotateToInterfaceOrientation方法来处理UI旋转:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
   if( interfaceOrientation == UIInterfaceOrientationPortrait || 
       interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ) {
      self.backgroundImageView.image = [UIImage imageNamed:@"vertical.png"];
   }
   else {
      self.backgroundImageView.image = [UIImage imageNamed:@"horizontal.png"];
   }

}

请检查您的Info.plist是否支持多个方向,并且您已通过返回YES实现了shouldAutorotateToInterfaceOrientation:interfaceOrientation。