YMPersonalPageSubAlbumCell.m 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //
  2. // YMPersonalPageSubAlbumCell.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/17.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMPersonalPageSubAlbumCell.h"
  9. #import "YMPersonalPageAlbumCellViewModel.h"
  10. @interface YMPersonalPageSubAlbumCell()
  11. /// ViewModel
  12. @property (nonatomic, strong) YMPersonalPageAlbumCellViewModel *viewModel;
  13. /// 基础视图
  14. @property (nonatomic, strong) UIView *baseView;
  15. /// 相册图片视图
  16. @property (nonatomic, strong) UIImageView *albumImageView;
  17. @end
  18. @implementation YMPersonalPageSubAlbumCell
  19. - (void)ym_setupViews{
  20. [self.contentView addSubview:self.baseView];
  21. [self.baseView addSubview:self.albumImageView];
  22. [self setNeedsUpdateConstraints];
  23. [self updateConstraintsIfNeeded];
  24. }
  25. - (void)updateConstraints {
  26. [self.baseView mas_makeConstraints:^(MASConstraintMaker *make) {
  27. make.top.equalTo(self.contentView);
  28. make.left.equalTo(self.contentView);
  29. make.right.equalTo(self.contentView);
  30. make.bottom.equalTo(self.contentView);
  31. }];
  32. [self.albumImageView mas_makeConstraints:^(MASConstraintMaker *make) {
  33. make.top.equalTo(self.baseView);
  34. make.left.equalTo(self.baseView);
  35. make.right.equalTo(self.baseView);
  36. make.bottom.equalTo(self.baseView);
  37. }];
  38. [super updateConstraints];
  39. }
  40. - (void)ym_bindViewModel:(YMPersonalPageAlbumCellViewModel*)viewModel{
  41. if (!viewModel) {
  42. return;
  43. }
  44. _viewModel = viewModel;
  45. [self.albumImageView sd_setImageWithURL:[LCTools getImageUrlWithAddress:viewModel.albumUrl]];
  46. }
  47. - (void)setBorderWidth:(NSInteger)borderWidth{
  48. _borderWidth = borderWidth;
  49. self.baseView.layer.borderWidth = borderWidth;
  50. }
  51. - (UIView *)baseView{
  52. if (!_baseView) {
  53. _baseView = [[UIView alloc]init];
  54. _baseView.clipsToBounds = YES;
  55. _baseView.layer.cornerRadius = adapt(8);
  56. _baseView.layer.borderWidth = self.borderWidth;
  57. _baseView.layer.borderColor = HexColorFromRGB(0xFFFFFF).CGColor;
  58. }
  59. return _baseView;
  60. }
  61. - (UIImageView *)albumImageView{
  62. if (!_albumImageView) {
  63. _albumImageView = [[UIImageView alloc]init];
  64. _albumImageView.backgroundColor = UIColor.lightGrayColor;
  65. _albumImageView.contentMode = UIViewContentModeScaleAspectFill;
  66. }
  67. return _albumImageView;
  68. }
  69. //获取视频预览图,这里用到了SDImage的缓存图片功能:
  70. - (void)videoImageWithvideoURL:(NSURL *)videoURL completion:(void (^_Nullable)(UIImage *image))completionBlock{
  71. //先从缓存中找是否有图片
  72. SDImageCache *cache = [SDImageCache sharedImageCache];
  73. UIImage *memoryImage = [cache imageFromMemoryCacheForKey:videoURL.absoluteString];
  74. if(memoryImage) {
  75. completionBlock(memoryImage);
  76. return;
  77. }else{
  78. UIImage*diskImage = [cache imageFromDiskCacheForKey:videoURL.absoluteString];
  79. if(diskImage) {
  80. completionBlock(diskImage);
  81. return;
  82. }
  83. }
  84. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  85. AVURLAsset *asset = [[AVURLAsset alloc]initWithURL:videoURL options:nil];
  86. NSParameterAssert(asset);
  87. AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc]initWithAsset:asset];
  88. assetImageGenerator.appliesPreferredTrackTransform = YES;
  89. assetImageGenerator.requestedTimeToleranceAfter = kCMTimeZero;//必须设置,否则时间对应不上
  90. assetImageGenerator.requestedTimeToleranceBefore = kCMTimeZero;//必须设置,否则时间对应不上
  91. assetImageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
  92. CGImageRef thumbnailImageRef = NULL;
  93. CFTimeInterval thumbnailImageTime = 1;
  94. NSError *thumbnailImageGenerationError =nil;
  95. thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMakeWithSeconds(thumbnailImageTime, 10) actualTime:NULL error:&thumbnailImageGenerationError];
  96. if(!thumbnailImageRef)
  97. NSLog(@"thumbnailImageGenerationError %@",thumbnailImageGenerationError);
  98. UIImage *thumbnailImage = thumbnailImageRef ? [[UIImage alloc]initWithCGImage:thumbnailImageRef] :nil;
  99. if(thumbnailImage){
  100. completionBlock(thumbnailImage);
  101. dispatch_async(dispatch_get_main_queue(), ^{
  102. SDImageCache *cache = [SDImageCache sharedImageCache];
  103. // [cache storeImageToMemory:thumbnailImage forKey:videoURL.absoluteString];
  104. [cache storeImage:thumbnailImage forKey:videoURL.absoluteString completion:^{
  105. }];
  106. });
  107. }
  108. });
  109. }
  110. @end