如何在 tableview 中为图像设置动画以同时扩展和打开另一个视图控制器?
Posted
技术标签:
【中文标题】如何在 tableview 中为图像设置动画以同时扩展和打开另一个视图控制器?【英文标题】:How to animate image in tableview to extend and open another view controller simultaneously? 【发布时间】:2014-04-04 09:16:32 【问题描述】:我正在制作一个信使应用程序,我希望用户点击我的表格视图中的图像,它应该扩展到全屏并在导航栏上显示不同的控件。
我该怎么做?
我想我可以拍摄相同的图像,将 UIImageView 放在原始单元格图像之上并将其动画化为全屏。但是如何才能呈现不同的控制器而不会出现闪烁、延迟和动画呢?
这在许多消息传递应用程序中完成。
【问题讨论】:
【参考方案1】:使用自定义过渡,将图像视图从初始预览大小扩展到全屏。当被调用时,从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 那样),可以使用类似的方法来执行自定义推送动画。
您可以以类似的方式执行关闭/弹出动画,或使用默认的系统动画。
阅读here 了解 ios7 中的自定义视图控制器转换。
【讨论】:
以上是关于如何在 tableview 中为图像设置动画以同时扩展和打开另一个视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Apple WatchKit 中为循环进度设置动画?
如何在 SliverAppBar 中为项目的位置设置动画以在关闭时围绕标题移动它们
如何使用情节提要在 Tableview Cell 中为 2 个标签和一个图像视图设置约束?