iPhone – devise我自己的viewController转换

我的应用程序有一堆viewControllers,我试图devise自己的animation从一个viewController转换到另一个。

我find了这个

- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 

但是这似乎不允许devise我自己的转换曲线。

我想要的是当新的viewControllers达到最终位置和类似的东西时,创build像弹性弹跳的效果。 我喜欢将我自己的关键帧添加到animation曲线。

我怎么做?

谢谢

如果你想devise自己的转换,你可以创build一个UIViewController的类别,并自己写animation。 只有基本的animation已经可用。

这是你如何可以做接口:

* .h文件:

 #import <UIKit/UIKit.h> @interface UIViewController(Transitions) - (void) presentViewController:(UIViewController *)viewController withPushDirection: (NSString *) direction; - (void) dismissViewControllerWithPushDirection:(NSString *) direction; @end 

* .m文件

 #import "UIViewControllerWithTransitions.h" #import <QuartzCore/QuartzCore.h> @implementation UIViewController(Transitions) - (void) presentViewController:(UIViewController *)viewController withPushDirection: (NSString *) direction { [CATransaction begin]; CATransition *transition = [CATransition animation]; transition.type = kCATransitionPush; transition.subtype = direction; transition.duration = 0.25f; transition.fillMode = kCAFillModeForwards; transition.removedOnCompletion = YES; [[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"]; [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; [CATransaction setCompletionBlock: ^ { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ { [[UIApplication sharedApplication] endIgnoringInteractionEvents]; }); }]; [self presentViewController:viewController animated:NO completion:NULL]; [CATransaction commit]; } - (void) dismissViewControllerWithPushDirection:(NSString *) direction { [CATransaction begin]; CATransition *transition = [CATransition animation]; transition.type = kCATransitionPush; transition.subtype = direction; transition.duration = 0.25f; transition.fillMode = kCAFillModeForwards; transition.removedOnCompletion = YES; [[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"]; [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; [CATransaction setCompletionBlock: ^ { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ { [[UIApplication sharedApplication] endIgnoringInteractionEvents]; }); }]; [self dismissViewControllerAnimated:NO completion:NULL]; [CATransaction commit]; } @end 

这是一个示例调用:

 [self presentViewController: myVC withPushDirection:@"fromRight"];