我正在使用ECSliding,我遇到了这个问题!
在我的项目中有以下文件:
InitViewController(ECSlidingController)
FirstViewController(UIViewController)
SecondViewController(UIViewController)
LeftMenuViewController(UIViewController)
我使用InitView将我的FirstView作为topview进行实例化。
在我的FirstView中有一个按钮,按下时将SecondView设置为topview。
是否可以为更改的顶视图设置动画,就像我正在打开一个新视图一样? 或者我如何打开像第一个一样使用ECSliding的新视图?
我正在使用此代码更改topview:
self.slidingViewController.topViewController = second;
[self.slidingViewController resetTopView];
我想要的动画可以是默认动画,例如:
[self presentViewController:(*UIViewController) animated:YES completion:nil];
答案 0 :(得分:3)
子类ECSlidingViewController。我调用我的子类DeckController:
在DeckController.h中:
- (void)setTopViewController:(UIViewController *)topViewController withTransition:(CATransition*)transition;
在DeckController.m中:
- (void)setTopViewController:(UIViewController *)topViewController withTransition:(CATransition*)transition {
self.topViewController = topViewController;
[UIView animateWithDuration:0.25f animations:^() {
[[self.view layer] addAnimation:transition forKey:@"topViewTransition"];
}];
}
然后在想要切换到新顶视图的视图控制器中,执行以下操作:
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[animation setFillMode:kCAFillModeBoth];
[animation setDuration:.25];
DeckController *deck = (DeckController*)self.slidingViewController;
[deck setTopViewController:newTopViewController withTransition:animation];
答案 1 :(得分:0)
可能你最好的选择是使用滑动视图控制器的动画方法。在屏幕顶部视图中设置动画,在完成模块中更改顶视图控制器(至第二个),然后启动新动画以将顶视图设置为屏幕上的动画。
[self.slidingViewController anchorTopViewOffScreenTo:...
animations:...
onComplete:^{
self.slidingViewController.topViewController = second;
[self.slidingViewController resetTopView];
}];
答案 2 :(得分:0)
我只是使用与我在左侧菜单中单击菜单项时相同的操作。
[self.anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
CGRect frame = self.topViewController.view.frame;
self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondVC"];
self.topViewController.view.frame = frame;
[self resetTopView];
}];
简单概括一下,你可以到处调用它。它独自完成动画。 你可以像@Alex一样,但如果你不需要做一些自定义动画,这就是你需要的。
NB。在我的例子中,我在initViewController中使用它(其中是 ECSlidingViewController,因此我发送给self
),用于强制用户访问特定的viewController。如果您需要更改任何subViewControllers中的视图,您只需发送到self.slidingViewController
,如下例所示:
[self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
CGRect frame = self.slidingViewController.topViewController.view.frame;
self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondVC"];
self.slidingViewController.topViewController.view.frame = frame;
[self.slidingViewController resetTopView];
}];
答案 3 :(得分:0)
您可以手动创建动画,然后在末尾设置topViewController
,以便滑动视图控制器处于您期望的状态。
SecondTopViewController *secondTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondTop"];
secondTopViewController.view.frame = self.slidingViewController.view.bounds;
secondTopViewController.view.alpha = 0;
// temporarily add the second top view so that we can animate it in.
[self.slidingViewController.view addSubview:secondTopViewController.view];
[UIView animateWithDuration:0.5 animations:^{
secondTopViewController.view.alpha = 1;
} completion:^(BOOL finished) {
// remove the second top view.
[secondTopViewController.view removeFromSuperview];
// let sliding view controlller take over from here
self.slidingViewController.topViewController = secondTopViewController;
}];
请在此处查看我的工作示例:https://github.com/enriquez/ECSlidingViewController/tree/so-16658539
答案 4 :(得分:0)
@ Michael-Enriquez的答案转换为swift。
let viewController = (self.storyboard?.instantiateViewControllerWithIdentifier("ViewController"))! as? ViewController
let navController = UINavigationController(rootViewController: viewController!)
navController.view.frame = self.slidingViewController().view.bounds
navController.view.alpha = 0
self.slidingViewController().view.addSubview(navController.view)
UIView.animateWithDuration(0.25, animations: {
navController.view.alpha = 1
}, completion: {(finished:Bool) -> Void in
navController.view.removeFromSuperview()
self.slidingViewController().topViewController = navController
})