2012-08-01 48 views
0

我尝试学习如何执行自定义塞格斯这样我就可以有一个游戏菜单,当我在网上搜索,就好像你必须做出一个自定义的SEGUE类,并覆盖-(void) perform并在这方法,你必须指定一个组成目标vc和源vc。并建立它的位置和东西。这是我在互联网上看到的代码之一。目标vc和源vc有什么区别?

@implementation FromTopReplaceSegue 
-(void)perform{ 
    UIViewController *dst = [self destinationViewController]; 
    UIViewController *src = [self sourceViewController]; 
    [dst viewWillAppear:NO]; 
    [dst viewDidAppear:NO]; 


    [src.view addSubview:dst.view]; 

    CGRect original = dst.view.frame; 

    dst.view.frame = CGRectMake(dst.view.frame.origin.x, 0-dst.view.frame.size.height, dst.view.frame.size.width, dst.view.frame.size.height); 

    [UIView beginAnimations:nil context:nil]; 
    dst.view.frame = CGRectMake(original.origin.x, original.origin.y, original.size.height, original.size.width); 
    [UIView commitAnimations]; 

    [self performSelector:@selector(animationDone:) withObject:dst afterDelay:0.2f]; 
} 
- (void)animationDone:(id)vc{ 
    UIViewController *dst = (UIViewController*)vc; 
    UINavigationController *nav = [[self sourceViewController] navigationController]; 
    [nav popViewControllerAnimated:NO]; 
    [nav pushViewController:dst animated:NO]; 

} 
@end 

我想这应该是一个从顶端出现下降或什么的segue。但我有几个问题,如什么是一个源和目标vc,并在代码所说的部分dst.view.fram=CGRectMake(dst.view.frame.origin.x, 0-dst.view.frame.size.height,

什么是在那里,0,不应该是dst.view.frame.origin.y

好吧,无论如何,我把它连接起来,并从一个按钮创建了一个push segue,但是当我这样做的时候,segue只是从屏幕的顶部向下约3/4,而底部1/4显示我的根视图底部。还有当我试图在程序崩溃后在我的新vc上按下按钮时。

任何信息将帮助请!

回答

1

这是那些没有完全解释它看起来像的东西之一。从你的代码判断,它看起来像“源视图控制器”是根视图控制器(或父视图控制器),“目标视图控制器”是DetailViewController(或子视图控制器)。

不知道这是否让您更困惑。无论如何,父/根视图控制器是主视图控制器,它处理子视图控制器的显示。我觉得有趣的是创作者将另一个阶级的观点分类,而不是呈现出来。

现在0 - self.view.frame.size.height = -320在y轴上。把你的主要观点看作一张纸,并把儿童视为第二张纸。想象一下,将两张纸放在另一张上面(不在上面)。屏幕将只显示底部纸,直到您将“上面的纸”制作为动画为止。基本上,他计划从动画顶部而非底部(我想我回答我自己的好奇心。)

+0

非常有帮助谢谢! – bmende 2012-08-01 23:19:51