UIStoryboardSegue中的自定义内容动画

时间:2014-12-03 22:17:12

标签: ios objective-c

我一直在编写一个迷你框架,用于动画iOS中的自定义segues。它在iOS 7中运行良好,但是一旦我开始在iOS 8中进行测试,一切都会失败。

我这样做的原因是我想要为视图的内容设置动画,而不是框架。到目前为止,我认为我看到的所有segue动画都为框架设置了动画,如翻转,卷曲等等。相反,我想在视图中设置约束的动画。也就是说,按钮向上,向下,向左等等。

我是通过创建一个自定义segue类HySegue来实现的,该类轮询视图控制器以呈现和解除动画,如果它们符合给定的协议。到目前为止一切都很好。

我现在需要运行动画,但问题出在哪里。这就是我正在做的事情:

    UIView * sourceView = sourceViewController.view;
    UIView * destinationView = viewControllerToPresent.view;

    // Force the source view to layout
    [sourceView addSubview:destinationView];
    [sourceView layoutIfNeeded];

所以我的想法是将目标视图添加为源视图的子视图,运行动画,还原以前的更改,最后显示目标视图控制器。这是:

    UIViewController * parentViewController = viewControllerToDismiss.parentViewController;
    UIView * destinationView = destinationViewController.view;

    // Break the view hierarchy that was setup earlier
    [destinationView removeFromSuperview];

    // When presenting in a UINavigationController stack, push the destination view controller
    if ([parentViewController isKindOfClass:[UINavigationController class]]) {

        [(UINavigationController *)parentViewController pushViewController:destinationViewController
                                                                  animated:NO];
    }

    // Otherwise use the standard method
    else {

        // Present the destination view controller
        [viewControllerToDismiss presentViewController:destinationViewController
                                              animated:NO
                                            completion:nil];

        [viewControllerToDismiss willMoveToParentViewController:nil];
        [viewControllerToDismiss.view removeFromSuperview];
        [viewControllerToDismiss removeFromParentViewController];
        [viewControllerToDismiss didMoveToParentViewController:nil];
    }

同样,这在iOS 7中运行良好,但在iOS 8中我得到:

Unbalanced calls to begin/end appearance transitions for <HyRegistrationNavigationController: 0x7bf540c0>

所以看来我正在尝试在前一个完成显示之前显示一个视图控制器。我怎么解决这个问题?理想情况下,会有第三个视图和视图控制器,它将作为转换的容器,但我可以没有它。

0 个答案:

没有答案