ios – 使用MPMoviePlayerViewController进行UIViewControllerAnimatedTransitioning

ios – 使用MPMoviePlayerViewController进行UIViewControllerAnimatedTransitioning,第1张

概述我正在尝试自定义演示动画,但VC是MPMoviePlayerViewController.我正在学习本教程: 当我呈现MPMoviePlayerViewController时,一切都是正确的. 但是当我解雇它时,只需要方法: - (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController 我正在尝试自定义演示动画,但VC是MPMovIEPlayerVIEwController.我正在学习本教程:

当我呈现MPMovIEPlayerVIEwController时,一切都是正确的.

但是当我解雇它时,只需要方法:

- (ID <UIVIEwControllerAnimatedTransitioning>)animationControllerFordismissedController:(UIVIEwController *)dismissed

不叫,我做错了什么?

这是代码:

- (IBAction)playbuttontouchedIn:(ID)sender {    NSURL *url = [[NSBundle mainBundle]URLForResource:@"Learn to speak Spanish quickly with funny vIDeos on youtube" withExtension:@"mp4"];    MPMovIEPlayerVIEwController *player = [[MPMovIEPlayerVIEwController alloc]initWithContentURL:url];    player.TransitioningDelegate = self;    player.modalTransitionStyle = UIModalPresentationCustom;    [player.movIEPlayer setShouldAutoplay:NO];    player.movIEPlayer.controlStyle = MPMovIEControlStyleNone;    [self presentVIEwController:player animated:YES completion:^{        [player.movIEPlayer play];        player.movIEPlayer.controlStyle = MPMovIEControlStyleFullscreen;    }];}

UIVIEwControllerTransitioningDelegate方法:

- (ID <UIVIEwControllerAnimatedTransitioning>)animationControllerForPresentedController:    (UIVIEwController *)presented presentingController:(UIVIEwController *)presenting sourceController:(UIVIEwController *)source{    self.presenting = YES;    return self;}- (ID <UIVIEwControllerAnimatedTransitioning>)animationControllerFordismissedController:(UIVIEwController *)dismissed{    self.presenting = NO;    return self;}

UIVIEwControllerAnimatedTransitioning方法

- (NSTimeInterval)TransitionDuration:(ID <UIVIEwControllerContextTransitioning>)TransitionContext{    return 0.7;}- (voID)animateTransition:(ID <UIVIEwControllerContextTransitioning>)TransitionContext{    UIVIEwController *fromVIEwController = [TransitionContext     vIEwControllerForKey:UITransitionContextFromVIEwControllerKey];    UIVIEwController *toVIEwController = [TransitionContext vIEwControllerForKey:UITransitionContextToVIEwControllerKey];    if (self.isPresenting) {        [fromVIEwController.vIEw setUserInteractionEnabled:NO];        [TransitionContext.containerVIEw addSubvIEw:fromVIEwController.vIEw];        [TransitionContext.containerVIEw addSubvIEw:toVIEwController.vIEw];        CGRect startFrame = toVIEwController.vIEw.frame;        toVIEwController.vIEw.frame = (CGRect){CGPointMake(toVIEwController.vIEw.frame.size.wIDth,0),startFrame.size};        [UIVIEw animateWithDuration:[self TransitionDuration:TransitionContext] delay:0.0f usingSpringWithdamPing:0.5f initialSpringVeLocity:4.0f options:UIVIEwAnimationoptionCurveEaSEOut animations:^{                toVIEwController.vIEw.frame = startFrame;        } completion:^(BOol finished) {            [TransitionContext completeTransition:YES];            [fromVIEwController.vIEw setUserInteractionEnabled:YES];        }];    }    else{        [toVIEwController.vIEw setUserInteractionEnabled:YES];        [TransitionContext.containerVIEw addSubvIEw:toVIEwController.vIEw];        [TransitionContext.containerVIEw addSubvIEw:fromVIEwController.vIEw];        CGRect finalFrame = (CGRect){CGPointMake(-fromVIEwController.vIEw.frame.size.wIDth,fromVIEwController.vIEw.frame.size};        [UIVIEw animateWithDuration:[self TransitionDuration:TransitionContext] animations:^{            fromVIEwController.vIEw.frame = finalFrame;        } completion:^(BOol finished) {            [TransitionContext completeTransition:YES];        }];    }}

我尝试过用我开发的视图控制器,它工作得很好,所以应该是MPMovIEPlayerVIEwController吗?

解决方法 我在解雇时能够正确设置动画的方法是在调用[presentVIEwController dismissVIEwControllerAnimated:YES]之前重新设置TransitioningDelegate和modalTransitionStyle;

而不仅仅是

- (IBAction) closepressed:(ID)sender {    [self.presentingVIEwController dismissVIEwControllerAnimated:YES];}

你会的

- (IBAction) closepressed:(ID)sender {    MPCustomModalTransitionDelegate *delegate = [[MPCustomModalTransitionDelegate alloc]init];    self.TransitioningDelegate = delegate;    self.modalTransitionStyle = UIModalPresentationCustom;    [self.presentingVIEwController dismissVIEwControllerAnimated:YES];}

这里明显的区别是添加了一个新的MPCustomModalTransitionDelegate类,您需要从视图控制器中重构它.

总结

以上是内存溢出为你收集整理的ios – 使用MPMoviePlayerViewController进行UIViewControllerAnimatedTransitioning全部内容,希望文章能够帮你解决ios – 使用MPMoviePlayerViewController进行UIViewControllerAnimatedTransitioning所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1099817.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存