Я Newbee в развитии IOS и недавно столкнулся с этой проблемой с настраиваемым переходом в прошивке 9.IOS 9 пользовательского переход - animationControllerForDismissedController не называется
У меня есть объект соответствует 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 или нет. Любое объяснение или решение проблемы будет принята с благодарностью!
Как вы начинаете модальный переход, возможно, вы могли бы опубликовать код относительно этого. – beyowulf
@beyowulf Только что отредактировал его. Благодаря! – yvetterowe
Есть ли причина, по которой вы хотите использовать синглтон? Размещение + (MyCustomizedTransitioningDelegate *) modalTransitioningDelegateSingletonInstance; в диспетчере просмотра неловко и, вероятно, почему ваш делегат не вызван. – beyowulf