JXCategoryImageCell.m 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // JXCategoryImageCell.m
  3. // JXCategoryView
  4. //
  5. // Created by jiaxin on 2018/8/20.
  6. // Copyright © 2018年 jiaxin. All rights reserved.
  7. //
  8. #import "JXCategoryImageCell.h"
  9. #import "JXCategoryImageCellModel.h"
  10. @interface JXCategoryImageCell()
  11. @property (nonatomic, strong) id currentImageInfo;
  12. @property (nonatomic, strong) NSString *currentImageName;
  13. @property (nonatomic, strong) NSURL *currentImageURL;
  14. @end
  15. @implementation JXCategoryImageCell
  16. - (void)prepareForReuse {
  17. [super prepareForReuse];
  18. self.currentImageInfo = nil;
  19. self.currentImageName = nil;
  20. self.currentImageURL = nil;
  21. }
  22. - (void)initializeViews {
  23. [super initializeViews];
  24. _imageView = [[UIImageView alloc] init];
  25. _imageView.contentMode = UIViewContentModeScaleAspectFit;
  26. [self.contentView addSubview:_imageView];
  27. }
  28. - (void)layoutSubviews {
  29. [super layoutSubviews];
  30. JXCategoryImageCellModel *myCellModel = (JXCategoryImageCellModel *)self.cellModel;
  31. self.imageView.bounds = CGRectMake(0, 0, myCellModel.imageSize.width, myCellModel.imageSize.height);
  32. self.imageView.center = self.contentView.center;
  33. if (myCellModel.imageCornerRadius && (myCellModel.imageCornerRadius != 0)) {
  34. self.imageView.layer.cornerRadius = myCellModel.imageCornerRadius;
  35. self.imageView.layer.masksToBounds = YES;
  36. }
  37. }
  38. - (void)reloadData:(JXCategoryBaseCellModel *)cellModel {
  39. [super reloadData:cellModel];
  40. JXCategoryImageCellModel *myCellModel = (JXCategoryImageCellModel *)cellModel;
  41. //因为`- (void)reloadData:(JXCategoryBaseCellModel *)cellModel`方法会回调多次,尤其是左右滚动的时候会调用无数次,如果每次都触发图片加载,会非常消耗性能。所以只会在图片发生了变化的时候,才进行图片加载。
  42. if (myCellModel.loadImageBlock != nil) {
  43. id currentImageInfo = myCellModel.imageInfo;
  44. if (myCellModel.isSelected) {
  45. currentImageInfo = myCellModel.selectedImageInfo;
  46. }
  47. if (currentImageInfo && ![currentImageInfo isEqual:self.currentImageInfo]) {
  48. self.currentImageInfo = currentImageInfo;
  49. if (myCellModel.loadImageBlock) {
  50. myCellModel.loadImageBlock(self.imageView, currentImageInfo);
  51. }
  52. }
  53. } else {
  54. NSString *currentImageName;
  55. NSURL *currentImageURL;
  56. if (myCellModel.imageName) {
  57. currentImageName = myCellModel.imageName;
  58. } else if (myCellModel.imageURL) {
  59. currentImageURL = myCellModel.imageURL;
  60. }
  61. if (myCellModel.isSelected) {
  62. if (myCellModel.selectedImageName) {
  63. currentImageName = myCellModel.selectedImageName;
  64. } else if (myCellModel.selectedImageURL) {
  65. currentImageURL = myCellModel.selectedImageURL;
  66. }
  67. }
  68. if (currentImageName && ![currentImageName isEqualToString:self.currentImageName]) {
  69. self.currentImageName = currentImageName;
  70. self.imageView.image = [UIImage imageNamed:currentImageName];
  71. } else if (currentImageURL && ![currentImageURL.absoluteString isEqualToString:self.currentImageURL.absoluteString]) {
  72. self.currentImageURL = currentImageURL;
  73. if (myCellModel.loadImageCallback) {
  74. myCellModel.loadImageCallback(self.imageView, currentImageURL);
  75. }
  76. }
  77. }
  78. if (myCellModel.isImageZoomEnabled) {
  79. self.imageView.transform = CGAffineTransformMakeScale(myCellModel.imageZoomScale, myCellModel.imageZoomScale);
  80. }else {
  81. self.imageView.transform = CGAffineTransformIdentity;
  82. }
  83. }
  84. @end