You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
6.1 KiB
Objective-C

//
// SuperPlayerFastView.m
// TXLiteAVDemo
//
// Created by annidyfeng on 2018/8/24.
// Copyright © 2018年 Tencent. All rights reserved.
//
#import "SuperPlayerFastView.h"
#import "SuperPlayer.h"
#import "SuperPlayerView+Private.h"
#import "UIView+MMLayout.h"
#define THUMB_VIEW_WIDTH 142
#define THUMB_VIEW_HEIGHT (142/(16/9.0))
@implementation SuperPlayerFastView
- (instancetype)init {
self = [super init];
self.backgroundColor = RGBA(0, 0, 0, 0.2);
_videoRatio = 1;
_style = -1;
return self;
}
- (UILabel *)textLabel {
if (!_textLabel) {
_textLabel = [[UILabel alloc] init];
_textLabel.textColor = [UIColor whiteColor];
_textLabel.textAlignment = NSTextAlignmentCenter;
_textLabel.font = [UIFont systemFontOfSize:18.0];
[self addSubview:_textLabel];
}
return _textLabel;
}
- (UIImageView *)imgView {
if (!_imgView) {
_imgView = [[UIImageView alloc] init];
[self addSubview:_imgView];
}
return _imgView;
}
- (UIImageView *)thumbView {
if (!_thumbView) {
_thumbView = [[UIImageView alloc] init];
_thumbView.contentMode = UIViewContentModeScaleAspectFit;
_thumbView.backgroundColor = [UIColor blackColor];
[self addSubview:_thumbView];
}
return _thumbView;
}
- (UIImageView *)snapshotView {
if (!_snapshotView) {
_snapshotView = [[UIImageView alloc] init];
_snapshotView.contentMode = UIViewContentModeScaleAspectFit;
_snapshotView.backgroundColor = [UIColor blackColor];
[self addSubview:_snapshotView];
[_snapshotView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(THUMB_VIEW_WIDTH);
make.height.mas_equalTo(THUMB_VIEW_HEIGHT);
make.center.equalTo(self);
}];
}
return _snapshotView;
}
- (UIProgressView *)progressView {
if (!_progressView) {
_progressView = [[UIProgressView alloc] init];
_progressView.progressTintColor = [UIColor whiteColor];
_progressView.trackTintColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.4];
[self addSubview:_progressView];
}
return _progressView;
}
- (void)setStyle:(FastViewStyle)style {
if (_style == style)
return;
switch (style) {
case ImgWithProgress: {
self.imgView.hidden = self.progressView.hidden = NO;
self.textLabel.hidden = self.thumbView.hidden = self.snapshotView.hidden = YES;
self.imgView.contentMode = UIViewContentModeScaleAspectFit;
[self.imgView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self);
}];
[self.progressView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.equalTo(self.imgView.mas_bottom).offset(10);
make.width.mas_equalTo(120);
}];
}
break;
case ImgWithText: {
self.thumbView.hidden = self.textLabel.hidden = NO;
self.progressView.hidden = self.imgView.hidden = self.snapshotView.hidden = YES;
[self.thumbView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.width.mas_equalTo(THUMB_VIEW_WIDTH);
make.height.mas_equalTo(THUMB_VIEW_HEIGHT);
make.bottom.equalTo(self.mas_centerY).offset(20);
}];
[self.textLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.equalTo(self.thumbView.mas_bottom).offset(10);
}];
}
break;
case TextWithProgress: {
self.progressView.hidden = self.textLabel.hidden = NO;
self.imgView.hidden = self.thumbView.hidden = self.snapshotView.hidden = YES;
[self.textLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self);
}];
[self.progressView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.equalTo(self.textLabel.mas_bottom).offset(10);
make.width.mas_equalTo(120);
}];
}
break;
case SnapshotImg: {
self.progressView.hidden = self.textLabel.hidden = self.imgView.hidden = self.thumbView.hidden = YES;
self.snapshotView.hidden = NO;
}
break;
default:
break;
}
_style = style;
}
- (void)showImg:(UIImage *)img withProgress:(GLfloat)progress
{
self.imgView.image = img;
self.progressView.progress = progress;
self.style = ImgWithProgress;
}
- (void)showThumbnail:(UIImage *)img withText:(NSString *)text
{
self.thumbView.image = [self imageWithImage:img];
self.textLabel.text = text;
[self.textLabel sizeToFit];
self.style = ImgWithText;
}
- (void)showText:(NSString *)text withText:(GLfloat)progress
{
self.textLabel.text = text;
[self.textLabel sizeToFit];
self.progressView.progress = progress;
self.style = TextWithProgress;
}
- (void)showSnapshot:(UIImage *)img
{
self.snapshotView.image = img;
self.style = SnapshotImg;
}
- (UIImage *)imageWithImage:(UIImage *)image {
//UIGraphicsBeginImageContext(newSize);
// In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
// Pass 1.0 to force exact pixel size.
CGSize newSize = CGSizeMake(THUMB_VIEW_WIDTH, THUMB_VIEW_HEIGHT);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
CGRect rect = AVMakeRectWithAspectRatioInsideRect(CGSizeMake(image.size.width, image.size.width/self.videoRatio), CGRectMake(0, 0, THUMB_VIEW_WIDTH, THUMB_VIEW_HEIGHT));
[image drawInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
@end