我是 iOS 开发的新手,最近在 iOS 9 中遇到了自定义转换的问题。
我有一个对象符合UIViewControllerTransitioningDelegate
协议和实现animationControllerForDismissedController
,例如:
@implementation MyCustomizedTransitioningDelegate
#pragma mark - UIViewControllerTransitioningDelegate
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
MyCustomizedTransitionAnimator *animator = [[MyCustomizedTransitionAnimator alloc] init];
animator.presenting = NO;
return animator;
}
@end
触发模态转换的过程类似于:
@implementation MyViewController
#pragma mark - Initializers
+ (MyCustomizedTransitioningDelegate *)modalTransitioningDelegateSingletonInstance;
{
static MyCustomizedTransitioningDelegate *delegateInst = nil;
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
delegateInst = [[MyCustomizedTransitioningDelegate alloc] init];
});
return delegateInst;
}
#pragma mark - UIViewController
- (void)dismissViewControllerAnimated:(BOOL)animated completion:(void (^)(void))completion;
{
[self prepareForDismissViewControllerAnimated:animated completion:&completion];
[super dismissViewControllerAnimated:animated completion:completion];
}
- (void)prepareForDismissViewControllerAnimated:(BOOL)animated completion:(dispatch_block_t *)completion;
{
self.presentedViewController.modalPresentationStyle = UIModalPresentationCustom;
self.presentedViewController.transitioningDelegate = [[self class] modalTransitioningDelegateSingletonInstance];
}
@end
由于animationControllerForDismissedController
未调用方法,因此MyCustomizedTransitionAnimator
未创建方法,这导致它animateTransition
也未调用,这导致我的应用程序出现意外问题。(对不起我的英语不好......)
我还附上了 iOS8 和 iOS9 的堆栈跟踪截图。在 iOS 8 中,animationControllerForDismissedController
在下面的堆栈跟踪之后调用。
但是在 iOS9 中,transitionDidFinish
以某种方式提前调用,我猜这可能会阻止animationControllerForDismissedController
被调用?
我想知道这是否是 iOS 9 的错误。任何解释或解决方案将不胜感激!