//
|
// TZVideoEditedPreviewController.m
|
// TZImagePickerController
|
//
|
// Created by 肖兰月 on 2021/5/29.
|
// Copyright © 2021 谭真. All rights reserved.
|
//
|
|
#import "TZVideoEditedPreviewController.h"
|
#import <MediaPlayer/MediaPlayer.h>
|
#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
|