123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- //
- // YMDynamicDetailInfoAlbumCell.m
- // MSYOUPAI
- //
- // Created by YoMi on 2024/3/21.
- // Copyright © 2024 MS. All rights reserved.
- //
- #import "YMDynamicDetailInfoAlbumCell.h"
- #import "YMDynamicDetailInfoAlbumCellViewModel.h"
- #import <ImageIO/ImageIO.h>
- @interface YMDynamicDetailInfoAlbumCell()
- /// ViewModel
- @property (nonatomic, strong) YMDynamicDetailInfoAlbumCellViewModel *viewModel;
- /// 基础视图
- @property (nonatomic, strong) UIView *baseView;
- /// 相册图片视图
- @property (nonatomic, strong) UIImageView *albumImageView;
- @end
- @implementation YMDynamicDetailInfoAlbumCell
- - (void)ym_setupViews{
- self.contentView.backgroundColor = UIColor.clearColor;
- self.backgroundColor = UIColor.clearColor;
-
- [self.contentView addSubview:self.baseView];
- [self.baseView addSubview:self.albumImageView];
- [self setNeedsUpdateConstraints];
- [self updateConstraintsIfNeeded];
- }
- - (void)updateConstraints{
-
- [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.contentView);
- make.left.equalTo(self.contentView);
- make.right.equalTo(self.contentView);
- make.bottom.equalTo(self.contentView);
- }];
-
- [self.albumImageView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.baseView);
- make.left.equalTo(self.baseView);
- make.right.equalTo(self.baseView);
- make.bottom.equalTo(self.baseView);
- }];
-
- [super updateConstraints];
- }
- - (void)ym_bindViewModel:(YMDynamicDetailInfoAlbumCellViewModel *)viewModel{
- if (!viewModel) {
- return;
- }
-
- _viewModel = viewModel;
-
- if ([self.viewModel.albumType isEqualToString:@"mp4"]) {
- [self getVideoPreViewImageURL:[LCTools getImageUrlWithAddress:self.viewModel.albumUrl].absoluteString withImageView:self.albumImageView];
- } else {
- [self.albumImageView sd_setImageWithURL:[[LCTools getImageUrlWithAddress:self.viewModel.albumUrl] urlWithImageScale:50]];
- }
- }
- - (UIView *)baseView{
- if (!_baseView) {
- _baseView = [[UIView alloc]init];
- }
- return _baseView;
- }
- - (UIImageView *)albumImageView{
- if (!_albumImageView) {
- _albumImageView = [[UIImageView alloc]init];
- _albumImageView.contentMode = UIViewContentModeScaleAspectFill;
- _albumImageView.clipsToBounds = YES;
- _albumImageView.layer.cornerRadius = adapt(10);
- _albumImageView.layer.masksToBounds = YES;
- }
- return _albumImageView;
- }
- // 判断是否有视频第一帧缓存
- - (void)getVideoPreViewImageURL:(NSString *)videoURL withImageView:(UIImageView *)imageView {
- [[SDImageCache sharedImageCache] queryCacheOperationForKey:videoURL done:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) {
- if (image) {
- imageView.image = image;
- } else {
- [self getVideoFirstViewImage:videoURL withImageView:imageView];
- }
- }];
- }
- // 获取视频第一帧并缓存
- - (void)getVideoFirstViewImage:(NSString *)videoURL withImageView:(UIImageView *)imageView {
- imageView.image = nil;
- __block UIImage *videoImage;
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- NSMutableDictionary * headers = [NSMutableDictionary dictionary];
- AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:videoURL] options:@{@"AVURLAssetHTTPHeaderFieldsKey": headers}];
- AVAssetImageGenerator *assetGen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
- assetGen.appliesPreferredTrackTransform = YES;
- CMTime time = CMTimeMakeWithSeconds(0.0, 600);
- NSError *error = nil;
- CMTime actualTime;
- CGImageRef image = [assetGen copyCGImageAtTime:time actualTime:&actualTime error:&error];
- videoImage = [[UIImage alloc] initWithCGImage:image];
- CGImageRelease(image);
- dispatch_async(dispatch_get_main_queue(), ^{
- // 主线程更新UI
- imageView.image = videoImage;
- // 缓存图片
- [[SDImageCache sharedImageCache] storeImage:videoImage forKey:videoURL completion:nil];
- });
- });
- }
- @end
|