JXCategorySubTitleImageCell.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // JXCategorySubTitleImageCell.m
  3. // ObjcExample
  4. //
  5. // Created by gaokun on 2021/1/21.
  6. //
  7. #import "JXCategorySubTitleImageCell.h"
  8. #import "JXCategorySubTitleImageCellModel.h"
  9. @interface JXCategorySubTitleImageCell()
  10. @property (nonatomic, strong) id currentImageInfo;
  11. @property (nonatomic, strong) NSLayoutConstraint *imageViewWidthConstraint;
  12. @property (nonatomic, strong) NSLayoutConstraint *imageViewHeightConstraint;
  13. @end
  14. @implementation JXCategorySubTitleImageCell
  15. - (void)prepareForReuse {
  16. [super prepareForReuse];
  17. self.currentImageInfo = nil;
  18. }
  19. - (void)initializeViews {
  20. [super initializeViews];
  21. [self initialImageViewWithClass:[UIImageView class]];
  22. [self.contentView addSubview:self.imageView];
  23. }
  24. - (void)initialImageViewWithClass:(Class)cls {
  25. _imageView = [[cls alloc] init];
  26. self.imageView.translatesAutoresizingMaskIntoConstraints = NO;
  27. self.imageView.contentMode = UIViewContentModeScaleAspectFit;
  28. self.imageViewWidthConstraint = [self.imageView.widthAnchor constraintEqualToConstant:0];
  29. self.imageViewWidthConstraint.active = YES;
  30. self.imageViewHeightConstraint = [self.imageView.heightAnchor constraintEqualToConstant:0];
  31. self.imageViewHeightConstraint.active = YES;
  32. }
  33. - (void)layoutSubviews {
  34. [super layoutSubviews];
  35. JXCategorySubTitleImageCellModel *myCellModel = (JXCategorySubTitleImageCellModel *)self.cellModel;
  36. CGSize imageSize = myCellModel.imageSize;
  37. self.imageViewWidthConstraint.constant = imageSize.width;
  38. self.imageViewHeightConstraint.constant = imageSize.height;
  39. if (myCellModel.subTitleInCenterX && (myCellModel.positionStyle == JXCategorySubTitlePositionStyle_Top || myCellModel.positionStyle == JXCategorySubTitlePositionStyle_Bottom)) {
  40. [NSLayoutConstraint deactivateConstraints:@[self.subTitleLabelCenterX]];
  41. [self.subTitleLabel.centerXAnchor constraintEqualToAnchor:self.contentView.centerXAnchor].active = YES;
  42. }
  43. self.imageView.hidden = NO;
  44. self.titleLabelCenterX.constant = 0;
  45. switch (myCellModel.imageType) {
  46. case JXCategorySubTitleImageType_Left:
  47. [self.imageView.centerYAnchor constraintEqualToAnchor:self.titleLabel.centerYAnchor].active = YES;
  48. [self.imageView.rightAnchor constraintEqualToAnchor:self.titleLabel.leftAnchor constant:-myCellModel.titleImageSpacing].active = YES;
  49. self.titleLabelCenterX.constant = 2 * myCellModel.titleImageSpacing;
  50. break;
  51. case JXCategorySubTitleImageType_Right:
  52. [self.imageView.centerYAnchor constraintEqualToAnchor:self.titleLabel.centerYAnchor].active = YES;
  53. [self.imageView.leftAnchor constraintEqualToAnchor:self.titleLabel.rightAnchor constant:myCellModel.titleImageSpacing].active = YES;
  54. self.titleLabelCenterX.constant = -2 * myCellModel.titleImageSpacing;
  55. break;
  56. default:
  57. self.imageView.hidden = YES;
  58. break;
  59. }
  60. }
  61. - (void)reloadData:(JXCategoryBaseCellModel *)cellModel {
  62. [super reloadData:cellModel];
  63. JXCategorySubTitleImageCellModel *myCellModel = (JXCategorySubTitleImageCellModel *)cellModel;
  64. if (myCellModel.imageViewClass) {
  65. [self initialImageViewWithClass:myCellModel.imageViewClass];
  66. }
  67. //因为`- (void)reloadData:(JXCategoryBaseCellModel *)cellModel`方法会回调多次,尤其是左右滚动的时候会调用无数次,如果每次都触发图片加载,会非常消耗性能。所以只会在图片发生了变化的时候,才进行图片加载。
  68. if (myCellModel.loadImageBlock != nil) {
  69. id currentImageInfo = myCellModel.imageInfo;
  70. if (myCellModel.isSelected) {
  71. currentImageInfo = myCellModel.selectedImageInfo;
  72. }
  73. if (currentImageInfo && [currentImageInfo isKindOfClass:[NSString class]] && ![currentImageInfo isEqualToString:self.currentImageInfo]) {
  74. self.currentImageInfo = currentImageInfo;
  75. myCellModel.loadImageBlock(self.imageView, currentImageInfo);
  76. }else if (currentImageInfo && currentImageInfo != self.currentImageInfo) {
  77. self.currentImageInfo = currentImageInfo;
  78. myCellModel.loadImageBlock(self.imageView, currentImageInfo);
  79. }
  80. }
  81. if (myCellModel.isImageZoomEnabled) {
  82. self.imageView.transform = CGAffineTransformMakeScale(myCellModel.imageZoomScale, myCellModel.imageZoomScale);
  83. }else {
  84. self.imageView.transform = CGAffineTransformIdentity;
  85. }
  86. }
  87. @end