From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZVideoPlayerController.m |  212 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 212 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZVideoPlayerController.m b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZVideoPlayerController.m
new file mode 100644
index 0000000..8c75044
--- /dev/null
+++ b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZVideoPlayerController.m
@@ -0,0 +1,212 @@
+//
+//  TZVideoPlayerController.m
+//  TZImagePickerController
+//
+//  Created by ������ on 16/1/5.
+//  Copyright �� 2016��� ������. All rights reserved.
+//
+
+#import "TZVideoPlayerController.h"
+#import <MediaPlayer/MediaPlayer.h>
+#import "UIView+Layout.h"
+#import "TZImageManager.h"
+#import "TZAssetModel.h"
+#import "TZImagePickerController.h"
+#import "TZPhotoPreviewController.h"
+
+@interface TZVideoPlayerController () {
+    AVPlayer *_player;
+    AVPlayerLayer *_playerLayer;
+    UIButton *_playButton;
+    UIImage *_cover;
+    
+    UIView *_toolBar;
+    UIButton *_doneButton;
+    UIProgressView *_progress;
+    
+    UIStatusBarStyle _originStatusBarStyle;
+}
+@property (assign, nonatomic) BOOL needShowStatusBar;
+@end
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+
+@implementation TZVideoPlayerController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.needShowStatusBar = ![UIApplication sharedApplication].statusBarHidden;
+    self.view.backgroundColor = [UIColor blackColor];
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (tzImagePickerVc) {
+        self.navigationItem.title = tzImagePickerVc.previewBtnTitleStr;
+    }
+    [self configMoviePlayer];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:UIApplicationWillResignActiveNotification object:nil];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    _originStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
+    [UIApplication sharedApplication].statusBarStyle = iOS7Later ? UIStatusBarStyleLightContent : UIStatusBarStyleBlackOpaque;
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    [UIApplication sharedApplication].statusBarStyle = _originStatusBarStyle;
+}
+
+- (void)configMoviePlayer {
+    [[TZImageManager manager] getPhotoWithAsset:_model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
+        if (!isDegraded && photo) {
+            self->_cover = photo;
+            self->_doneButton.enabled = YES;
+        }
+    }];
+    [[TZImageManager manager] getVideoWithAsset:_model.asset completion:^(AVPlayerItem *playerItem, NSDictionary *info) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            self->_player = [AVPlayer playerWithPlayerItem:playerItem];
+            self->_playerLayer = [AVPlayerLayer playerLayerWithPlayer:self->_player];
+            self->_playerLayer.frame = self.view.bounds;
+            [self.view.layer addSublayer:self->_playerLayer];
+            [self addProgressObserver];
+            [self configPlayButton];
+            [self configBottomToolBar];
+            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:AVPlayerItemDidPlayToEndTimeNotification object:self->_player.currentItem];
+        });
+    }];
+}
+
+/// Show progress���do it next time / ������������������������������,������������
+- (void)addProgressObserver{
+    AVPlayerItem *playerItem = _player.currentItem;
+    UIProgressView *progress = _progress;
+    [_player addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 1.0) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
+        float current = CMTimeGetSeconds(time);
+        float total = CMTimeGetSeconds([playerItem duration]);
+        if (current) {
+            [progress setProgress:(current/total) animated:YES];
+        }
+    }];
+}
+
+- (void)configPlayButton {
+    _playButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    [_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlay"] forState:UIControlStateNormal];
+    [_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlayHL"] forState:UIControlStateHighlighted];
+    [_playButton addTarget:self action:@selector(playButtonClick) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:_playButton];
+}
+
+- (void)configBottomToolBar {
+    _toolBar = [[UIView alloc] initWithFrame:CGRectZero];
+    CGFloat rgb = 34 / 255.0;
+    _toolBar.backgroundColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:0.7];
+    
+    _doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    _doneButton.titleLabel.font = [UIFont systemFontOfSize:16];
+    if (!_cover) {
+        _doneButton.enabled = NO;
+    }
+    [_doneButton addTarget:self action:@selector(doneButtonClick) forControlEvents:UIControlEventTouchUpInside];
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (tzImagePickerVc) {
+        [_doneButton setTitle:tzImagePickerVc.doneBtnTitleStr forState:UIControlStateNormal];
+        [_doneButton setTitleColor:tzImagePickerVc.oKButtonTitleColorNormal forState:UIControlStateNormal];
+    } else {
+        [_doneButton setTitle:[NSBundle tz_localizedStringForKey:@"Done"] forState:UIControlStateNormal];
+        [_doneButton setTitleColor:[UIColor colorWithRed:(83/255.0) green:(179/255.0) blue:(17/255.0) alpha:1.0] forState:UIControlStateNormal];
+    }
+    [_doneButton setTitleColor:tzImagePickerVc.oKButtonTitleColorDisabled forState:UIControlStateDisabled];
+    [_toolBar addSubview:_doneButton];
+    [self.view addSubview:_toolBar];
+    
+    if (tzImagePickerVc.videoPreviewPageUIConfigBlock) {
+        tzImagePickerVc.videoPreviewPageUIConfigBlock(_playButton, _toolBar, _doneButton);
+    }
+}
+
+#pragma mark - Layout
+
+- (void)viewDidLayoutSubviews {
+    [super viewDidLayoutSubviews];
+    
+    CGFloat statusBarHeight = [TZCommonTools tz_statusBarHeight];
+    CGFloat statusBarAndNaviBarHeight = statusBarHeight + self.navigationController.navigationBar.tz_height;
+    _playerLayer.frame = self.view.bounds;
+    CGFloat toolBarHeight = [TZCommonTools tz_isIPhoneX] ? 44 + (83 - 49) : 44;
+    _toolBar.frame = CGRectMake(0, self.view.tz_height - toolBarHeight, self.view.tz_width, toolBarHeight);
+    _doneButton.frame = CGRectMake(self.view.tz_width - 44 - 12, 0, 44, 44);
+    _playButton.frame = CGRectMake(0, statusBarAndNaviBarHeight, self.view.tz_width, self.view.tz_height - statusBarAndNaviBarHeight - toolBarHeight);
+    
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (tzImagePickerVc.videoPreviewPageDidLayoutSubviewsBlock) {
+        tzImagePickerVc.videoPreviewPageDidLayoutSubviewsBlock(_playButton, _toolBar, _doneButton);
+    }
+}
+
+#pragma mark - Click Event
+
+- (void)playButtonClick {
+    CMTime currentTime = _player.currentItem.currentTime;
+    CMTime durationTime = _player.currentItem.duration;
+    if (_player.rate == 0.0f) {
+        if (currentTime.value == durationTime.value) [_player.currentItem seekToTime:CMTimeMake(0, 1)];
+        [_player play];
+        [self.navigationController setNavigationBarHidden:YES];
+        _toolBar.hidden = YES;
+        [_playButton setImage:nil forState:UIControlStateNormal];
+        if (iOS7Later) [UIApplication sharedApplication].statusBarHidden = YES;
+    } else {
+        [self pausePlayerAndShowNaviBar];
+    }
+}
+
+- (void)doneButtonClick {
+    if (self.navigationController) {
+        TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
+        if (imagePickerVc.autoDismiss) {
+            [self.navigationController dismissViewControllerAnimated:YES completion:^{
+                [self callDelegateMethod];
+            }];
+        } else {
+            [self callDelegateMethod];
+        }
+    } else {
+        [self dismissViewControllerAnimated:YES completion:^{
+            [self callDelegateMethod];
+        }];
+    }
+}
+
+- (void)callDelegateMethod {
+    TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
+    if ([imagePickerVc.pickerDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingVideo:sourceAssets:)]) {
+        [imagePickerVc.pickerDelegate imagePickerController:imagePickerVc didFinishPickingVideo:_cover sourceAssets:_model.asset];
+    }
+    if (imagePickerVc.didFinishPickingVideoHandle) {
+        imagePickerVc.didFinishPickingVideoHandle(_cover,_model.asset);
+    }
+}
+
+#pragma mark - Notification Method
+
+- (void)pausePlayerAndShowNaviBar {
+    [_player pause];
+    _toolBar.hidden = NO;
+    [self.navigationController setNavigationBarHidden:NO];
+    [_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlay"] forState:UIControlStateNormal];
+    
+    if (self.needShowStatusBar && iOS7Later) {
+        [UIApplication sharedApplication].statusBarHidden = NO;
+    }
+}
+
+- (void)dealloc {
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+#pragma clang diagnostic pop
+
+@end

--
Gitblit v1.8.0