8

私はしばらくの間、カバーの垂直方向の反対を行うカスタム セグエを作成しようと試みてきました (上から下へのエフェクト アニメーションを作成するため)。他の質問、Google と YouTube を調べましたが、動作させることができません。クラスなどにはまったく新しいので、ステップバイステップガイドまたはビデオのヘルプはとても良いでしょう。この URL は、私がやりたいことと似たようなことをしようとしていると思います。

http://jrwren.wrenfam.com/blog/2012/02/01/storyboard-custom-segue-for-custom-pushviewcontroller-animation/、私はそれを動作させることができません。

カバーの垂直セグエの上から下へのバージョンであるセグエを作成する方法を知っている方がいらっしゃいましたら、助けていただけませんか?

4

7 に答える 7

8

さて、ウォークスルーで示されているように、UIStoryBoardSegue のサブクラスを作成したいでしょうが、Storyboard クラスの .m ファイル (実装) の下では、-(void)perform: メソッドとして次のコードが必要です。

-(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];
                 }];}

うまくいけば、これは役に立ちます。

于 2012-12-29T13:45:14.233 に答える
3

@ dmason82の回答に基づいて構築し、Swiftに翻訳し、少し単純化すると、これは私にとってはうまくいきます:

class UIStoryboardSegueFromTop: UIStoryboardSegue {
    override func perform() {
        let src = self.sourceViewController as UIViewController
        let dst = self.destinationViewController as UIViewController

        src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)
        dst.view.transform = CGAffineTransformMakeTranslation(0, -src.view.frame.size.height)

        UIView.animateWithDuration(1.0, animations: {
            dst.view.transform = CGAffineTransformMakeTranslation(0, 0)

            }) { (Finished) in
                src.presentViewController(dst, animated: false, completion: nil)
        }
    }
}
于 2016-04-22T17:16:02.463 に答える
2

これは、ストーリーボードを使用した Opposite Cover Vertical Segue の実装です。

https://github.com/viccarre/OppositeCoverVerticalSegue

于 2014-07-12T21:36:58.497 に答える
1

dmasonの答えを完成させ、コントローラーを反対方向に巻き戻すには、元の場所から上に戻り、提示されたView Controllerでこれを行います:

[UIView animateWithDuration:0.75
                      delay:0.0
                    options:UIViewAnimationOptionTransitionFlipFromBottom
                 animations:^{
                     [self.view setTransform:CGAffineTransformMakeTranslation(0, -self.view.frame.size.height)];
                 }
                 completion:^(BOOL finished){
                     [self dismissViewControllerAnimated:NO completion:nil];
                 }
 ];

Bergyの答えはうまくいきませんでした。

于 2015-11-19T16:13:27.807 に答える