3

UIViewControllerデータを表示するためのカスタムロジックを備えたViewController(から継承)があります。新しいビューコントローラー(同じタイプ)を初期化し、 [self.navigationController pushViewController:next animated:NO] (次は新しくインスタンス化されたコントローラー)を使用して表示し、ナビゲーションコントローラーのデフォルトの戻るボタンを使用してスタックを上に移動して「ビューのスタック」のエクスペリエンスを作成できます。 。

これで、呼び出す前に、を呼び出すpushViewController:animated:ことでトランジションアニメーションをカスタマイズでき[self.navigationController.view.layer addAnimation:animation forKey:nil]ます。これは、ビューの「スタックを下る」ために素晴らしい働きをします。

ただし、スタックの上のナビゲーションはデフォルトの方法でデフォルトの戻るボタンを使用して行われるため、使用されるトランジションはデフォルトの左スライドアニメーションであり、カスタマイズしたアニメーションとは一致しません。

このトランジションアニメーションをカスタマイズするにはどうすればよいですか?

編集:

私はここで与えられたアイデアを取り入れて、次のことを思いつきました。

UIBarButtonItem *back = [[UIBackButtonItem alloc] initWithTitle:@"\U000025C0\U0000FE0E" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];
[self.navigationItem setLeftBarButtonItem:back]

そして移行:

- (IBAction)back:(id)sender {
    CATransiotion *animation = [CATransition animation];
    animation.duration = 0.3f;
    amimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    animation.type = kCATransitionMoveIn;
    [self.navigationController.view.layer addAnimation:animation forKey:nil];
    [self.navigationController popViewControllerAnimated:NO];
}

唯一の欠点は、私が喜んで一緒に暮らす新しい戻るボタンの外観です。

答えてくれてありがとう:)

4

4 に答える 4

3

カスタムの戻るボタンを作成し、それにアニメーションを添付する必要があると思います。

- (IBAction) back:(id)sender
{       
    [UIView transitionWithView:self.navigationController.view
                      duration:0.5
                       options:UIViewAnimationOptionTransitionFlipFromLeft
                    animations:^{ [self.navigationController popViewControllerAnimated:NO]; }
                    completion:NULL];
}
于 2013-03-24T12:27:44.093 に答える
1

このコードは、このQuestonから取得したものです。

このタイプの移行には、システムの設計方法であるモーダルビューコントローラーをお勧めします。

しかし、ナビゲーションコントローラの使用を主張する場合は、多少醜いですが、方法があります。

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

CATransition *transition = [CATransition animation];
[transition setType:kCATransitionFade];
[self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"];

[self.navigationController popViewControllerAnimated:YES];
[CATransaction commit];

は、CATransactionすべての標準アニメーションを無効にします。はCATransition、ビューがスワップされたときにナビゲーションコントローラーレイヤーにフェードトランジションを追加します(この場合、ポップされたビューコントローラービューを削除します)。

また、ナビゲーションベースのアプリでプッシュアニメーションとポップアニメーションを変更する方法についても参照してください

于 2013-03-24T12:21:03.890 に答える
1

私はこのようにします:

-(void)viewWillDisappear:(BOOL)animated {
CATransition *anim = [CATransition animation];
anim.duration = 1;
anim.type = @"cube";
anim.subtype = @"fromLeft";
[super viewWillDisappear:animated];
[self.navigationController.view.layer addAnimation:anim forKey:@"an"]; 

}

そしてそれはうまくいきます!

于 2013-11-22T14:21:55.483 に答える
0

単に戻るボタンを前のViewControllerに戻したい場合。コードなしでこれを行う方が簡単です。代わりに、戻るボタンから前のViewControllerにコントロールドラッグするだけです。(私はモーダルアクションセグエを好みます)。コードが含まれないため、これにより簡単になります

于 2013-03-24T22:02:40.920 に答える