123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- //
- // YMPersonalPageDynamicCell.m
- // MSYOUPAI
- //
- // Created by YoMi on 2024/3/3.
- // Copyright © 2024 MS. All rights reserved.
- //
- #import "YMPersonalPageDynamicCell.h"
- #import "YMPersonalPageDynamicCellViewModel.h"
- @interface YMPersonalPageDynamicCell()
- /// ViewModel
- @property (nonatomic, strong) YMPersonalPageDynamicCellViewModel *viewModel;
- /// 基础视图
- @property (nonatomic, strong) UIView *baseView;
- /// 动态图片视图
- @property (nonatomic, strong) UIImageView *dynamicCoverView;
- @end
- @implementation YMPersonalPageDynamicCell
- - (void)ym_setupViews{
-
- [self.contentView addSubview:self.baseView];
- [self.baseView addSubview:self.dynamicCoverView];
-
- [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.dynamicCoverView 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:(YMPersonalPageDynamicCellViewModel*)viewModel{
- if (!viewModel) {
- return;
- }
- _viewModel = viewModel;
- if([viewModel.dynamicCoverUrl rangeOfString:@"mp4"].location != NSNotFound){
- NSURL *url = [LCTools getImageUrlWithAddress:viewModel.dynamicCoverUrl];
- if(url){
- [self videoImageWithvideoURL:url completion:^(UIImage *image) {
- // 主线程执行:
- dispatch_async(dispatch_get_main_queue(), ^{
- [self.dynamicCoverView setImage:image];
- });
-
- }];
- }
- }else{
-
- [self.dynamicCoverView sd_setImageWithURL:[LCTools getImageUrlWithAddress:viewModel.dynamicCoverUrl]];
- }
- }
- - (UIView *)baseView{
- if (!_baseView) {
- _baseView = [[UIView alloc]init];
- _baseView.clipsToBounds = YES;
- _baseView.layer.cornerRadius = adapt(8);
- }
- return _baseView;
- }
- - (UIImageView *)dynamicCoverView{
- if (!_dynamicCoverView) {
- _dynamicCoverView = [[UIImageView alloc]init];
- _dynamicCoverView.backgroundColor = UIColor.lightGrayColor;
- _dynamicCoverView.contentMode = UIViewContentModeScaleAspectFill;
- }
- return _dynamicCoverView;
- }
- //获取视频预览图,这里用到了SDImage的缓存图片功能:
- - (void)videoImageWithvideoURL:(NSURL *)videoURL completion:(void (^_Nullable)(UIImage *image))completionBlock{
-
- //先从缓存中找是否有图片
-
- SDImageCache *cache = [SDImageCache sharedImageCache];
- UIImage *memoryImage = [cache imageFromMemoryCacheForKey:videoURL.absoluteString];
- if(memoryImage) {
- completionBlock(memoryImage);
- return;
- }else{
- UIImage*diskImage = [cache imageFromDiskCacheForKey:videoURL.absoluteString];
- if(diskImage) {
- completionBlock(diskImage);
- return;
- }
- }
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-
- AVURLAsset *asset = [[AVURLAsset alloc]initWithURL:videoURL options:nil];
- NSParameterAssert(asset);
- AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc]initWithAsset:asset];
- assetImageGenerator.appliesPreferredTrackTransform = YES;
- assetImageGenerator.requestedTimeToleranceAfter = kCMTimeZero;//必须设置,否则时间对应不上
- assetImageGenerator.requestedTimeToleranceBefore = kCMTimeZero;//必须设置,否则时间对应不上
- assetImageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
-
- CGImageRef thumbnailImageRef = NULL;
- CFTimeInterval thumbnailImageTime = 1;
- NSError *thumbnailImageGenerationError =nil;
-
- thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMakeWithSeconds(thumbnailImageTime, 10) actualTime:NULL error:&thumbnailImageGenerationError];
-
- if(!thumbnailImageRef)
-
- NSLog(@"thumbnailImageGenerationError %@",thumbnailImageGenerationError);
-
- UIImage *thumbnailImage = thumbnailImageRef ? [[UIImage alloc]initWithCGImage:thumbnailImageRef] :nil;
- if(thumbnailImage){
- completionBlock(thumbnailImage);
- dispatch_async(dispatch_get_main_queue(), ^{
- SDImageCache *cache = [SDImageCache sharedImageCache];
-
- // [cache storeImageToMemory:thumbnailImage forKey:videoURL.absoluteString];
- [cache storeImage:thumbnailImage forKey:videoURL.absoluteString completion:^{
-
- }];
- });
- }
-
-
- });
-
- }
- @end
|