// // YMPersonalPageSubAlbumCell.m // MSYOUPAI // // Created by YoMi on 2024/2/17. // Copyright © 2024 MS. All rights reserved. // #import "YMPersonalPageSubAlbumCell.h" #import "YMPersonalPageAlbumCellViewModel.h" @interface YMPersonalPageSubAlbumCell() /// ViewModel @property (nonatomic, strong) YMPersonalPageAlbumCellViewModel *viewModel; /// 基础视图 @property (nonatomic, strong) UIView *baseView; /// 相册图片视图 @property (nonatomic, strong) UIImageView *albumImageView; @end @implementation YMPersonalPageSubAlbumCell - (void)ym_setupViews{ [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:(YMPersonalPageAlbumCellViewModel*)viewModel{ if (!viewModel) { return; } _viewModel = viewModel; [self.albumImageView sd_setImageWithURL:[LCTools getImageUrlWithAddress:viewModel.albumUrl]]; } - (void)setBorderWidth:(NSInteger)borderWidth{ _borderWidth = borderWidth; self.baseView.layer.borderWidth = borderWidth; } - (UIView *)baseView{ if (!_baseView) { _baseView = [[UIView alloc]init]; _baseView.clipsToBounds = YES; _baseView.layer.cornerRadius = adapt(8); _baseView.layer.borderWidth = self.borderWidth; _baseView.layer.borderColor = HexColorFromRGB(0xFFFFFF).CGColor; } return _baseView; } - (UIImageView *)albumImageView{ if (!_albumImageView) { _albumImageView = [[UIImageView alloc]init]; _albumImageView.backgroundColor = UIColor.lightGrayColor; _albumImageView.contentMode = UIViewContentModeScaleAspectFill; } return _albumImageView; } //获取视频预览图,这里用到了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