问题描述
- 视频播放抖动(播放一小段然后再从头播放完)
-
下面是放在pageViewController里面的子VC来播放视频。
模仿微信做的图片选择器,在浏览图片的时候,如果遇到视频,可以在浏览过程中播放视频。本人新手,希望遇到过这种情况的大神指教一下,谢谢了。#import "CHVideoPlayerViewController.h"
#import@interface CHVideoPlayerViewController ()
{
MPMoviePlayerViewController _movie;
UITapGestureRecognizer *_tap;
/*
* 播放按钮
*/
UIImageView *_playerView;}
@end@implementation CHVideoPlayerViewController
- (void)viewDidLoad {
[super viewDidLoad];_tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
/**
- 视频播放对象
*/
_movie = [[MPMoviePlayerViewController alloc] initWithContentURL:_url];
_movie.moviePlayer.controlStyle = MPMovieControlStyleNone;
[_movie.view setFrame:self.view.bounds];
_movie.view.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
_movie.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
_movie.moviePlayer.shouldAutoplay = NO;
[_movie.view.subviews.firstObject addGestureRecognizer:_tap];
_playerView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"bofang64"]];
_playerView.backgroundColor = [UIColor clearColor];
// [_playerView addGestureRecognizer:_tap];
_playerView.center = _movie.view.center;
[_movie.view addSubview:_playerView];[self.view addSubview:_movie.view];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:nil]; - 视频播放对象
}
- (void)myMovieFinishedCallback:(NSNotification*)notification
{
_playerView.alpha = 1;
self.navigationController.navigationBar.alpha = 0.5;
self.navigationController.toolbar.alpha = 0.5;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} - (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[_movie.moviePlayer prepareToPlay];if (_movie.moviePlayer.playbackState == MPMoviePlaybackStatePlaying) {
self.navigationController.navigationBar.alpha = 0;
self.navigationController.toolbar.alpha = 0;
_playerView.alpha = 0;
}else {
self.navigationController.navigationBar.alpha = 0.5;
self.navigationController.toolbar.alpha = 0.5;
_playerView.alpha = 1;
}
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
} - (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[_movie.moviePlayer stop];
} - (void)tapAction:(UITapGestureRecognizer *)tap {
if (_movie.moviePlayer.playbackState == MPMoviePlaybackStatePlaying) {
[_movie.moviePlayer pause];
self.navigationController.navigationBar.alpha = 0.5;
self.navigationController.toolbar.alpha = 0.5;
_playerView.alpha = 1;
}else {
self.navigationController.navigationBar.alpha = 0;
self.navigationController.toolbar.alpha = 0;
[UIView animateWithDuration:0.5 animations:^{
_playerView.alpha = 0;
_playerView.transform = CGAffineTransformMakeScale(5, 5);
} completion:^(BOOL finished) {
_playerView.transform = CGAffineTransformIdentity;
[_movie.moviePlayer play];
}];}
}
- (void)viewDidLoad {
解决方案
http://www.zhihu.com/question/23893440