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

标签 ios objective-c storyboard segue uistoryboardsegue

我有一个自定义的 UIStoryboardSegue 子类,它只是用目标 VC 替换了 Root View Controller 。完全按照我的意愿工作......但是,我希望能够添加过渡动画,但我找不到任何关于如何在替换根 VC 的上下文中执行此操作的好示例。

我类(class)的 -perform 选择器是这样的:

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

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

最佳答案

您可以通过多种方式添加“漂亮的动画”。这是一种卡片洗牌动画的示例,其中一个 View 向上和向左移动,而另一个 View 向下和向右移动,然后在更改两个 View 的 z 顺序后反转。此实现将目标 Controller 的 View 插入到源 Controller View 下的窗口 View 层次结构中。

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

关于ios - 用动画替换 root-view-controller 自定义 segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30357169/

相关文章:

ios - iPhone 键盘尺寸

ios - 框架/libswiftAVFoundation.dylib : valid provisioning profile for this executable was not found

c++ - NSData、NSDictionary、NSArray 等效项 C++

objective-c - 类别访问主类的私有(private)方法 - Objective C

wpf - Storyboard未从 ControlTemplate DataTrigger 执行

ios - RxSwift、MVVM、Alamofire/Moya。使用间隔更新股票代码

ios - 在 UIActivityIndi​​catorView 旋转时禁用所有输入

ios - 如何重复循环 dispatch_after 语句?

ios - 如何以编程方式从 Storyboard 中填充静态 UITableView?

ios - Storyboard - 如何让多个容器嵌入到同一个 View Controller ?