【问题标题】:iOS UIViewAnimation not workingiOS UIView 动画不起作用
【发布时间】:2012-12-13 19:55:58
【问题描述】:

我有一个主细节应用程序,当细节视图出现并且字符串为空时,我希望它通过UIViewAnimationFlip 呈现一个新视图。动画正在工作,但它不断翻转到自身,而不是我启动的视图控制器。任何帮助都会很棒!

- (void)viewDidAppear:(BOOL)animated {

    if (masterView.parserURL == nil) {

        LoginViewController *login = [[LoginViewController alloc] init];

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.8];
        [UIView setAnimationTransition:UIModalTransitionStyleFlipHorizontal
                               forView:self.view
                                 cache:YES];

        [self.navigationController presentViewController:login 
                                                animated:YES 
                                              completion:nil];

        [UIView commitAnimations];
    }
}

【问题讨论】:

  • 恕我直言,不应该做addSubview 除非做视图控制器遏制。我会设置modalTransitionStyleUIModalTransitionStyleFlipHorizontal;然后用presentViewController 替换addSubview 行。当你想返回时,孩子会做dismissViewControllerAnimated
  • 我改成喜欢你说的,现在动画黑屏了!
  • @JonErickson 在下面查看我的回答,看看是否对您有帮助

标签: ios animation uiview uiviewcontroller viewdidappear


【解决方案1】:

我同意您应该以模态方式执行此操作,而不仅仅是添加子视图。在您的示例代码中,您制作了两次动画,因为 presentviewcontroller 方法已经在为自己制作动画。尝试删除其他动画代码如下:

LoginViewController *login = [[LoginViewController alloc] init];
login.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentViewController:login 
                   animated:YES 
                 completion:nil];

【讨论】:

    【解决方案2】:

    我的建议很简单:

    - (void)viewDidAppear:(BOOL)animated {
    
        if (masterView.parserURL == nil) {
    
            LoginViewController *login = [[LoginViewController alloc] init];
    
            login.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    
            [self presentViewController:login
                               animated:YES
                             completion:nil];
        }
    }
    

    注意,有一个有趣的问题是登录屏幕应该如何更新masterView 中的parserURL 字段。您可以将属性添加到您的登录控制器,它是指向masterView 的指针,以便它具有更新parserURL 的机制。因此它可能是这样的:

    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
    
        if (masterView.parserURL == nil)
        {
            LoginViewController *login = [[LoginViewController alloc] init];
    
            login.masterView = masterView;
    
            login.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    
            [self presentViewController:login
                               animated:YES
                             completion:nil];
        }
    }
    

    然后您的登录控制器现在可以通过以下方式更新 parserURL:

    self.masterView.parserURL = ... // set it as appropriate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多