0

我试图学习如何执行自定义转场,这样我就可以有一个游戏菜单,当我在网上搜索时,似乎你必须制作一个自定义转场类,并覆盖-(void) perform,在这种方法中你必须指定一个组成的目的地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 显示了我的底部根视图。而且当我在segue之后尝试按下我的新vc上的按钮时,程序崩溃了。

任何信息都会有所帮助!

4

1 回答 1

1

这是看起来没有完全解释的事情之一。从您的代码来看,看起来“源视图控制器”是根视图控制器(或父视图控制器),而“目标视图控制器”是 DetailViewController(或子视图控制器)。

不知道这是否让你更困惑。无论如何,父/根视图控制器是主视图控制器,它处理子视图控制器的显示。我发现有趣的是,创建者将另一个类的视图子类化而不是呈现它。

现在 0 - self.view.frame.size.height = -320 在 y 轴上。把你的主视图想象成一张纸,把子视图想象成第二张纸。想象一下将两张纸放在另一张上方(而不是在顶部)。屏幕只会显示底部的一张纸,直到您将“上面的纸”动画下来。基本上,他计划从顶部而不是底部制作动画(我想我回答了我自己的好奇心。)

于 2012-08-01T23:08:28.730 回答