カスタム セグエを使用して、UIViewControllers 間に単純なプッシュ アニメーションを追加しようとしています。
(コントローラーを UINavigationController を使用するように変換せずに)
これまでに見つかった回答は、ナビゲーション コントローラーでは正常に機能しますが、ナビゲーション コントローラーを使用しないと失敗します。(私はまだスタックオーバーフローでここで見た他の答えを読んで試しています)
2012 年 7 月 5 日の (ZHCustomSegue.m) Zakir のおかげで、私のカスタム セグエ .m
#import "SFCustomSegue.h"
#import "QuartzCore/QuartzCore.h"
@implementation SFCustomSegue
-(void)perform {
UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];
CATransition* transition = [CATransition animation];
transition.duration = 4.0;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
[sourceViewController.view.layer addAnimation:transition forKey:kCATransition];
[sourceViewController presentViewController:[self destinationViewController] animated:NO completion:nil];
}
Zakir の元の例に従ってナビゲーション コントローラーを使用し、最後の 2 行を次のように置き換えます。
[sourceViewController.navigationController.view.layer addAnimation:transition
forKey:kCATransition];
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
できます....
Appleのドキュメントには次のように書かれています(ナビゲーションコントローラーではなく、モーダルセグエを使用していることに注意してください):
- (void)perform
{
// Add your own animation code here.
[[self sourceViewController] presentModalViewController:[self destinationViewController] animated:NO];
}
動作していないため、アニメーションが表示されません。Zakir のコードでは、4.0 秒を使用すると 4.0 秒かかり、必要なアニメーションが得られます。もちろん、ナビゲーション コントローラーを使用する場合は、プッシュ遷移がデフォルトです。このコードでは、アニメーションが表示されず、0 秒かかります。
UIViewControllers で動作するカスタム セグエ アニメーションを取得した人はいますか?