我使用故事板构建了一个应用程序,其初始视图控制器连接到许多后续视图控制器,使用交叉溶解segue顺序连接。这些工作一挥。一切正常。但是,我不想被迫使用基本的segue,而是希望有一个自定义的segue,可以将视图控制器内容滑入和移出屏幕,就像推送导航控制器一样,但是,可以左右移动,具体取决于是否一个是在应用程序中前进或后退。
我已将segue设置为custom,并创建并保存了MySegue.h文件。但是,我不知道如何对一个自定义segue进行编码,当我在视图控制器之间移动时,另一个视频控制器会将一个视图控制器从屏幕上滑下来,而另一个则来回滑动。
任何人都可以请我提供编码(应该很容易!),通过滑动屏幕打开和关闭自定义segue从一个视图控制器移动到下一个和后面,所以我不必使用基本Xcode 4.2中提供的交叉溶解或标准翻转?我将非常感激。
答案 0 :(得分:4)
我在这里遇到了同样的问题,但是我使用滑动手势从一个视图控制器转到另一个视图控制器。使用故事板本身设置segues工作正常,但是当我需要滑动“返回”前一个视图控制器时,动画从右到左,而不是从左到右。为了解决这个问题,我做了以下几点:
popViewControllerAnimated
方法。答案 1 :(得分:2)
要创建滑动视图控制器的自定义segue,首先要创建一个扩展UIStoryboardSegue的类,然后覆盖执行选择器。我刚刚制作了这样的东西,它也适合你。这是我的代码:
#define kAnimationDuration 0.5
#import "CustomSlideSegue.h"
@implementation CustomSlideSegue
- (void)perform
{
UIViewController *sourceViewController = (UIViewController *) self.sourceViewController;
UIViewController *destinationViewController = (UIViewController *) self.destinationViewController;
[sourceViewController.view addSubview:destinationViewController.view];
[destinationViewController.view setFrame:sourceViewController.view.window.frame];
[destinationViewController.view setBounds:sourceViewController.view.bounds];
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
if ( !self.slideLeft ) {
[UIView animateWithDuration:kAnimationDuration
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[destinationViewController.view setCenter:CGPointMake(screenSize.height + screenSize.height/2, screenSize.height/2 - 138)];
[destinationViewController.view setCenter:CGPointMake(screenSize.width/2 + 127, screenSize.height/2 - 138)];
}
completion:^(BOOL finished){
[destinationViewController.view removeFromSuperview];
[sourceViewController presentViewController:destinationViewController animated:NO completion:nil];
}];
} else {
[UIView animateWithDuration:kAnimationDuration
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[destinationViewController.view setCenter:CGPointMake(-1*screenSize.height/2, screenSize.height/2 - 138)];
[destinationViewController.view setCenter:CGPointMake(screenSize.width/2 + 127, screenSize.height/2 - 138)];
}
completion:^(BOOL finished){
[destinationViewController.view removeFromSuperview];
[sourceViewController presentViewController:destinationViewController animated:NO completion:nil];
}];
}
}
然后当你想执行segue时使用这段代码:
UIViewController *destination = [self.storyboard instantiateViewControllerWithIdentifier:@"some identifier"];
CustomZoomSegue *segue = [[CustomZoomSegue alloc] initWithIdentifier:@"segue vc identifier" source:self destination:destination];
[self prepareForSegue:segue sender:self];
[segue perform];
CGPointMake调用是我自己的代码(我使用横向),但您应该能够根据自己的需要进行更改。如果您需要进一步澄清或有任何问题让我知道,我会尽力回答。
注意:我在视图控制器之间使用没有segue线的故事板。
答案 2 :(得分:0)
为什么不使用UINavigationController
?这似乎正是它们的设计目标。