繁体   English   中英

iOS-旋转时视图无法在iPad中正确加载

[英]iOS - View not loading properly in iPad when rotating

我创建了一个带有旋转支持的简单iPad应用程序。 它有两个视图控制器 First View Controller作为AppDelegate rootViewController自动加载。 它上面有一个按钮,单击该按钮rootViewController AppDelegaterootViewController更改为Second View Controller Second View Controller有一个按钮,可将rootViewController设置回First View Controller 可以在人像模式下完美工作。 但是,当我将模拟器旋转到横向模式,然后单击“ First View Controller上的按钮以加载Second View Controller ,它将首先根据设备显示Second View 未旋转 ,然后将显示旋转到正常状态(完成动画后的横向)。 怎么了? AppDelegate用于设置View Controllers的方法如下:

(void)loadSecondView 
{
    SecondView *secondViewController = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.window cache:YES ];    
    self.window.rootViewController = secondViewController;
    [UIView commitAnimations];     
}


(void) removeSecondView 
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES ];
    self.window.rootViewController = self.firstViewController;
    [UIView commitAnimations];    
}

基本上,您是将两个操作包装在动画块中。

  1. 将新的视图控制器作为根视图
  2. 在卷曲动画中显示该视图

结果,您在动画期间看到了两个操作。

  1. 新视图将添加到窗口中,并根据设备的方向旋转
  2. curl动画使新视图可见

您可以通过应用以下更改来解决此问题:

- (void)loadSecondView {
    SecondView *secondview = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
    self.window.rootViewController = secondview;
    self.window.rootViewController.view.hidden = YES;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.window cache:YES ];    
    self.window.rootViewController.view.hidden = NO;
    [UIView commitAnimations];
}

- (void)removeSecondView {
    self.window.rootViewController = self.viewController;
    self.window.rootViewController.view.hidden = YES;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES ];
    self.window.rootViewController.view.hidden = NO;
    [UIView commitAnimations];
}

基本上,我们添加的视图没有任何动画效果,对于过渡动画,我们使用视图的hidden属性。

HTH。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM