0

カスタム セグエを実行してゲーム メニューを表示する方法を学習しようとしています。Web で検索すると、カスタム セグエ クラスを作成してオーバーライド-(void) performし、そのメソッドで目的地を指定する必要があるようです。 vc とソース vc。その場所などを確立します。これは、インターネットで見たコードの 1 つです。

@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

これは、上から下に向かって現れるセグエを作ることになっていると思います。しかし、ソースと宛先のVCとは何か、コードが言う部分にもいくつか質問がありますdst.view.fram=CGRectMake(dst.view.frame.origin.x, 0-dst.view.frame.size.height,

そこにある0は一体何なのdst.view.frame.origin.yですか?

とにかく、これを配線してボタンからプッシュセグエを作成しましたが、これを行ったとき、セグエは画面の上部から約 3/4 だけ下に来て、下部の 1/4 は私の下部を示していましたルート ビュー。また、セグエの後に新しいVCのボタンを押してみると、プログラムがクラッシュしました。

どんな情報でも助けてください!

4

1 に答える 1

1

これは、完全には説明されていないものの1つです。コードから判断すると、「ソースビューコントローラー」はルートビューコントローラー(または親ビューコントローラー)であり、「宛先ビューコントローラー」はDetailViewController(または子ビューコントローラー)であるように見えます。

これがあなたをもっと混乱させるかどうかわからない。とにかく、親/ルートビューコントローラーはメインビューコントローラーであり、子ビューコントローラーの表示を処理します。私が興味深いと思うのは、作成者が別のクラスのビューを提示するのではなく、サブクラス化したことです。

ここで、y軸上で0-self.view.frame.size.height=-320です。メインビューを1枚の紙と考え、子ビューを2枚目の紙と考えてください。2枚の紙を上下に(上ではなく)置くことを想像してみてください。画面には、「その上の紙」を下にアニメーション化するまで、下の紙だけが表示されます。基本的に、彼は下からではなく上からアニメートする予定です(私は自分の好奇心に答えたと思います)。

于 2012-08-01T23:08:28.730 に答える