开发者

Custom Transition Between Navigation Controllers

开发者 https://www.devze.com 2023-02-16 06:15 出处:网络
I want to have a custom transition between two navigation controllers. Let\'s call the first one sourceController and the other one detailNavController.

I want to have a custom transition between two navigation controllers. Let's call the first one sourceController and the other one detailNavController.

Here's my code:

NewEntryViewController *viewController = [[NewEntryViewController alloc] 
                                                                  initWithStyle:UITableViewStyleGrouped];
viewController.parentController = self;

U开发者_JAVA百科INavigationController *detailNavController = [[UINavigationController alloc]
                                                                  initWithRootViewController:viewController];

[UIView beginAnimations:nil context:NULL];
[self.navigationController presentModalViewController:detailNavController animated:NO];

[UIView setAnimationDuration:0.4];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:sourceController.view cache:YES];

[UIView commitAnimations];

SourceController was first presented modally, that's why I'm presenting detailNavController modally. The problem with this code is that the animation takes place, but sourceController is still on top of the new detailNavController. What I would like to achieve is to have the animation and then dismiss sourceController and have detailNavController displayed.


I've finally found the solution for this, here's the updated code:

- (void)createNewEntryWithAnimation
{
    // before calling this method I dismissed sourceController without animation
    NewEntryViewController *viewController = [[NewEntryViewController alloc] initWithStyle:UITableViewStyleGrouped];
    viewController.parentController = self;

    UINavigationController *detailNavController = [[UINavigationController alloc] 
                                                   initWithRootViewController:viewController];

    [UIView beginAnimations:nil context:NULL];
    [self.navigationController presentModalViewController:detailNavController animated:NO];

    [UIView setAnimationDuration:0.4];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:viewController.view.window cache:NO];

    [UIView commitAnimations];
}

I had to use cache:NO, otherwise the transition wasn't smooth.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号