// // TZVideoEditedPreviewController.m // TZImagePickerController // // Created by 肖兰月 on 2021/5/29. // Copyright © 2021 谭真. All rights reserved. // #import "TZVideoEditedPreviewController.h" #import #import "TZImageManager.h" #import "TZImagePickerController.h" #import "UIView+TZLayout.h" @interface TZVideoEditedPreviewController () { AVPlayer *_player; AVPlayerLayer *_playerLayer; UIButton *_playButton; UIImage *_cover; UIView *_toolBar; UIButton *_doneButton; UIProgressView *_progress; UIStatusBarStyle _originStatusBarStyle; } @end @implementation TZVideoEditedPreviewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; [self configMoviePlayer]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:UIApplicationWillResignActiveNotification object:nil]; } - (void)configMoviePlayer { _player = [AVPlayer playerWithURL:self.videoURL]; _playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player]; [self.view.layer addSublayer:_playerLayer]; [self configPlayButton]; [self configBottomToolBar]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:AVPlayerItemDidPlayToEndTimeNotification object:self->_player.currentItem]; } - (void)configPlayButton { _playButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_playButton setImage:[UIImage tz_imageNamedFromMyBundle:@"MMVideoPreviewPlay"] forState:UIControlStateNormal]; [_playButton setImage:[UIImage tz_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]; [_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]; } #pragma mark - Layout - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; BOOL isFullScreen = self.view.tz_height == [UIScreen mainScreen].bounds.size.height; CGFloat statusBarHeight = isFullScreen ? [TZCommonTools tz_statusBarHeight] : 0; CGFloat statusBarAndNaviBarHeight = statusBarHeight + self.navigationController.navigationBar.tz_height; CGFloat toolBarHeight = 44 + [TZCommonTools tz_safeAreaInsets].bottom; _toolBar.frame = CGRectMake(0, self.view.tz_height - toolBarHeight, self.view.tz_width, toolBarHeight); [_doneButton sizeToFit]; _doneButton.frame = CGRectMake(self.view.tz_width - _doneButton.tz_width - 12, 0, MAX(44, _doneButton.tz_width), 44); _playButton.frame = CGRectMake(0, statusBarAndNaviBarHeight, self.view.tz_width, self.view.tz_height - statusBarAndNaviBarHeight - toolBarHeight); _playerLayer.frame = self.view.bounds; } #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]; _toolBar.hidden = YES; [_playButton setImage:nil forState:UIControlStateNormal]; } else { [self pausePlayerAndShowNaviBar]; } } - (void)doneButtonClick { [self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - Notification Method - (void)pausePlayerAndShowNaviBar { [_player pause]; _toolBar.hidden = NO; [_playButton setImage:[UIImage tz_imageNamedFromMyBundle:@"MMVideoPreviewPlay"] forState:UIControlStateNormal]; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } #pragma clang diagnostic pop @end