【问题标题】:iOS - View not loading properly in iPad when rotatingiOS - 旋转时视图无法在 iPad 中正确加载
【发布时间】:2012-05-02 14:48:57
【问题描述】:

我创建了一个支持旋转的简单 iPad 应用程序。它有两个视图控制器First View Controller 自动加载为rootViewControllerAppDelegate。它上面有一个按钮,单击该按钮会将AppDelegaterootViewController 更改为Second View ControllerSecond 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];    
}

【问题讨论】:

    标签: objective-c ios ipad uiviewcontroller


    【解决方案1】:

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

    1. 创建一个新的视图控制器作为根视图
    2. 在 curl 动画中显示该视图

    因此,您会在动画期间看到两个操作。

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

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

    - (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];
    }
    

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

    HTH。

    【讨论】:

    • 非常感谢穆斯塔法。这是有道理的。我已经实施了这个解决方案,它就像一个魅力。谢谢。
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2016-09-19
    相关资源
    最近更新 更多