/** imageView的tap手势方法 */
-(void)tapAction:(UITapGestureRecognizer *)tap
{
// 当未播放状态,点击imageView等同于点击中间播放按钮,开始播放视频
if (self.player.status == AVPlayerStatusUnknown) {
[self playOrPauseBigBtnClick:self.playOrPauseBigBtn];
return;
}
// 记录底部工具栏显示或隐藏的状态
self.isShowToolView = !self.isShowToolView;
// 如果需要工具栏显示,添加动画显示
if (self.isShowToolView){
[UIView animateWithDuration:0.5 animations:^{
self.toolView.alpha = 1;
}];
// 工具栏的播放按钮为播放状态的时候,添加计时器,5秒钟之后工具栏隐藏
if (self.playOrPauseBtn.selected) {
[self addShowTime];
}
// 如果需要隐藏工具栏,移除计时器,并将工具栏隐藏
}else{
[self removeShowTime];
[UIView animateWithDuration:0.5 animations:^{
self.toolView.alpha = 0;
}];
}
}
3、工具栏中播放/暂停按钮的点击也需要做一些处理,当处于暂停状态时,工具栏alpha值设为1,并将定时器移除,重新开始播放视频时,则重新添加定时器开始计时,5秒钟之后让工具栏消失。具体代码会在播放时间、Slider与视频播放的同步中详细贴出。
三. 播放时间、Slider与视频播放的同步
底部工具条中播放时间、视频总时间以及Slider的滑动需要与视频播放时间进行同步。
1、添加视频播放和Slider的定时器,每1秒钟重复调用更新时间label和Slider滑块
/** slider定时器添加 */
-(void)addProgressTimer
{
self.progressTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateProgressInfo) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop]addTimer:self.progressTimer forMode:NSRunLoopCommonModes];
}
/** 移除slider定时器 */
-(void)removeProgressTimer
{
[self.progressTimer invalidate];
self.progressTimer = nil;
}
/** 更新slider和timeLabel */
- (void)updateProgressInfo
{
NSTimeInterval currentTime = CMTimeGetSeconds(self.player.currentTime);
NSTimeInterval durationTime = CMTimeGetSeconds(self.player.currentItem.duration);
self.timeLabel.text = [self timeToStringWithTimeInterval:currentTime];
self.allTimeLabel.text = [self timeToStringWithTimeInterval:durationTime];
self.progressSlider.value = CMTimeGetSeconds(self.player.currentTime) / CMTimeGetSeconds(self.player.currentItem.duration);
if (self.progressSlider.value == 1) {
[self removeProgressTimer];
self.coverView.hidden = NO;
}
}
获取到的当前播放时间和总时间是CMTime类型的,需要将他们转化为NSTimeInterval并将秒转化为分钟和时间,将转化方法提出来
/** 转换播放时间和总时间的方法 */
-(NSString *)timeToStringWithTimeInterval:(NSTimeInterval)interval;
{
NSInteger Min = interval / 60;
NSInteger Sec = (NSInteger)interval % 60;
NSString *intervalString = [NSString stringWithFormat:@"%02ld:%02ld",Min,Sec];
return intervalString;
}










