2012-12-13 38 views
0

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

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

恕我直言,一个人不应该,除非这样做的视图控制器围堵做'addSubview'。我会设置'UIModalTransitionStyleFlipHorizo​​ntal'的'modalTransitionStyle';然后用''presentViewController''替换'addSubview'行(http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/ instm/UIViewController中/ presentViewController:动画:完成:)。当你想要返回时,孩子会做'dismissViewControllerAnimated'。 – Rob

+0

我改变了喜欢你的说法,现在它将动画制作成黑屏! –

+0

@JonErickson看到我的答案在下面,看看是否可以帮助你 – Eric

回答

1

我同意你应该这样做,而不是仅仅添加一个子视图。在你的示例代码中,你动画两次,因为presentviewcontroller方法已经自己动画了。尝试删除其他动画代码如下:

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

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

是的,我已经得到它的工作方式。谢谢。 –

0

我建议干脆:

- (void)viewDidAppear:(BOOL)animated { 

    if (masterView.parserURL == nil) { 

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

     login.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

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

注意,还有的登录屏幕应该如何更新masterViewparserURL场一个有趣的问题。您可能会将属性添加到您的登录控制器,这是一个指向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