自定义segue无法正常工作

时间:2013-09-10 11:33:24

标签: ios objective-c uiviewcontroller segue

我正在尝试使用自定义转换。我希望从视图控制器1到2进行“覆盖垂直”转换,然后在移动到View Controller 3时再次将View Controller 2(中间的一个)向下滑动。故事板如下所示:

http://i.stack.imgur.com/bJYXI.png

我正在使用与此帖子相关联的教程。并且还使用答案中提供的代码替换了.m代码:

Xcode custom segue - Opposite of Cover Vertical (top to bottom) - COMPLETE NEWBIE

我创建了一个UIViewController的子类,并将其命名为FromTopReplaceSegue。我的.h和.m代码如下所示:

·H

#import <UIKit/UIKit.h>

@interface FromTopReplaceSegue : UIViewController
@property(nonatomic, readonly) id sourceViewController;
@property(nonatomic, readonly) id destinationViewController;

@end

的.m

#import "FromTopReplaceSegue.h"

@interface FromTopReplaceSegue ()

@end

@implementation FromTopReplaceSegue

-(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 setTransform:CGAffineTransformMakeTranslation(0, -sourceViewController.view.frame.size.height)];
    [destinationViewController.view setAlpha:1.0];

    [UIView animateWithDuration:0.75
                          delay:0.0
                        options:UIViewAnimationOptionTransitionFlipFromTop
                     animations:^{
                         [destinationViewController.view setTransform:CGAffineTransformMakeTranslation(0, 0)];
                         [destinationViewController.view setAlpha:1.0];
                     }
                     completion:^(BOOL finished){
                         [destinationViewController.view removeFromSuperview];
                         [sourceViewController presentViewController:destinationViewController animated:NO completion:nil];
                     }];}

@end

当我尝试运行模拟器时,我可以很容易地从Controller View 1到2,但是当我尝试使用自定义segue从Controller视图2移动到3时崩溃。

任何人都可以提供帮助。

提前非常感谢!在这里苦苦挣扎! :)

1 个答案:

答案 0 :(得分:5)

自iOS时代以来已经过去了一段时间,但.h不应该定义seque类的子类而不是viewcontroller吗?喜欢

@interface FromTopReplaceSegue : UIStoryboardSegue

您可以阅读its documentation以了解有关子类化的一些注意事项......