MODiaWinBaseView.m 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. //
  2. // MODiaWinBaseView.m
  3. // MiMoLive
  4. //
  5. // Created by SuperC on 2024/7/2.
  6. //
  7. #import "MODiaWinBaseView.h"
  8. #import "TYCyclePagerView.h"
  9. #import "MOLuclyUserCell.h"
  10. #import "UIImage+YYAdd.h"
  11. #import "MOTopUpVC.h"
  12. //一页的size
  13. #define kPageSize 10
  14. @interface MODiaWinBaseView ()<UITableViewDelegate,UITableViewDataSource,TYCyclePagerViewDataSource,TYCyclePagerViewDelegate>
  15. @property (nonatomic, strong) TYCyclePagerView *pagerView;//中奖用户轮播
  16. @property (nonatomic, strong) NSArray *pagerDataArr;
  17. //默认132
  18. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *freeViewTop;
  19. @property (weak, nonatomic) IBOutlet UIImageView *freeTagImg;
  20. @property (weak, nonatomic) IBOutlet UILabel *freeTipLab;
  21. @property (weak, nonatomic) IBOutlet UILabel *freeContentLab;
  22. @property (weak, nonatomic) IBOutlet UIButton *freeJoinBtn;
  23. @property (weak, nonatomic) IBOutlet UIImageView *headImgView;
  24. @property (weak, nonatomic) IBOutlet UILabel *nameLab;
  25. @property (weak, nonatomic) IBOutlet UIButton *zuanBtn;
  26. @property (weak, nonatomic) IBOutlet UIButton *rechargeBtn;
  27. @property (weak, nonatomic) IBOutlet UILabel *drawLab;
  28. @property (weak, nonatomic) IBOutlet UIImageView *drawImg;
  29. @property (weak, nonatomic) IBOutlet UIButton *drawBtn;
  30. @property (weak, nonatomic) IBOutlet UILabel *latestLab;
  31. @property (weak, nonatomic) IBOutlet UIImageView *latestImg;
  32. @property (weak, nonatomic) IBOutlet UIButton *latestBtn;
  33. @property (weak, nonatomic) IBOutlet UILabel *valueLab;
  34. @property (weak, nonatomic) IBOutlet UIImageView *valueImg;
  35. @property (weak, nonatomic) IBOutlet UIButton *valueBtn;
  36. @property (weak, nonatomic) IBOutlet UITableView *tableView;
  37. @property (nonatomic, strong) NSMutableArray *dataArr;
  38. @property (nonatomic, assign) NSInteger currentSort;
  39. /** 没有更多的数据视图 */
  40. @property (nonatomic, strong) MONoMoreDataView *noMoreDataView;
  41. /** 游标 */
  42. @property (nonatomic, copy) NSString *next;
  43. @end
  44. @implementation MODiaWinBaseView
  45. + (instancetype)moDiaWinBaseView{
  46. return [[[NSBundle mainBundle] loadNibNamed:@"MODiaWinBaseView" owner:self options:nil] firstObject];
  47. }
  48. - (void)awakeFromNib{
  49. [super awakeFromNib];
  50. [self.freeJoinBtn setFont:[MOTextTools getTheFontWithSize:18.0 AndFontName:kNormalTitleFontStr]];
  51. self.drawLab.font = [MOTextTools getTheFontWithSize:11.0 AndFontName:kNormalTitleFontStr];
  52. self.latestLab.font = [MOTextTools getTheFontWithSize:11.0 AndFontName:kNormalTitleFontStr];
  53. self.valueLab.font = [MOTextTools getTheFontWithSize:11.0 AndFontName:kNormalTitleFontStr];
  54. self.freeTipLab.text = NSLocalString(@"mimo_diamonds_win_m_free_tip");
  55. self.freeContentLab.text = NSLocalString(@"mimo_diamonds_win_m_free_c_tip");
  56. self.freeJoinBtn.titleLabel.numberOfLines = 0;
  57. [self.freeJoinBtn setTitle:NSLocalString(@"mimo_diamonds_win_m_join_btn") forState:UIControlStateNormal];
  58. self.drawLab.text = NSLocalString(@"mimo_diamonds_win_m_draw_btn");
  59. self.latestLab.text = NSLocalString(@"mimo_diamonds_win_m_latest_btn");
  60. self.valueLab.text = NSLocalString(@"mimo_diamonds_win_m_value_btn");
  61. [self.rechargeBtn setTitle:NSLocalString(@"mimo_recharge_title") forState:UIControlStateNormal];
  62. [self addSubview:self.pagerView];
  63. [self.pagerView mas_makeConstraints:^(MASConstraintMaker *make) {
  64. make.top.equalTo(self).offset(33.0);
  65. make.left.equalTo(self).offset(10.0);
  66. make.right.equalTo(self).offset(-10.0);
  67. make.height.equalTo(@88.0);
  68. }];
  69. self.tableView.layer.cornerRadius = 8.0;
  70. self.tableView.layer.masksToBounds = YES;
  71. self.tableView.estimatedRowHeight = 0;
  72. self.tableView.estimatedSectionHeaderHeight = 0;
  73. self.tableView.estimatedSectionFooterHeight = 0;
  74. self.tableView.rowHeight = 84.0;
  75. self.tableView.delegate = self;
  76. self.tableView.dataSource = self;
  77. //iOS15适配
  78. if (@available(iOS 15.0, *))
  79. {
  80. self.tableView.sectionHeaderTopPadding = 0;
  81. }
  82. [self.tableView registerNib:[UINib nibWithNibName:@"MOLuckyCodeCell" bundle:nil] forCellReuseIdentifier:MOLuckyCodeCell_ID];
  83. WEAKSELF
  84. MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
  85. weakSelf.next = @"";
  86. NSDictionary *basePage = @{@"size":@(kPageSize),@"next":weakSelf.next};
  87. NSDictionary *baseDict = @{@"type":@(2),
  88. @"sort":@(weakSelf.currentSort),
  89. @"page":basePage};
  90. [weakSelf toGetTheListDataWith:baseDict];
  91. }];
  92. header.lastUpdatedTimeLabel.hidden = YES;
  93. header.stateLabel.hidden = YES;
  94. self.tableView.mj_header = header;
  95. self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
  96. if(weakSelf.next.length == 0){
  97. return;
  98. }
  99. NSDictionary *basePage = @{@"size":@(kPageSize),@"next":weakSelf.next};
  100. NSDictionary *baseDict = @{@"type":@(2),
  101. @"sort":@(weakSelf.currentSort),
  102. @"page":basePage};
  103. [weakSelf toGetTheListDataWith:baseDict];
  104. }];
  105. self.tableView.mj_footer.hidden = YES;
  106. self.tableView.backgroundView = self.noMoreDataView;
  107. self.zuanBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 0);
  108. self.rechargeBtn.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;
  109. self.rechargeBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 0);
  110. [self.drawImg setImage:[UIImage imageNamed:@"icon_dia_win_left_btn"]];
  111. UIImage *latestImage = [UIImage imageNamed:@"icon_dia_win_center_btn"];
  112. UIImage *latestImageGray = [latestImage imageByGrayscale];
  113. [self.latestImg setImage:latestImageGray];
  114. UIImage *valueImage = [UIImage imageNamed:@"icon_dia_win_right_btn"];
  115. UIImage *valueImageGray = [valueImage imageByGrayscale];
  116. [self.valueImg setImage:valueImageGray];
  117. MOMeDataInfo *userInfoData = (MOMeDataInfo *)[[MODataCache sharedYYCache] objectForKey:kMineUserInfo];
  118. [self.headImgView sd_setImageWithURL:[NSURL URLWithString:userInfoData.userProfile.avatar] placeholderImage:[UIImage imageNamed:@"icon_mine_placeHolder"]];
  119. self.headImgView.layer.cornerRadius = 42.0 / 2.0;
  120. self.headImgView.layer.masksToBounds = YES;
  121. self.nameLab.text = userInfoData.userProfile.nickname;
  122. [self.zuanBtn setTitle:[NSString stringWithFormat:@"%.f",userInfoData.userWallet.diamond] forState:UIControlStateNormal];
  123. self.currentSort = 1;
  124. }
  125. - (IBAction)freeJoinBtnClick:(id)sender {
  126. self.freeJoinBlock ? self.freeJoinBlock() : nil;
  127. }
  128. - (IBAction)valueChangeBtnClick:(UIButton *)sender {
  129. UIImage *drawImage = [UIImage imageNamed:@"icon_dia_win_left_btn"];
  130. UIImage *drawImageGray = [drawImage imageByGrayscale];
  131. UIImage *latestImage = [UIImage imageNamed:@"icon_dia_win_center_btn"];
  132. UIImage *latestImageGray = [latestImage imageByGrayscale];
  133. UIImage *valueImage = [UIImage imageNamed:@"icon_dia_win_right_btn"];
  134. UIImage *valueImageGray = [valueImage imageByGrayscale];
  135. if(sender == self.drawBtn){
  136. //左
  137. [self.drawImg setImage:drawImage];
  138. [self.latestImg setImage:latestImageGray];
  139. [self.valueImg setImage:valueImageGray];
  140. self.currentSort = 1;
  141. [self getListDataWith:1];
  142. }
  143. else if (sender == self.latestBtn){
  144. //中
  145. [self.drawImg setImage:drawImageGray];
  146. [self.latestImg setImage:latestImage];
  147. [self.valueImg setImage:valueImageGray];
  148. self.currentSort = 2;
  149. [self getListDataWith:2];
  150. }
  151. else{
  152. //右
  153. [self.drawImg setImage:drawImageGray];
  154. [self.latestImg setImage:latestImageGray];
  155. [self.valueImg setImage:valueImage];
  156. self.currentSort = 3;
  157. [self getListDataWith:3];
  158. }
  159. }
  160. - (void)getDrawData{
  161. //获取列表数据
  162. [self getListDataWith:1];
  163. //获取最近中奖
  164. [self toGetTheLateLyData];
  165. }
  166. - (void)refreshDataList{
  167. [self getListDataWith:self.currentSort];
  168. }
  169. - (void)getListDataWith:(NSInteger)sort{
  170. self.next = @"";
  171. NSDictionary *basePage = @{@"size":@(kPageSize),@"next":self.next};
  172. NSDictionary *baseDict = @{@"type":@(2),
  173. @"sort":@(sort),
  174. @"page":basePage};
  175. [self toGetTheListDataWith:baseDict];
  176. }
  177. - (IBAction)rechargeBtnClick:(id)sender {
  178. WEAKSELF
  179. UIViewController *currentVC = [MOTools currentViewController];
  180. MOTopUpVC *vc = [[MOTopUpVC alloc] init];
  181. vc.topUpSuccesssBlock = ^(MOMeDataInfo * _Nonnull model) {
  182. [weakSelf.zuanBtn setTitle:[NSString stringWithFormat:@"%.f",model.userWallet.diamond] forState:UIControlStateNormal];
  183. };
  184. [currentVC.navigationController pushViewController:vc animated:YES];
  185. }
  186. #pragma mark - Set
  187. - (void)setIsPushVC:(BOOL)isPushVC{
  188. _isPushVC = isPushVC;
  189. if(isPushVC){
  190. [self.freeTagImg setImage:[UIImage imageNamed:@"icon_dia_win_m_free_tag"]];
  191. }
  192. else{
  193. [self.freeTagImg setImage:[UIImage imageNamed:@"icon_dia_win_free_tag"]];
  194. }
  195. }
  196. #pragma mark - UITableViewDelegate,UITableViewDataSource
  197. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  198. return 1;
  199. }
  200. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  201. return self.dataArr.count;
  202. }
  203. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  204. MODiaWinList *model = self.dataArr[indexPath.row];
  205. MOLuckyCodeCell *cell = [tableView dequeueReusableCellWithIdentifier:MOLuckyCodeCell_ID];
  206. cell.cellModel = model;
  207. WEAKSELF
  208. cell.viewDetailBlock = ^(MODiaWinList * _Nonnull cellModel) {
  209. weakSelf.viewDetailBlock ? weakSelf.viewDetailBlock(cellModel) : nil;
  210. };
  211. cell.joinClickBlock = ^(MODiaWinList * _Nonnull cellModel) {
  212. weakSelf.joinClickBlock ? weakSelf.joinClickBlock(cellModel) : nil;
  213. };
  214. return cell;
  215. }
  216. #pragma mark - TYCyclePagerViewDataSource,TYCyclePagerViewDelegate
  217. - (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView{
  218. return self.pagerDataArr.count;
  219. }
  220. - (UICollectionViewCell *)pagerView:(TYCyclePagerView *)pagerView cellForItemAtIndex:(NSInteger)index{
  221. WEAKSELF
  222. MOWinnerList *model = self.pagerDataArr[index];
  223. MOLuclyUserCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:MOLuclyUserCell_ID forIndex:index];
  224. cell.cellModel = model;
  225. return cell;
  226. }
  227. - (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView {
  228. TYCyclePagerViewLayout *layout = [[TYCyclePagerViewLayout alloc]init];
  229. layout.itemSize = CGSizeMake(88.0, 88.0);
  230. layout.itemSpacing = 0;
  231. layout.layoutType = TYCyclePagerTransformLayoutLinear;
  232. layout.itemHorizontalCenter = YES;
  233. return layout;
  234. }
  235. - (void)pagerView:(TYCyclePagerView *)pageView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex {
  236. // MOLogV(@"%ld -> %ld",fromIndex,toIndex);
  237. }
  238. - (void)pagerView:(TYCyclePagerView *)pageView didSelectedItemCell:(__kindof UICollectionViewCell *)cell atIndex:(NSInteger)index{
  239. MOWinnerList *model = self.pagerDataArr[index];
  240. self.headClickBlock ? self.headClickBlock(model.userProfile) : nil;
  241. }
  242. #pragma mark - Http Data
  243. - (void)toGetTheListDataWith:(NSDictionary *)dict{
  244. WEAKSELF
  245. [kHttpManager getTheBigWinListDataWithParams:dict andBlock:^(id _Nonnull data, NSError * _Nonnull error) {
  246. __strong typeof(weakSelf) self = weakSelf;
  247. [self.tableView.mj_header endRefreshing];
  248. [self.tableView.mj_footer endRefreshing];
  249. if(kCode_Success){
  250. MOLogV(@"%@",[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]);
  251. MODiaWinBaseData *baseModel = [MODiaWinBaseData modelObjectWithDictionary:data[@"data"]];
  252. if(baseModel.next == nil || baseModel.next.length == 0){
  253. if(self.next == nil || self.next.length == 0){
  254. //第一页
  255. [self.dataArr removeAllObjects];
  256. self.dataArr = [baseModel.diaWinList mutableCopy];
  257. }
  258. else{
  259. //最后一页
  260. [self.dataArr addObjectsFromArray:baseModel.diaWinList];
  261. }
  262. self.next = @"";
  263. [self.tableView.mj_footer endRefreshingWithNoMoreData];
  264. }
  265. else{
  266. if(self.next == nil || self.next.length == 0){
  267. //第一页
  268. [self.dataArr removeAllObjects];
  269. self.dataArr = [baseModel.diaWinList mutableCopy];
  270. }
  271. else{
  272. //最后一页
  273. [self.dataArr addObjectsFromArray:baseModel.diaWinList];
  274. }
  275. self.next = baseModel.next;
  276. }
  277. [self.tableView reloadData];
  278. self.tableView.mj_footer.hidden = (self.dataArr.count > 0) ? NO : YES;
  279. self.noMoreDataView.isHaveData = (self.dataArr.count > 0) ? YES : NO;
  280. }
  281. else{
  282. MOLogV(@"getTheBigWinListDataWithParams 接口报错了");
  283. kShowNetError(data)
  284. }
  285. }];
  286. }
  287. - (void)toGetTheLateLyData{
  288. WEAKSELF
  289. [kHttpManager getTheBigWinLatelyListDataWithParams:nil andBlock:^(id _Nonnull data, NSError * _Nonnull error) {
  290. if(kCode_Success){
  291. MOLogV(@"%@",[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]);
  292. MOWinnerBaseData *baseModel = [MOWinnerBaseData modelObjectWithDictionary:data[@"data"]];
  293. if(baseModel.winnerList.count < 5){
  294. weakSelf.pagerView.hidden = YES;
  295. weakSelf.freeViewTop.constant = 20.0;
  296. }
  297. else{
  298. weakSelf.pagerView.hidden = NO;
  299. weakSelf.pagerDataArr = [baseModel.winnerList mutableCopy];
  300. [weakSelf.pagerView reloadData];
  301. weakSelf.freeViewTop.constant = 132.0;
  302. }
  303. }
  304. else{
  305. MOLogV(@"getTheBigWinLatelyListDataWithParams 接口报错了");
  306. kShowNetError(data)
  307. }
  308. }];
  309. }
  310. - (void)updateUIWith:(MODiaWinDetailData *)dataModel{
  311. for (MODiaWinList *object in self.dataArr) {
  312. if([object.diaWinInfo.id isEqualToString:dataModel.diaWinInfo.id]){
  313. object.diaWinInfo = [dataModel.diaWinInfo copy];
  314. object.luckyCount = dataModel.diaWinMes.count;
  315. break;
  316. }
  317. }
  318. [self.tableView reloadData];
  319. [self.zuanBtn setTitle:[NSString stringWithFormat:@"%.f",dataModel.afterDiamond] forState:UIControlStateNormal];
  320. }
  321. #pragma mark - Lazy
  322. - (TYCyclePagerView *)pagerView{
  323. if(!_pagerView){
  324. _pagerView = [[TYCyclePagerView alloc] initWithFrame:CGRectMake(0.0, 0.0, SCREENWIDTH, 88.0)];
  325. _pagerView.isInfiniteLoop = YES;
  326. _pagerView.autoScrollInterval = 3.0;
  327. _pagerView.dataSource = self;
  328. _pagerView.delegate = self;
  329. _pagerView.layout.itemHorizontalCenter = YES;
  330. _pagerView.layout.layoutType = TYCyclePagerTransformLayoutLinear;
  331. _pagerView.layout.itemSize = CGSizeMake(88.0, 88.0);
  332. _pagerView.layout.itemSpacing = 0.0;
  333. [_pagerView registerNib:[UINib nibWithNibName:@"MOLuclyUserCell" bundle:nil] forCellWithReuseIdentifier:MOLuclyUserCell_ID];
  334. }
  335. return _pagerView;
  336. }
  337. - (MONoMoreDataView *)noMoreDataView{
  338. if(!_noMoreDataView){
  339. _noMoreDataView = [MONoMoreDataView new];
  340. }
  341. return _noMoreDataView;
  342. }
  343. - (NSMutableArray *)dataArr{
  344. if(!_dataArr){
  345. _dataArr = [NSMutableArray array];
  346. }
  347. return _dataArr;
  348. }
  349. @end