UIStroryBoard をビュー コントローラーまたはセグエにプッシュすると、あまりカスタマイズできません。私が最終的に行ったことは、実行メソッドをオーバーライドし、QuartzCore アニメーションを使用してトランジションをカスタマイズすることでした。UIStoryBoardSegue をサブクラス化し、perform 関数を上書きしました。
以下は、プッシュまたはポップ用にカスタマイズしてから、セグエ用にカスタマイズします。(セグエについては、クラスを IB のカスタム クラスに変更することを忘れないでください)。
通常のポップまたはプッシュから行うには (これはクロス フェード アニメーションを行います。自分用に調整してください):
#import <QuartzCore/QuartzCore.h>
- (IBAction)launch1990:(id)sender {
CATransition* transition = [CATransition animation];
transition.duration = .45;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"1990Storyboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"1990"];
[self.navigationController pushViewController:vc animated:NO];
}
セグエから行うには:
//ZHCustomSegue.h
#import <Foundation/Foundation.h>
@interface ZHCustomSegue : UIStoryboardSegue
@end
// ZHCustomSegue.m
#import "ZHCustomSegue.h"
#import "QuartzCore/QuartzCore.h"
@implementation ZHCustomSegue
-(void)perform {
UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];
CATransition* transition = [CATransition animation];
transition.duration = .45;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
//transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
[sourceViewController.navigationController.view.layer addAnimation:transition
forKey:kCATransition];
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
}
@end