123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- //
- // 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
|