【问题标题】:How to do a view controller transition where the selected view stays in place and fades out如何在所选视图保持原位并淡出的情况下进行视图控制器转换
【发布时间】:2014-08-07 13:17:02
【问题描述】:
我有兴趣做一个转换,它是一个标准的推送转换,但 fromViewController 将在 toViewController 滑动到位时将选定的 UIView 保留在 toViewController 的顶部。我试图在下面模拟这个。
左边的方框代表UIViews和第三个(棕色的_是被点击的那个。在中间的图中,fromViewController向左滑动(当toViewController滑入时,被选中的UIView保持不变)到位并有一个淡出它的动画。
我对自定义过渡不太熟悉,但我认为这就是它的完成方式。可能在 Container View Controller 的上下文中,但老实说,不太确定。关于如何实现这种效果的任何想法?我希望当用户点击“返回”按钮时,也可以反向运行效果。
【问题讨论】:
标签:
ios
ios7
uikit-transitions
【解决方案1】:
这很容易实现。首先,创建一个自定义容器控制器。您需要类似导航控制器的控制器堆栈吗?如果是,实施将相当复杂。无论如何,它看起来像这样:
- (void)showViewController:(UIViewController *)viewController
selectedView:(UIView *)selectedView
{
// Tell prev. controller about pending removing
[_currentController willMoveToParentViewController:nil];
// Add the next controller
[self addChildViewController:viewController];
// Move selected view to the Containers view
[self.view addSubview:selectedView];
// Add toView below fromView
[self.view insertSubview:viewController.view
belowSubview:_currentController.view];
// Animate whatever you need
[UIView animateWithDuration:0.25
animations:^
{
// Move from view
CGPoint fromViewCenter = viewController.view.center;
fromViewCenter.x = -0.5 * viewController.view.frame.size.width;
viewController.view.center = fromViewCenter;
// Fade out the selected view
selectedView.alpha = 0;
}
completion:^
{
// Clean
[_currentController.view removeFromSuperview];
// Finally remove prev. controller from the hierarchy
[_currentController removeFromParentViewController];
// Notify
[viewController didMoveToParentViewController:self];
}];
}
希望你自己能做到逆转。