MJRefreshStateTrailer.m 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //
  2. // MJRefreshStateTrailer.m
  3. // MJRefresh
  4. //
  5. // Created by kinarobin on 2020/5/3.
  6. // Copyright © 2020 小码哥. All rights reserved.
  7. //
  8. #import "MJRefreshStateTrailer.h"
  9. #import "NSBundle+MJRefresh.h"
  10. #import "UIView+MJExtension.h"
  11. @interface MJRefreshStateTrailer() {
  12. /** 显示刷新状态的label */
  13. __unsafe_unretained UILabel *_stateLabel;
  14. }
  15. /** 所有状态对应的文字 */
  16. @property (strong, nonatomic) NSMutableDictionary *stateTitles;
  17. @end
  18. @implementation MJRefreshStateTrailer
  19. #pragma mark - 懒加载
  20. - (NSMutableDictionary *)stateTitles {
  21. if (!_stateTitles) {
  22. self.stateTitles = [NSMutableDictionary dictionary];
  23. }
  24. return _stateTitles;
  25. }
  26. - (UILabel *)stateLabel {
  27. if (!_stateLabel) {
  28. UILabel *stateLabel = [UILabel mj_label];
  29. stateLabel.numberOfLines = 0;
  30. [self addSubview:_stateLabel = stateLabel];
  31. }
  32. return _stateLabel;
  33. }
  34. #pragma mark - 公共方法
  35. - (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state {
  36. if (title == nil) return self;
  37. self.stateTitles[@(state)] = title;
  38. self.stateLabel.text = self.stateTitles[@(self.state)];
  39. return self;
  40. }
  41. - (void)textConfiguration {
  42. // 初始化文字
  43. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerIdleText] forState:MJRefreshStateIdle];
  44. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStatePulling];
  45. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStateRefreshing];
  46. }
  47. #pragma mark - 覆盖父类的方法
  48. - (void)prepare {
  49. [super prepare];
  50. [self textConfiguration];
  51. }
  52. - (void)i18nDidChange {
  53. [self textConfiguration];
  54. [super i18nDidChange];
  55. }
  56. - (void)setState:(MJRefreshState)state {
  57. MJRefreshCheckState
  58. // 设置状态文字
  59. self.stateLabel.text = self.stateTitles[@(state)];
  60. }
  61. - (void)placeSubviews {
  62. [super placeSubviews];
  63. if (self.stateLabel.hidden) return;
  64. BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0;
  65. CGFloat stateLabelW = ceil(self.stateLabel.font.pointSize);
  66. // 状态
  67. if (noConstrainsOnStatusLabel) {
  68. self.stateLabel.center = CGPointMake(self.mj_w * 0.5, self.mj_h * 0.5);
  69. self.stateLabel.mj_size = CGSizeMake(stateLabelW, self.mj_h) ;
  70. }
  71. }
  72. - (NSArray<UIView *> *)flipsHorizontallyInOppositeLayoutDirectionViews {
  73. return @[
  74. self.stateLabel
  75. ];
  76. }
  77. @end