web-dev-qa-db-ja.com

ストーリーボードを使用して4.2Xcodeでカスタムモーダルセグエを作成する方法

ストーリーボードを使用して新しいiPadプロジェクトを作成しています。カスタムモーダルセグエを使用して、ビュー間の遷移を改善したいと思います。私の質問は、カスタムモーダルをどのように使用するかです。カスタムモーダルセグエの使用を示すチュートリアルはありますか?

14
TWcode

このカスタムシーケンスは、ナビゲーションスタックのルートに戻ります。 1レベル戻る場合は、「popToViewController」の代わりに通常のポップを使用します。このメソッドの名前が大好きです。

ヘッダ:

#import <UIKit/UIKit.h>

@interface FlipTopPopToRoot : UIStoryboardSegue

@end

実装:

#import "FlipTopPopToRoot.h"

@implementation FlipTopPopToRoot

- (void) perform {

UIViewController *src = (UIViewController *) self.sourceViewController;
[UIView transitionWithView:src.navigationController.view duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromTop
                animations:^{
                    [src.navigationController popToViewController:[src.navigationController.viewControllers objectAtIndex:0] animated:NO];;
                }
                completion:NULL];
}

@end
5
T.J.

私は似たようなものを探していましたが、現在の答えは少し誤解を招くものでした。 TJによって提示された現在のチュートリアルは、ナビゲーションコントローラー内でカスタマイズされたセグエを実行しています。モーダルセグエをお探しの場合は、代わりに電話する必要があると思います。

 [self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];

アニメーションのオプションを変更します。

私が書いたこの投稿でもっと見つけることができます: リンク

2
tiguero

フレームをスライドさせるだけのコードの山を書くよりも、これが最も簡単な方法だと思います。

これがカスタムセグエです

- (void) perform {
    UIView *oldView = ((UIViewController *)self.sourceViewController).view;
    UIView *newView = ((UIViewController *)self.destinationViewController).view;

    [oldView.window insertSubview:newView aboveSubview:oldView];
    float offsetY = newView.center.y  - oldView.center.y ;
    //NSLog(@"old y = %f, new y = %f , offsetY = %f", oldView.center.y, newView.center.y, offsetY);


    // assuming newView and oldView both sized to fill screen,
    //   position newView just to the right of oldView

    newView.center = CGPointMake(oldView.center.x + oldView.frame.size.width, oldView.center.y + offsetY);
    //NSLog(@"newView center x = %f y = %f", newView.center.x, newView.center.y);
    // slide newView over oldView, then remove oldView
    [UIView animateWithDuration:0.3
                     animations:^{ newView.center = CGPointMake(oldView.center.x, oldView.center.y + offsetY);}
                     completion:^(BOOL finished){ [oldView removeFromSuperview]; }];
}

お役に立てれば!

1
Nick Turner