YMRankingListTopThreeView.m 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. //
  2. // YMRankingListTopThreeView.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/14.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMRankingListTopThreeView.h"
  9. #import "YMRankingListTopThreeUserView.h"
  10. @interface YMRankingListTopThreeView()
  11. /// 排行榜VM
  12. @property (nonatomic, strong) YMRankingListSubCategoryViewModel *viewModel;
  13. /// 排名前三头像视图一
  14. @property (nonatomic, strong) YMRankingListTopThreeUserView *userOneView;
  15. /// 排名一视图
  16. @property (nonatomic, strong) UIImageView *rankingOneView;
  17. /// 排名前三头像视图二
  18. @property (nonatomic, strong) YMRankingListTopThreeUserView *userTwoView;
  19. /// 排名二视图
  20. @property (nonatomic, strong) UIImageView *rankingTwoView;
  21. /// 排名前三头像视图三
  22. @property (nonatomic, strong) YMRankingListTopThreeUserView *userThreeView;
  23. /// 排名二视图
  24. @property (nonatomic, strong) UIImageView *rankingThreeView;
  25. /// 遮罩视图
  26. @property (nonatomic, strong) UIView *maskView;
  27. @end
  28. @implementation YMRankingListTopThreeView
  29. - (void)ym_setupViews{
  30. [self addSubview:self.userOneView];
  31. [self addSubview:self.rankingOneView];
  32. [self addSubview:self.userTwoView];
  33. [self addSubview:self.rankingTwoView];
  34. [self addSubview:self.userThreeView];
  35. [self addSubview:self.rankingThreeView];
  36. [self addSubview:self.maskView];
  37. [self setNeedsUpdateConstraints];
  38. [self updateConstraintsIfNeeded];
  39. }
  40. - (void)updateConstraints{
  41. [self.userOneView mas_makeConstraints:^(MASConstraintMaker *make) {
  42. make.centerX.equalTo(self.mas_centerX);
  43. make.width.mas_equalTo(adapt(140));
  44. make.height.mas_equalTo(adapt(115));
  45. }];
  46. [self.rankingOneView mas_makeConstraints:^(MASConstraintMaker *make) {
  47. make.centerX.equalTo(self.userOneView.mas_centerX);
  48. make.top.equalTo(self.userOneView.mas_bottom).offset(adapt(10));
  49. make.bottom.equalTo(self.maskView.mas_top);
  50. make.width.mas_equalTo(adapt(91));
  51. make.height.mas_equalTo(adapt(74));
  52. }];
  53. [self.userTwoView mas_makeConstraints:^(MASConstraintMaker *make) {
  54. make.left.equalTo(self).offset(adapt(20));
  55. }];
  56. [self.rankingTwoView mas_makeConstraints:^(MASConstraintMaker *make) {
  57. make.centerX.equalTo(self.userTwoView.mas_centerX);
  58. make.top.equalTo(self.userTwoView.mas_bottom).offset(adapt(10));
  59. make.bottom.equalTo(self.rankingOneView.mas_bottom);
  60. make.width.mas_equalTo(adapt(102));
  61. make.height.mas_equalTo(adapt(85));
  62. }];
  63. [self.userThreeView mas_makeConstraints:^(MASConstraintMaker *make) {
  64. make.right.equalTo(self).offset(adapt(-20));
  65. }];
  66. [self.rankingThreeView mas_makeConstraints:^(MASConstraintMaker *make) {
  67. make.centerX.equalTo(self.userThreeView.mas_centerX);
  68. make.top.equalTo(self.userThreeView.mas_bottom).offset(adapt(10));
  69. make.bottom.equalTo(self.rankingOneView.mas_bottom);
  70. make.width.mas_equalTo(adapt(102));
  71. make.height.mas_equalTo(adapt(85));
  72. }];
  73. [self.maskView mas_makeConstraints:^(MASConstraintMaker *make) {
  74. make.left.equalTo(self);
  75. make.right.equalTo(self);
  76. make.bottom.equalTo(self);
  77. make.height.mas_equalTo(adapt(20));
  78. }];
  79. [super updateConstraints];
  80. }
  81. - (void)ym_bindViewModel:(YMRankingListSubCategoryViewModel*)viewModel{
  82. if (!viewModel) {
  83. return;
  84. }
  85. _viewModel = viewModel;
  86. @weakify(self)
  87. [[[[RACObserve(self.viewModel, rankingOneUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) {
  88. @strongify(self)
  89. if (VM == nil || [VM isKindOfClass:[NSNull class]]) {
  90. self.userOneView.hidden = YES;
  91. } else {
  92. self.userOneView.hidden = NO;
  93. [self.userOneView ym_bindViewModel:VM];
  94. }
  95. }];
  96. [[[[RACObserve(self.viewModel, rankingTwoUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) {
  97. @strongify(self)
  98. if (VM == nil || [VM isKindOfClass:[NSNull class]]) {
  99. self.userTwoView.hidden = YES;
  100. } else {
  101. self.userTwoView.hidden = NO;
  102. [self.userTwoView ym_bindViewModel:VM];
  103. }
  104. }];
  105. [[[[RACObserve(self.viewModel, rankingThreeUser) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(YMRankingListCellViewModel * VM) {
  106. @strongify(self)
  107. if (VM == nil || [VM isKindOfClass:[NSNull class]]) {
  108. self.userThreeView.hidden = YES;
  109. } else {
  110. self.userThreeView.hidden = NO;
  111. [self.userThreeView ym_bindViewModel:VM];
  112. }
  113. }];
  114. }
  115. - (YMRankingListTopThreeUserView *)userOneView{
  116. if (!_userOneView) {
  117. _userOneView = [[YMRankingListTopThreeUserView alloc]init];
  118. _userOneView.pendantImage = ImageByName(@"ym_ranking_avatar_one_pendant");
  119. _userOneView.avatarSize = 64;
  120. _userOneView.userInteractionEnabled = YES;
  121. WS(weakSelf)
  122. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  123. [_userOneView addGestureRecognizer:tap];
  124. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  125. [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingOneUser.rankingUserId)];
  126. }];
  127. }
  128. return _userOneView;
  129. }
  130. - (UIImageView *)rankingOneView{
  131. if (!_rankingOneView) {
  132. _rankingOneView = [[UIImageView alloc]init];
  133. _rankingOneView.image = ImageByName(@"ym_ranking_one_booth");
  134. }
  135. return _rankingOneView;
  136. }
  137. - (YMRankingListTopThreeUserView *)userTwoView{
  138. if (!_userTwoView) {
  139. _userTwoView = [[YMRankingListTopThreeUserView alloc]init];
  140. _userTwoView.pendantImage = ImageByName(@"ym_ranking_avatar_two_pendant");
  141. _userTwoView.avatarSize = 52;
  142. _userTwoView.userInteractionEnabled = YES;
  143. WS(weakSelf)
  144. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  145. [_userTwoView addGestureRecognizer:tap];
  146. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  147. [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingTwoUser.rankingUserId)];
  148. }];
  149. }
  150. return _userTwoView;
  151. }
  152. - (UIImageView *)rankingTwoView{
  153. if (!_rankingTwoView) {
  154. _rankingTwoView = [[UIImageView alloc]init];
  155. _rankingTwoView.image = ImageByName(@"ym_ranking_two_booth");
  156. }
  157. return _rankingTwoView;
  158. }
  159. - (YMRankingListTopThreeUserView *)userThreeView{
  160. if (!_userThreeView) {
  161. _userThreeView = [[YMRankingListTopThreeUserView alloc]init];
  162. _userThreeView.pendantImage = ImageByName(@"ym_ranking_avatar_three_pendant");
  163. _userThreeView.avatarSize = 52;
  164. _userThreeView.userInteractionEnabled = YES;
  165. WS(weakSelf)
  166. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  167. [_userThreeView addGestureRecognizer:tap];
  168. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  169. [weakSelf.viewModel.gotoPersonalPageSubject sendNext:@(self.viewModel.rankingThreeUser.rankingUserId)];
  170. }];
  171. }
  172. return _userThreeView;
  173. }
  174. - (UIImageView *)rankingThreeView{
  175. if (!_rankingThreeView) {
  176. _rankingThreeView = [[UIImageView alloc]init];
  177. _rankingThreeView.image = ImageByName(@"ym_ranking_three_booth");
  178. }
  179. return _rankingThreeView;
  180. }
  181. - (UIView *)maskView{
  182. if (!_maskView) {
  183. _maskView = [[UIView alloc]init];
  184. _maskView.backgroundColor = HexColorFromRGB(0xFFFFFF);
  185. [_maskView addRectCorner:UIRectCornerTopLeft|UIRectCornerTopRight radius:20];
  186. }
  187. return _maskView;
  188. }
  189. @end