【发布时间】:2014-03-12 14:50:18
【问题描述】:
我正在尝试制作自定义演示动画,但 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, 0),fromViewController.view.frame.size};
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
fromViewController.view.frame = finalFrame;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
}
我已尝试使用我开发的视图控制器,效果很好,MPMoviePlayerViewController 也应该如此?
【问题讨论】:
-
您找到解决方案了吗?
-
这也发生在我身上。你还记得
MPMoviePlayerViewController是否在UINavigationController中吗?我想知道这是否与它有关。 -
有点违反直觉,看起来您需要在它关闭之前再次设置
transitioningDelegate和modalPresentationStyle。这绝对不是预期的...... -
@MattBaker 在哪里?我有这个问题,但没有使用任何电影播放器 api 的
-
@DevilInDisguise 查看我刚刚发布的答案,如果它为您解决问题,请告诉我。
标签: ios ios7 uiviewanimationtransition