我通过实现UIViewControllerTransitioningDelegate
协议中的方法为模态视图控制器创建了自定义过渡动画。
iOS 8和9中,这些方法被正常调用并且过渡效果正常。然而,在iOS 7中,animationControllerForPresentedController:presentingController:sourceController:
方法从未被调用。而animationControllerForDismissedController:
方法仍然会被正常调用。
#import "MyModalTransitioningDelegate.h"
#import "MyModalFadeTransition.h"
@implementation MyModalTransitioningDelegate
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented
presentingController:(UIViewController *)presenting
sourceController:(UIViewController *)source
{
return [[MyModalFadeTransition alloc] init];
}
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
return [[MyModalFadeTransition alloc] init];
}
@end
在模态视图控制器(即“呈现的控制器”)中,我在其
-viewDidLoad
方法中有以下内容:self.modalTransitionDelegate = [[OTModalTransitioningDelegate alloc] init]; // This is a custom strong private property due to `tranisitioningDelegate` being a weak property.
self.transitioningDelegate = self.modalTransitionDelegate;
self.modalPresentationStyle = UIModalPresentationCustom;
设置 modalPresentationStyle
在任何版本的 iOS 中似乎都没有任何区别。未被调用的方法确实说明它在 iOS 7 可用,所以我不确定为什么它没有被调用。
模态视图控制器是使用以下代码在呈现视图控制器中呈现的:
[self presentViewController:self.modalViewController
animated:YES
completion:nil];