2012-01-25 5 views
6

私はストーリーボードとしてiBooksのようなフリップトランジションを実装しようとしています。 segueはrespを押すべきです。 destinationViewControllerをUINavigationControllersスタックに/からポップします。UIViewControllerをプッシュ/ポップするカスタムSegue

私のsegues メソッドでviewcontrollerをプッシュできますが、ポップできません。フリップアニメーションを作成した直後にコントローラをポップすると、アニメーションが実行されず、そのコールバックが実行されます。[[UIApplication sharedApplication] endIgnoringInteractionEvents]は呼び出されず、私のアプリケーションの結果は死んでしまいます。

私はanimationDidStop:anim:flagデリゲートメソッドをプッシュ/ポップしようとしましたが、フラグがtrueに設定されても呼び出されることはありません。

デリゲートメソッドが呼び出される前に、セグが割り当て解除されると仮定します。他に何ができますか?

+0

ストーリーボードを使用している場合は、iOS5を使用している必要があります。 'UIPageViewController'を使わないのはなぜですか?これは、iBooksに見られる標準のページフリップ動作すべてを実装します。 –

+1

私はpagecurlについて話しているのではなく、ibooksの本棚から店舗に、また後方に向かっています。 – cschuff

+0

基本的には、2つのView Controllerをそのままバックツーバックで表示する必要があります。そのため、同じスペース内で自由に両者を切り替えることができます。他、ああ?私は100%確信が持てるまでこれを答えとして投稿しませんが、代わりにこの錯覚を提供するのが最善だろうと思います(テーブルビューとマップビューがあるとしましょう。フリップでセカンドにセグをし、逆のフリップを "バック"にする。これを試してみる...) –

答えて

5

私はこの質問を完全に誤解していますが、2つのView Controllerの間で基本的な水平フリップを前後にしたいと思うように思えます。あなたがすでにこれを理解したとしても、それは同じ質問をしている誰かを助けるでしょう。

(1)あなたのストーリーボード(ViewController A & Bを持っている)で、AからBまでモーダル・セグを作成します。それに識別子(showViewControllerB)を与え、Transition:Flip Horizo​​ntalを選択します。私たちは、プロトコルとデリゲートを設定

を(2A)ViewControllerB.hでは@interfaceの上に追加します。

@class ViewControllerB; 

@protocol ViewControllerBDelegate 
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller; 
@end 

(2b)のプロパティとしてデリゲートを追加します。

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate; 

(3a)ViewControllerB.m合成:

@synthesize delegate; 

(3b)は、バックフリップする方法でデリゲート:

- (IBAction)flipBack:(id)sender 
{ 
    [self.delegate viewControllerBDidFinish:self]; 
} 

(4)ViewControllerA.hで一番上に#import "ViewControllerB.h"と@interface <ViewControllerBDelegate>

の終わりに追加する(図5(a) )ViewControllerA.mでは、プロトコルに適合するようにメソッドを追加:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

(5B)次にprepareForSegueにデリゲートとして設定:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) { 
     [[segue destinationViewController] setDelegate:self]; 
    } 
} 

これがあなたの質問に答えることを願っています。私が誤解した場合は、私に知らせてください。

0

あなたの質問はちょっと混乱しているので、ポップ、プッシュ、フリップ、バックフリップが混じり合っています。私はAIがあなたの質問に答えることができるかどうかは分かりませんが、私が何をしたのか分かります。

viewControllerをナビゲーションコントローラスタックにプッシュし、Storyboard Segue Styleをプッシュに設定すると、ビューは右から左にプッシュされます。戻るボタンが表示され、そこにpresentingViewControllerのタイトルが表示されます。

私がStoryboard Segue StyleをModalに設定した場合、TransitionをFlip Horizo​​ntalに設定することができます。しかし、Back Buttonは表示されません。 presentViewControllerでは、次のようにビューを閉じます。

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

これは、右のフリップで2番目のビューを元に戻します。

しかし、これは汚れた溶液であり、リンゴはお勧めしません。

http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW9

ルークDubertはあなたのデリゲートを実装する方法の例を与えました。