如何进行视图控制器转换,其中所选视图保持原位并淡出
我感兴趣的是进行标准推送转换的转换,但是当toViewController滑入到位时,fromViewController会将选定的UIView保留在toViewController的顶部。我试着在下面嘲笑这个。
左侧的方框代表UIViews,第三个方框(褐色的one_是被点击的方框。在中间的图中,fromViewController向左滑动(当toViewController滑入时前夕。选定的UIView保持不变在适当的位置,并有一个淡出它的动画。
我对自定义转换并不熟悉,但我认为这是如何完成的。可能在容器视图控制器的上下文中,但是,不是那么肯定。关于如何实现这种效果的任何想法?我希望当用户点击“后退”时,也可以反向运行效果。按钮。
事先提前答案 0 :(得分:0)
实施起来非常容易。首先,创建一个自定义容器控制器。你需要类似导航控制器的控制器堆栈吗?如果是,实施将变得更加复杂。无论如何,它看起来像这样:
- (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];
}];
}
希望你能自己扭转局面。