YMInvitingPrizesMyInvitationView.m 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. //
  2. // YMInvitingPrizesMyInvitationView.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/3/6.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMInvitingPrizesMyInvitationView.h"
  9. #import "YMInvitingPrizesViewModel.h"
  10. #define kinvitationInfoGridView_rowCount 2
  11. #define kinvitationInfoGridView_itemHeight 60
  12. @interface YMInvitingPrizesMyInvitationView ()
  13. /// 邀请有奖VM
  14. @property (nonatomic, strong) YMInvitingPrizesViewModel *viewModel;
  15. /// 顶部右视图
  16. @property (nonatomic, strong) UIView *topRightView;
  17. @property (nonatomic, strong) UIImageView *bgImgv;
  18. /// 渐变色图片视图
  19. @property (nonatomic, strong) UILabel *titleLb;
  20. /// 渐变色图片视图
  21. @property (nonatomic, strong) UIImageView *titleImgv;
  22. /// 渐变色图片视图
  23. @property (nonatomic, strong) UIImageView *titleImgvL;
  24. /// 渐变色图片视图
  25. @property (nonatomic, strong) UIImageView *titleImgvR;
  26. /// 邀请人数
  27. @property (nonatomic, strong) UILabel *inviteNumLb;
  28. /// 邀请人数描述
  29. @property (nonatomic, strong) UILabel *inviteNumDesLb;
  30. /// 邀请明细
  31. @property (nonatomic, strong) UIButton *invitationBreakdownBtn;
  32. /// 奖励背景图
  33. @property (nonatomic, strong) UIView *jiangLiBgv;
  34. /// 奖励图标
  35. @property (nonatomic, strong) UIImageView *jiangLiIcon;
  36. /// 奖励数量
  37. @property (nonatomic, strong) UILabel *jiangLiNumLb;
  38. /// 奖励数量描述
  39. @property (nonatomic, strong) UILabel *jiangLiNumDesLb;
  40. /// 底部基础视图
  41. @property (nonatomic, strong) UIView *bottomBaseView;
  42. /// 邀请信息宫格配置
  43. @property (nonatomic, strong) BAGridView_Config *invitationInfoGridViewConfig;
  44. /// 邀请信息宫格视图
  45. @property (nonatomic, strong) BAGridView *invitationInfoGridView;
  46. @end
  47. @implementation YMInvitingPrizesMyInvitationView
  48. - (void)ym_setupViews{
  49. [self addSubview:self.topRightView];
  50. [self.topRightView addSubview:self.bgImgv];
  51. [self.topRightView addSubview:self.titleLb];
  52. [self.topRightView addSubview:self.titleImgvL];
  53. [self.topRightView addSubview:self.titleImgvR];
  54. [self.topRightView addSubview:self.inviteNumLb];
  55. [self.topRightView addSubview:self.inviteNumDesLb];
  56. [self.topRightView addSubview:self.jiangLiBgv];
  57. [self.topRightView addSubview:self.jiangLiIcon];
  58. [self.topRightView addSubview:self.jiangLiNumLb];
  59. [self.topRightView addSubview:self.jiangLiNumDesLb];
  60. [self.topRightView addSubview:self.invitationBreakdownBtn];
  61. // [self addSubview:self.bottomBaseView];
  62. // [self.bottomBaseView addSubview:self.invitationInfoGridView];
  63. [self setNeedsUpdateConstraints];
  64. [self updateConstraintsIfNeeded];
  65. }
  66. - (void)updateConstraints{
  67. [self.topRightView mas_makeConstraints:^(MASConstraintMaker *make) {
  68. make.top.bottom.equalTo(self);
  69. make.left.equalTo(self).offset(adapt(18));
  70. make.right.equalTo(self).offset(adapt(-18));
  71. make.height.mas_equalTo(adapt(229));
  72. }];
  73. [self.bgImgv mas_makeConstraints:^(MASConstraintMaker *make) {
  74. make.edges.equalTo(self.topRightView);
  75. }];
  76. [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
  77. make.top.equalTo(self.topRightView.mas_top).offset(adapt(16));
  78. make.centerX.equalTo(self.topRightView);
  79. //make.width.mas_equalTo(adapt(156));
  80. make.height.mas_equalTo(adapt(22));
  81. }];
  82. [self.titleImgvL mas_makeConstraints:^(MASConstraintMaker *make) {
  83. make.right.equalTo(self.titleLb.mas_left).offset(adapt(-10));
  84. make.centerY.equalTo(self.titleLb);
  85. //make.height.mas_equalTo(adapt(22));
  86. }];
  87. [self.titleImgvR mas_makeConstraints:^(MASConstraintMaker *make) {
  88. make.left.equalTo(self.titleLb.mas_right).offset(adapt(10));
  89. make.centerY.equalTo(self.titleLb);
  90. //make.height.mas_equalTo(adapt(22));
  91. }];
  92. [self.inviteNumLb mas_makeConstraints:^(MASConstraintMaker *make) {
  93. make.top.equalTo(self.titleLb.mas_bottom).offset(adapt(18));
  94. make.centerX.equalTo(self.topRightView);
  95. }];
  96. [self.inviteNumDesLb mas_makeConstraints:^(MASConstraintMaker *make) {
  97. make.top.equalTo(self.inviteNumLb.mas_bottom).offset(adapt(3));
  98. make.centerX.equalTo(self.topRightView);
  99. make.height.mas_equalTo(adapt(18));
  100. }];
  101. [self.jiangLiBgv mas_makeConstraints:^(MASConstraintMaker *make) {
  102. make.top.equalTo(self.inviteNumDesLb.mas_bottom).offset(adapt(20));
  103. make.left.right.equalTo(self.topRightView).inset(adapt(20));
  104. make.height.mas_equalTo(adapt(48));
  105. }];
  106. [self.jiangLiIcon mas_makeConstraints:^(MASConstraintMaker *make) {
  107. make.centerY.equalTo(self.jiangLiBgv.mas_centerY);
  108. make.left.equalTo(self.jiangLiBgv).offset(adapt(16));
  109. make.width.height.mas_equalTo(adapt(26));
  110. }];
  111. [self.jiangLiNumLb mas_makeConstraints:^(MASConstraintMaker *make) {
  112. make.centerY.equalTo(self.jiangLiBgv.mas_centerY);
  113. make.left.equalTo(self.jiangLiIcon.mas_right).offset(adapt(3));
  114. }];
  115. [self.jiangLiNumDesLb mas_makeConstraints:^(MASConstraintMaker *make) {
  116. make.centerY.equalTo(self.jiangLiBgv.mas_centerY);
  117. make.left.equalTo(self.jiangLiNumLb.mas_right).offset(adapt(10));
  118. }];
  119. [self.jiangLiNumDesLb setContentCompressionResistancePriority:(UILayoutPriorityDefaultLow) forAxis:(UILayoutConstraintAxisHorizontal)];
  120. [self.invitationBreakdownBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  121. make.centerY.equalTo(self.jiangLiBgv.mas_centerY);
  122. make.right.equalTo(self.jiangLiBgv.mas_right).offset(adapt(-16));
  123. make.width.mas_equalTo(adapt(59));
  124. make.height.mas_equalTo(adapt(26));
  125. }];
  126. // [self.bottomBaseView mas_makeConstraints:^(MASConstraintMaker *make) {
  127. // make.top.equalTo(self.topRightView.mas_bottom).offset(adapt(-5));
  128. // make.left.equalTo(self).offset(adapt(15));
  129. // make.right.equalTo(self).offset(adapt(-15));
  130. // make.bottom.equalTo(self);
  131. // }];
  132. //
  133. // [self.invitationInfoGridView mas_makeConstraints:^(MASConstraintMaker *make) {
  134. // make.top.equalTo(self.bottomBaseView).offset(adapt(31));
  135. // make.left.equalTo(self.bottomBaseView).offset(adapt(12));
  136. // make.right.equalTo(self.bottomBaseView).offset(adapt(-12));
  137. // make.bottom.equalTo(self.bottomBaseView).offset(adapt(-31));
  138. // make.height.mas_equalTo(adapt(60));
  139. // }];
  140. [super updateConstraints];
  141. }
  142. - (void)ym_bindViewModel:(YMInvitingPrizesViewModel *)viewModel{
  143. if (!viewModel) {
  144. return;
  145. }
  146. _viewModel = viewModel;
  147. @weakify(self)
  148. [[[[RACObserve(self.viewModel, invitationInfoGridDataArray) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSArray * invitationInfoGridDataArray) {
  149. @strongify(self)
  150. for (YMInvitingPrizesInvitationInfoViewModel *viewModel in invitationInfoGridDataArray) {
  151. if (viewModel.infoType == YMInvitingPrizesInvitationInfoTypeCumulativeInvitations) {
  152. self.inviteNumLb.text = viewModel.titleString;
  153. }
  154. else if (viewModel.infoType == YMInvitingPrizesInvitationInfoTypeCumulativeReward) {
  155. self.jiangLiNumLb.text = viewModel.titleString;
  156. }
  157. }
  158. // self.invitationInfoGridView.config = self.invitationInfoGridViewConfig;
  159. // self.invitationInfoGridViewConfig.dataArray = invitationInfoGridDataArray;
  160. // [self.invitationInfoGridView mas_remakeConstraints:^(MASConstraintMaker *make) {
  161. // make.top.equalTo(self.bottomBaseView).offset(adapt(31));
  162. // make.left.equalTo(self.bottomBaseView).offset(adapt(12));
  163. // make.right.equalTo(self.bottomBaseView).offset(adapt(-12));
  164. // make.bottom.equalTo(self.bottomBaseView).offset(adapt(-31));
  165. // make.height.mas_equalTo(adapt(60));
  166. // }];
  167. }];
  168. }
  169. - (UIView *)topRightView{
  170. if (!_topRightView) {
  171. _topRightView = [[UIView alloc]init];
  172. _topRightView.backgroundColor = rgba(255, 255, 255, 1);
  173. _topRightView.layer.cornerRadius = adapt(23);
  174. _topRightView.layer.masksToBounds = YES;
  175. //[_topRightView addRectCorner:UIRectCornerTopLeft|UIRectCornerTopRight radius:adapt(21)];
  176. }
  177. return _topRightView;
  178. }
  179. - (UIImageView *)bgImgv {
  180. if (!_bgImgv) {
  181. _bgImgv = [[UIImageView alloc] initWithImage:ImageByName(@"ym_inviting_prizes_my_invitation_bg")];
  182. _bgImgv.hidden = YES;
  183. }
  184. return _bgImgv;
  185. }
  186. - (UILabel *)titleLb {
  187. if (!_titleLb) {
  188. _titleLb = [[UILabel alloc] init];
  189. _titleLb.font = LCSemiboldFont(16);
  190. _titleLb.textColor = rgba(255, 63, 104, 1);
  191. _titleLb.textAlignment = NSTextAlignmentCenter;
  192. _titleLb.text = @"我的邀请";
  193. }
  194. return _titleLb;
  195. }
  196. - (UIImageView *)titleImgv{
  197. if (!_titleImgv) {
  198. _titleImgv = [[UIImageView alloc]initWithImage:ImageByName(@"ym_inviting_prizes_my_invitation_title")];
  199. }
  200. return _titleImgv;
  201. }
  202. - (UIImageView *)titleImgvL{
  203. if (!_titleImgvL) {
  204. _titleImgvL = [[UIImageView alloc]initWithImage:ImageByName(@"ym_inviting_prizes_my_invitation_title_left")];
  205. }
  206. return _titleImgvL;
  207. }
  208. - (UIImageView *)titleImgvR{
  209. if (!_titleImgvR) {
  210. _titleImgvR = [[UIImageView alloc]initWithImage:ImageByName(@"ym_inviting_prizes_my_invitation_title_right")];
  211. }
  212. return _titleImgvR;
  213. }
  214. - (UILabel *)inviteNumLb {
  215. if (!_inviteNumLb) {
  216. _inviteNumLb = [[UILabel alloc] init];
  217. _inviteNumLb.font = LCSemiboldFont(46);
  218. _inviteNumLb.textColor = rgba(51, 51, 51, 1);
  219. _inviteNumLb.textAlignment = NSTextAlignmentCenter;
  220. _inviteNumLb.text = @"0";
  221. }
  222. return _inviteNumLb;
  223. }
  224. - (UILabel *)inviteNumDesLb {
  225. if (!_inviteNumDesLb) {
  226. _inviteNumDesLb = [[UILabel alloc] init];
  227. _inviteNumDesLb.font = LCFont(14);
  228. _inviteNumDesLb.textColor = rgba(51, 51, 51, 1);
  229. _inviteNumDesLb.textAlignment = NSTextAlignmentCenter;
  230. _inviteNumDesLb.text = @"累计邀请(人数)";
  231. }
  232. return _inviteNumDesLb;
  233. }
  234. - (UIView *)jiangLiBgv {
  235. if (!_jiangLiBgv) {
  236. _jiangLiBgv = [[UIView alloc] init];
  237. _jiangLiBgv.backgroundColor = rgba(255, 255, 255, 1);
  238. _jiangLiBgv.layer.cornerRadius = adapt(24);
  239. _jiangLiBgv.layer.masksToBounds = YES;
  240. _jiangLiBgv.layer.borderWidth = 1;
  241. _jiangLiBgv.layer.borderColor = HexColorFromRGBA(0xFBBF82, 1).CGColor;
  242. }
  243. return _jiangLiBgv;
  244. }
  245. - (UIImageView *)jiangLiIcon {
  246. if (!_jiangLiIcon) {
  247. _jiangLiIcon = [[UIImageView alloc] initWithImage:ImageByName(@"ym_my_earnings_coin")];
  248. }
  249. return _jiangLiIcon;
  250. }
  251. - (UILabel *)jiangLiNumLb {
  252. if (!_jiangLiNumLb) {
  253. _jiangLiNumLb = [[UILabel alloc] init];
  254. _jiangLiNumLb.font = LCSemiboldFont(24);
  255. _jiangLiNumLb.textColor = HexColorFromRGB(0xFEA802);
  256. _jiangLiNumLb.textAlignment = NSTextAlignmentLeft;
  257. _jiangLiNumLb.text = @"0";
  258. }
  259. return _jiangLiNumLb;
  260. }
  261. - (UILabel *)jiangLiNumDesLb {
  262. if (!_jiangLiNumDesLb) {
  263. _jiangLiNumDesLb = [[UILabel alloc] init];
  264. _jiangLiNumDesLb.font = LCFont(13);
  265. _jiangLiNumDesLb.textColor = HexColorFromRGB(0x666666);
  266. _jiangLiNumDesLb.textAlignment = NSTextAlignmentLeft;
  267. _jiangLiNumDesLb.text = @"累计奖励(金币)";
  268. }
  269. return _jiangLiNumDesLb;
  270. }
  271. - (UIButton *)invitationBreakdownBtn{
  272. if (!_invitationBreakdownBtn) {
  273. _invitationBreakdownBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  274. [_invitationBreakdownBtn setBackgroundImage:ImageByName(@"ym_inviting_prizes_arrow") forState:UIControlStateNormal];
  275. _invitationBreakdownBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
  276. _invitationBreakdownBtn.titleLabel.font=LCFont(13);
  277. [_invitationBreakdownBtn setTitle:@"去邀请" forState:0];
  278. [_invitationBreakdownBtn setTitleColor:UIColor.whiteColor forState:0];
  279. //[_invitationBreakdownBtn setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft];
  280. //[_invitationBreakdownBtn ym_setGradientBackgroundWithColors:kMainGradColors locations:kMainGradLocation startPoint:kMainGradStartP endPoint:kMainGradEndP];
  281. CGFloat margin = 3;
  282. _invitationBreakdownBtn.imageEdgeInsets = UIEdgeInsetsMake(0, margin, 0, -margin);
  283. WS(weakSelf)
  284. [[[_invitationBreakdownBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) {
  285. [weakSelf.viewModel gotoInvitationBreakdown];
  286. }];
  287. }
  288. return _invitationBreakdownBtn;
  289. }
  290. - (UIView *)bottomBaseView{
  291. if (!_bottomBaseView) {
  292. _bottomBaseView = [[UIView alloc]init];
  293. _bottomBaseView.hidden = YES;
  294. _bottomBaseView.backgroundColor = UIColor.clearColor;
  295. [_bottomBaseView addRectCorner: UIRectCornerBottomLeft|UIRectCornerBottomRight radius:adapt(21)];
  296. }
  297. return _bottomBaseView;
  298. }
  299. - (BAGridView_Config *)invitationInfoGridViewConfig{
  300. if (!_invitationInfoGridViewConfig) {
  301. _invitationInfoGridViewConfig = [[BAGridView_Config alloc]init];
  302. _invitationInfoGridViewConfig.scrollEnabled = NO;
  303. // 是否显示分割线
  304. _invitationInfoGridViewConfig.showLineView = NO;
  305. // item:分割线颜色,默认:BAKit_Color_Gray_11【BAKit_Color_RGB(248, 248, 248)】
  306. _invitationInfoGridViewConfig.ba_gridView_lineColor = HexColorFromRGB(0xededed);
  307. // item:每行 item 的个数
  308. _invitationInfoGridViewConfig.ba_gridView_rowCount = kinvitationInfoGridView_rowCount;
  309. // item:高度/宽度
  310. _invitationInfoGridViewConfig.ba_gridView_itemHeight = adapt(kinvitationInfoGridView_itemHeight);
  311. // item:title 颜色,默认:BAKit_Color_Black【[UIColor blackColor]】
  312. _invitationInfoGridViewConfig.ba_gridView_titleColor = BAKit_Color_Black_pod;
  313. _invitationInfoGridViewConfig.ba_gridView_titleDescColor = BAKit_Color_Gray_1_pod;
  314. // item:title Font,默认:图文样式下 16,两行文字下(上25,下12)
  315. _invitationInfoGridViewConfig.ba_gridView_titleFont = LCBoldFont(24);
  316. _invitationInfoGridViewConfig.ba_gridView_titleDescFont = LCFont(13);
  317. // item:背景颜色,默认:白色
  318. _invitationInfoGridViewConfig.ba_gridView_backgroundColor = BAKit_Color_Clear_pod;
  319. // item:背景选中颜色,默认:无色
  320. _invitationInfoGridViewConfig.ba_gridView_selectedBackgroundColor = BAKit_Color_Clear_pod;
  321. // badge
  322. _invitationInfoGridViewConfig.ba_gridView_badgeType = kBAGridViewBadgeType_Center;
  323. _invitationInfoGridViewConfig.ba_gridView_badgeFont = LCFont(10);
  324. _invitationInfoGridViewConfig.ba_gridView_badgeRectCorners = UIRectCornerTopLeft | UIRectCornerTopRight |UIRectCornerBottomLeft| UIRectCornerBottomRight;
  325. _invitationInfoGridViewConfig.ba_gridView_badgeCornerRadius = 7;
  326. _invitationInfoGridViewConfig.ba_gridView_badgeBgColor = HexColorFromRGB(0xF4003F);
  327. _invitationInfoGridViewConfig.ba_gridView_badgeTextColor = HexColorFromRGB(0xFFFFFF);
  328. _invitationInfoGridViewConfig.ba_gridView_badgeHeight = 14;
  329. _invitationInfoGridViewConfig.ba_gridView_badgeOffsetPoint = CGPointMake(8, 8);
  330. // _invitationInfoGridViewConfig.ba_gridView_itemEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10);
  331. // _invitationInfoGridViewConfig.minimumLineSpacing = 10;
  332. // _invitationInfoGridViewConfig.minimumInteritemSpacing = 10;
  333. _invitationInfoGridViewConfig.gridViewType = BAGridViewTypeTitleDesc;
  334. }
  335. return _invitationInfoGridViewConfig;
  336. }
  337. - (BAGridView *)invitationInfoGridView{
  338. if (!_invitationInfoGridView) {
  339. @weakify(self)
  340. _invitationInfoGridView = [BAGridView ba_creatGridViewWithGridViewConfig:self.invitationInfoGridViewConfig block:^(BAGridItemModel *model, NSIndexPath *indexPath) {
  341. @strongify(self)
  342. }];
  343. }
  344. return _invitationInfoGridView;
  345. }
  346. @end