7

我正在尝试使用UIViewController'transitionFromViewController:toViewController:duration 方法,但使用自定义动画。

我将以下两个视图控制器作为子级添加到自定义容器 UIViewController:

  1. firstController - 这是 UITabBarController 的一个实例
  2. secondController - 这是 UIViewController 的子类

以下代码按预期工作:

[self transitionFromViewController:firstController
                  toViewController:secondController 
                          duration:2                                         
                           options:UIViewAnimationOptionTransitionFlipFromLeft  
                        animations:^(void){} 
                        completion:^(BOOL finished){}];

但是,我想创建一个自定义动画,其中 wherefirstController向左滑动并被secondController从右侧滑入取代,类似于 UINavigationControllers push 和 pop 方法的工作方式。更改为之后optionsUIViewAnimationOptionTransitionNone我尝试在animations块中实现自定义动画,但绝对没有成功。 firstController立即换成secondController无和动画。

我真的很感激任何帮助。

谢谢

4

1 回答 1

15

这实际上很容易。出于某种原因,我认为secondController's 的观点会低于/落后于 's 的观点firstController。我只是试图为firstController' 的视图设置动画。这当然是错误的。一旦transitionFromViewController:toViewController:duration被称为secondController的视图被放置在firstController的视图之上。以下代码有效:

CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height;

secondController.view.frame = CGRectMake(width, 0, width, height);

[self transitionFromViewController:firstController
    toViewController:secondController
    duration:0.4
    options:UIViewAnimationOptionTransitionNone
    animations:^(void) {
        firstController.view.frame = CGRectMake(0 - width, 0, width, height);
        secondController.view.frame = CGRectMake(0, 0, width, height);
    } 
    completion:^(BOOL finished){
        [secondController didMoveToParentViewController:self]; 
    }
];
于 2012-08-19T09:28:14.723 回答