如何在tableview中为图像添加动画以同时扩展和打开另一个视图控制器?

时间:2014-04-04 09:16:32

标签: ios ios7 uikit

我正在制作一个信使应用程序,我希望用户点击我的tableview中的图像,它应该扩展到全屏并在导航栏上显示不同的控件。

我该如何解决?

我想我可以拍摄相同的图像,将UIImageView放在原始细胞图像的顶部并将其设置为全屏幕。但是如何在没有闪烁,延迟和动画的情况下展示不同的控制器呢?

这在许多消息传递应用程序中完成。

1 个答案:

答案 0 :(得分:7)

使用自定义转换,将图像视图从初始预览大小扩展到全屏。调用时,从transitioningDelegate返回一个转换委托,后者应从animationControllerForPresentedController:presentingController:sourceController:返回一个动画控制器。此动画控制器将负责在调用presentViewController:animated:completion:时执行的动画。

在动画控制器中,实现并在其中创建动画:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    MyChatViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    [[transitionContext containerView] addSubview:toViewController.view];
    toViewController.view.frame = [transitionContext.containerView convertRect:fromViewController.imageViewToTransitionFrom.frame fromView:fromViewController.imageViewToTransitionFrom];

    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        toViewController.view.frame = [transitionContext finalFrameForViewController:toViewController];
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];
}

此处,MyChatViewController是您的聊天视图控制器,imageViewToTransitionFrom包含您希望转换的图片视图。

如果你需要推动一个视图控制器而不是现在它(就像WhatsApp那样),有类似的方法来执行自定义推送动画。

您可以以类似方式执行解雇/弹出动画,或使用默认系统。

阅读有关iOS7中自定义视图控制器转换的here