iphone:在旋转可见视图时旋转翻转视图

问题描述:

旋转具有两个视图的视图控制器时,我使用翻转动画进行切换时发生调整大小问题。 如果我执行以下步骤,则会出现问题:iphone:在旋转可见视图时旋转翻转视图

  1. 查看tableview时旋转设备。
  2. 单击信息按钮。
  3. 旋转设备(infoView显示拉伸)。
  4. 点击信息按钮(的tableview出现拉伸)

似乎未添加到上海华视图不会调整大小正确的,因为该设备被旋转时,它是没有的合成视图的一部分。有什么办法让这个视图自动调整大小正确?

下面是一个代码示例

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    //background image 
    backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg-app.png"]]; 
    backgroundImageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight); 
    [self.view addSubview: backgroundImageView]; 
    [backgroundImageView release]; 


    //infoView 
    aboutImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"About.png"]]; 
    aboutImageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight); 

    //tableView 
    self.tableView = [[[UITableView alloc ] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain] autorelease ]; 
    //set the rowHeight once for performance reasons. 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
    self.tableView.rowHeight = 75; 
    self.tableView.backgroundColor = [UIColor clearColor]; 
    self.tableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);      

    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
    self.tableView.autoresizesSubviews = YES; 

    //set the rowHeight once for performance reasons. 
    [self.view addSubview: tableView]; 
    //[tableView release]; 

    [self.view setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];//for resizing on rotation 

    //info button 
    UIButton * infoDarkButtonType = [[UIButton buttonWithType:UIButtonTypeInfoLight] retain]; 
    infoDarkButtonType.frame = CGRectMake(0.0, 0.0, 25.0, 25.0); 
    infoDarkButtonType.backgroundColor = [UIColor clearColor]; 
    [infoDarkButtonType addTarget:self action:@selector(infoAction:) forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *buttonInfo = [[UIBarButtonItem alloc] initWithCustomView:infoDarkButtonType]; 
    self.navigationItem.rightBarButtonItem = buttonInfo; 
    [infoDarkButtonType release]; 
    self.navigationItem.rightBarButtonItem = buttonInfo; 
    [buttonInfo release]; 

} 

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return YES; 

} 


- (void)infoAction:(id)sender{ 
    NSLog(@"Clicked on the info button"); 


    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.75];  /* Sub. duration here */ 

    UIView *superview; 
    if ((superview = [tableView superview])) { 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:superview cache:YES]; 
     [tableView removeFromSuperview]; 
     [superview addSubview:aboutImageView]; 
    } else if ((superview = [aboutImageView superview])) { 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:superview cache:YES]; 
     [aboutImageView removeFromSuperview]; 
     [superview addSubview:tableView]; 
    } 

    [UIView commitAnimations]; 
} 

感谢

尝试把代码viewWillAppear中:动画。每次您的视图出现时都会调用它。视图确实加载被调用一次。

+0

- (void)viewWillAppear:(BOOL)animated 每个视图都会继承它。 – JoePasq

+0

你指的是什么代码? –

+0

与放置在viewDidLoad方法中的视图图形和自动调整大小相关的代码。 – JoePasq