如何延迟2个动画?

时间:2012-05-24 10:32:04

标签: ios objective-c

我正在解雇一个模态视图控制器,然后立即呈现另一个模态视图控制器,但我目前无法在它们两个上使用动画,只有第二个。

是否有延迟过程以便用户体验两种动画?

下面的代码目前有效,但用户只能看到第二个动画:

// First one configure
detailViewController.modalPresentationStyle = UIModalPresentationFullScreen;
detailViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
[self presentModalViewController:detailViewController animated:YES];

//Dismiss first one
[self dismissModalViewControllerAnimated:NO]; 

//Immediately configure and show second one
navController.modalPresentationStyle = UIModalPresentationFormSheet;
navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navController animated:YES];

4 个答案:

答案 0 :(得分:9)

现在的模态视图控制器中现在有一个完整块。见LINK。这在iOS5.0 +中可用。

这样做的好处是,如果您使用定时器解决方案,则无需估计定时器延迟。

只需将第二个动画的代码放入块中:

//Block safe reference to self to prevent retain cycles
__block typeof (self) selfReference = self;

// First one configure
detailViewController.modalPresentationStyle = UIModalPresentationFullScreen;
detailViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
[self presentModalViewController:detailViewController animated:YES completion:
^{
    //Dismiss first one
    [selfReference dismissModalViewControllerAnimated:NO]; 

    //Immediately configure and show second one
    navController.modalPresentationStyle = UIModalPresentationFormSheet;
    navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [selfReference presentModalViewController:navController animated:YES];
 }];

答案 1 :(得分:1)

创建一个执行以下操作的选择器:

- (void)showSecondModalVC {
  //Dismiss first one
  [self dismissModalViewControllerAnimated:NO]; 

  //Immediately configure and show second one
  navController.modalPresentationStyle = UIModalPresentationFormSheet;
  navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  [self presentModalViewController:navController animated:YES];
}

然后在主要代码中:

// First one configure
detailViewController.modalPresentationStyle = UIModalPresentationFullScreen;
detailViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
[self presentModalViewController:detailViewController animated:YES];

[self performSelector:@selector(showSecondModalVC) 
         withObject:nil 
         afterDelay:0.5f];

你必须仔细观察,看看第一个模态显示需要多少才能使动画看起来很好。

答案 2 :(得分:1)

你可以用其他风格来做。

detailViewController.modalPresentationStyle = UIModalPresentationFullScreen;
detailViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
[self presentModalViewController:detailViewController animated:YES];

[self dismissModalViewControllerAnimated:NO]; 

[self performSelector:@selector(someFunction) withObject:nil afterDelay:1.0];

- (void) someFunction{
//Immediately configure and show second one
navController.modalPresentationStyle = UIModalPresentationFormSheet;
navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navController animated:YES];

}

答案 3 :(得分:1)

试试这个:

// First one configure
detailViewController.modalPresentationStyle = UIModalPresentationFullScreen;
detailViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
[self presentModalViewController:detailViewController animated:YES];

//Dismiss first one
[self dismissModalViewControllerAnimated:NO]; 
NSTimer Timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(openSecondView) userInfo:nil repeats:NO];


-(void)openSecondView
{
    //Immediately configure and show second one
    navController.modalPresentationStyle = UIModalPresentationFormSheet;
    navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:navController animated:YES];
}

快乐编码......