用动画替换root-view-controller自定义segue?

时间:2015-05-20 18:02:44

标签: ios objective-c storyboard segue uistoryboardsegue

我有一个自定义UIStoryboardSegue子类,它只是用目标VC替换根视图控制器。完全按照我的意愿工作......但是,我希望能够添加过渡动画,我找不到在更换根VC的情况下如何做到这一点的任何好例子。

我班级的-perform选择器是:

-(void)perform {
    UIViewController *source = (UIViewController *)self.sourceViewController;
    source.view.window.rootViewController = self.destinationViewController;
}

...如何添加一个漂亮的动画过渡?

1 个答案:

答案 0 :(得分:4)

你可以通过多种方式添加一个好的动画"。下面是一种卡片随机播放动画的示例,其中一个视图向上和向左移动,而另一个向下和向右移动,然后在更改两个视图的z顺序后反转。此实现将目标控制器的视图插入到源控制器视图下的窗口视图层次结构中。

 -(void)perform {
    CGFloat dur = 1.0;
    UIView *destView = [self.destinationViewController view];
    UIView *srcView = [self.sourceViewController view];
    CGFloat viewWidth = srcView.frame.size.width;
    CGPoint center = srcView.center;
    AppDelegate *appDel = [[UIApplication sharedApplication] delegate];
    destView.frame = srcView.bounds;
    [appDel.window insertSubview:destView belowSubview:srcView];

    [UIView animateWithDuration:dur animations:^{
        srcView.frame = CGRectOffset(srcView.frame, -viewWidth/1.9, -20);
        destView.frame = CGRectOffset(destView.frame, viewWidth/1.9, 20); 
    } completion:^(BOOL finished) {
        [appDel.window bringSubviewToFront:destView];
        [UIView animateWithDuration:dur animations:^{
            destView.center = center;
            srcView.center = center;
        } completion:^(BOOL finished) {
            [srcView removeFromSuperview];
            appDel.window.rootViewController = self.destinationViewController;
        }];
    }];
}