关于Slider


#import "TVUAlbumAssetViewController.h"
#import <PhotosUI/PhotosUI.h>

@interface TVUAlbumAssetViewController ()

@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, strong) AVPlayerLayer *playerLayer;
// 声明视频播放器
@property (nonatomic, strong) AVPlayer *aPlayer;
// 播放或停止按钮
@property (retain, nonatomic) IBOutlet UIButton *videoButton;
// 控制视频播放的控件
@property (retain, nonatomic) IBOutlet UISlider *progressSlider;
// 播放的总时长
@property (nonatomic,assign)CGFloat sumPlayOperation;
// 监控进度
@property (nonatomic,strong)NSTimer *avTimer;

@end

@implementation TVUAlbumAssetViewController
{
    // 标记直播/暂停状态
    int flag;
}
@synthesize delegate;


- (void)viewDidLoad {
    [super viewDidLoad];
    
    flag = 0;
    [self.videoButton setBackgroundImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
    [self.videoButton addTarget:self action:@selector(onClick) forControlEvents:UIControlEventTouchUpInside];
    [self.navBar addSubview:self.videoButton];
    
    //监控播放进度
    self.avTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timer)userInfo:nil repeats:YES];
    
    //对滑动条添加事件函数
    [self.progressSlider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged];
    
    // 添加视频播放结束通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.aPlayer];

}

- (void)createPlayer{
    
    [[PHImageManager defaultManager] requestAVAssetForVideo:self.asset options:nil resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) {
        dispatch_async(dispatch_get_main_queue(),^{
            if (!self.playerLayer) {
                CALayer *viewLayer = self.imageView.layer;
                //设置播放的项目
                AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:avAsset];
                playerItem.audioMix = audioMix;
                //初始化player对象
                AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
                //设置播放页面
                AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
                //设置画面缩放模式
                playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
                //设置播放页面的大小
                playerLayer.frame = CGRectMake(0, 0, viewLayer.bounds.size.width, viewLayer.bounds.size.height);
                //添加播放视图到self.imageView
                [viewLayer addSublayer:playerLayer];

                self.playerLayer = playerLayer;
                self.aPlayer = player;
            }
        });
    }];
    
    
}

- (void)playerItemDidReachEnd:(NSNotification *)notification {
    [self.aPlayer seekToTime:kCMTimeZero];
    [self.videoButton setBackgroundImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
    flag = 0;
}

- (void)sliderChanged:(UISlider *)proSlider{
    
    // 获取当前播放的视频或者音频的总时长
    self.sumPlayOperation = self.aPlayer.currentItem.duration.value/self.aPlayer.currentItem.duration.timescale;
    // 跳转到某个时间节点  CMTimeMake(a,b) a表示当前时间,b表示每秒钟有多少帧
    [self.aPlayer seekToTime:CMTimeMakeWithSeconds(self.progressSlider.value*self.sumPlayOperation, self.aPlayer.currentItem.duration.timescale) completionHandler:^(BOOL finished) {
        
    }];
    
}

//监控播放进度方法
- (void)timer{
    
    self.progressSlider.value = CMTimeGetSeconds(self.aPlayer.currentItem.currentTime) / CMTimeGetSeconds(self.aPlayer.currentItem.duration);
    
}

//播放/暂停按钮的点击方法
- (void)onClick{
    
    if (flag == 0) {
        flag = 1;
        [self.videoButton setBackgroundImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
        
        if (self.playerLayer != nil) {
            [self.playerLayer.player play];
        }else {
            [self createPlayer];
            [self.playerLayer.player play];
        }
        
    }else{
        
        flag = 0;
        [self.videoButton setBackgroundImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
        [self.playerLayer.player pause];
    }
}


- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    [self createPlayer];

    if (self.asset.mediaType == PHAssetMediaTypeVideo) {

        self.videoButton.hidden = NO;
        self.progressSlider.hidden = NO;
        if (self.aPlayer != nil) {
            [self.aPlayer seekToTime:kCMTimeZero];
        }
    }
    else {
        self.videoButton.hidden = YES;
        self.progressSlider.hidden = YES;
        
    }
    
    [self showImage];
}

- (BOOL)shouldAutorotate {
    return YES;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

- (void)viewWillDisappear:(BOOL)animated {
    
    [super viewWillDisappear:animated];
    [self.playerLayer removeFromSuperlayer];
    self.playerLayer = nil;
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)goBack:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}


- (IBAction)doneWithSelection:(id)sender {
    
    [self.aPlayer pause];
    [self.delegate didFinishPickingMediaWithAsset:self.asset];

}

#pragma mark - Image setup methods.

- (CGSize)targetSize {
    CGFloat scale = [UIScreen mainScreen].scale;
    CGSize targetSize = CGSizeMake(CGRectGetWidth(self.imageView.bounds) * scale, CGRectGetHeight(self.imageView.bounds) * scale);
    return targetSize;
}

- (void)showImage {
    [[PHImageManager defaultManager] requestImageForAsset:self.asset targetSize:[self targetSize] contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage *result, NSDictionary *info) {
        
        self.imageView.image = result;
    }];
}

- (void)dealloc {
    [_videoButton release];
    [_progressSlider release];
    [super dealloc];
}
@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值