ASGiftCardListViewController.m 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. //
  2. // ASGiftCardListViewController.m
  3. // Asteria
  4. //
  5. // Created by iOS on 2023/11/2.
  6. //
  7. #import "ASGiftCardListViewController.h"
  8. #import "ASGiftCardTableView.h"
  9. @interface ASGiftCardListViewController ()<UIScrollViewDelegate>
  10. @property (nonatomic, strong) UIView *topBgV;
  11. @property (nonatomic, strong) UIView *bottomBgV;
  12. @property (nonatomic, strong) UIButton *availabelBt;
  13. @property (nonatomic, strong) UIButton *usedBt;
  14. @property (nonatomic, strong) UIScrollView *scrollV;
  15. @property (nonatomic, strong) ASGiftCardTableView *allTableV;
  16. @property (nonatomic, strong) ASGiftCardTableView *usedTableV;
  17. @end
  18. @implementation ASGiftCardListViewController
  19. - (void)viewDidLoad {
  20. [super viewDidLoad];
  21. [self loadSubVs];
  22. [self configSubVs];
  23. }
  24. - (void)viewWillAppear:(BOOL)animated {
  25. [super viewWillAppear:animated];
  26. [self loadData];
  27. [self checkEmpty];
  28. }
  29. - (void)loadData {
  30. NSMutableArray *allArr = [NSMutableArray array];
  31. NSMutableArray *usedArr = [NSMutableArray array];
  32. if (arc4random()%2 == 1) {
  33. for (int i=0;i<(arc4random()%100+3);i++) {
  34. [allArr addObject:[ASGiftCardModel demoData]];
  35. }
  36. for (int i=0;i<(arc4random()%200+5);i++) {
  37. ASGiftCardModel *m = [ASGiftCardModel demoData];
  38. m.state = arc4random()%3;// == 1 ? ASGiftCardStateUsed : ASGiftCardStateExpired;
  39. [usedArr addObject:m];
  40. }
  41. }
  42. self.allTableV.dataArr = allArr;
  43. self.usedTableV.dataArr = usedArr;
  44. [self setEmptyTip:@"No Giftcard Yet"];
  45. [self.allTableV reloadData];
  46. [self.usedTableV reloadData];
  47. }
  48. - (void)checkEmpty {
  49. if (_allTableV.dataArr.count == 0 && self.availabelBt.isSelected) {
  50. [self showEmptyV: self.allTableV];
  51. } else if (_usedTableV.dataArr.count == 0 && self.usedBt.isSelected) {
  52. [self showEmptyV: self.usedTableV];
  53. } else {
  54. [self hiddenEmpty];
  55. }
  56. }
  57. // MARK: - loadSubVs
  58. - (void)configSubVs {
  59. self.view.backgroundColor = _E0FFF5;
  60. self.customNavBar.backgroundColor = _F0FFFA;
  61. self.titleStr = @"My Giftcard";
  62. [self setNavRightSearch:^{
  63. }];
  64. }
  65. - (void)loadSubVs {
  66. [self.view addSubview:self.topBgV];
  67. [self.view addSubview:self.bottomBgV];
  68. [self.topBgV addSubview:self.availabelBt];
  69. [self.topBgV addSubview:self.usedBt];
  70. [self.bottomBgV addSubview:self.scrollV];
  71. [self.scrollV addSubview:self.allTableV];
  72. [self.scrollV addSubview:self.usedTableV];
  73. [self.topBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  74. make.top.equalTo(self.customNavBar.mas_bottom);
  75. make.leading.trailing.equalTo(self.view);
  76. make.height.equalTo(@60);
  77. }];
  78. [self.availabelBt mas_makeConstraints:^(MASConstraintMaker *make) {
  79. make.centerY.equalTo(self.topBgV);
  80. make.height.equalTo(@40);
  81. make.leading.equalTo(self.topBgV).offset(10);
  82. }];
  83. [self.usedBt mas_makeConstraints:^(MASConstraintMaker *make) {
  84. make.centerY.equalTo(self.availabelBt);
  85. make.height.equalTo(@40);
  86. make.leading.equalTo(self.availabelBt.mas_trailing).offset(10);
  87. make.trailing.equalTo(self.topBgV).offset(-10);
  88. make.width.equalTo(self.availabelBt);
  89. }];
  90. [self.bottomBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  91. make.top.equalTo(self.topBgV.mas_bottom);
  92. make.leading.trailing.bottom.equalTo(self.view);
  93. }];
  94. [self.scrollV mas_makeConstraints:^(MASConstraintMaker *make) {
  95. make.top.equalTo(self.bottomBgV).offset(10);
  96. make.leading.trailing.bottom.equalTo(self.bottomBgV);
  97. }];
  98. [self.allTableV mas_makeConstraints:^(MASConstraintMaker *make) {
  99. make.top.leading.bottom.equalTo(self.scrollV);
  100. make.width.equalTo(self.bottomBgV);
  101. make.height.equalTo(self.bottomBgV).offset(-10);
  102. }];
  103. [self.usedTableV mas_makeConstraints:^(MASConstraintMaker *make) {
  104. make.leading.equalTo(self.allTableV.mas_trailing);
  105. make.top.trailing.bottom.equalTo(self.scrollV);
  106. make.width.equalTo(self.bottomBgV);
  107. make.height.equalTo(self.bottomBgV).offset(-10);
  108. }];
  109. dispatch_async(dispatch_get_main_queue(), ^{
  110. [UIView viewAddHorColorBg:self.bottomBgV colorArr:@[
  111. (id)_E0FFF5.CGColor,
  112. (id)Col_FFF.CGColor
  113. ] startP:CGPointMake(0.5, 0) endP:CGPointMake(0.5, 1)];
  114. [self.bottomBgV bringSubviewToFront:self.scrollV];
  115. });
  116. }
  117. // MARK: - bt Actions
  118. - (void)topBtAction:(UIButton *)bt {
  119. if (bt == self.usedBt) {
  120. self.availabelBt.selected = false;
  121. self.usedBt.selected = true;
  122. [self.scrollV setContentOffset:CGPointMake(KScreenWidth, 0) animated:true];
  123. } else {
  124. self.availabelBt.selected = true;
  125. self.usedBt.selected = false;
  126. [self.scrollV setContentOffset:CGPointMake(0, 0) animated:true];
  127. }
  128. [self setBtStatus:self.availabelBt];
  129. [self setBtStatus:self.usedBt];
  130. [self checkEmpty];
  131. }
  132. - (void)setBtStatus:(UIButton *)bt {
  133. bt.backgroundColor = bt.isSelected ? _113632 : Col_FFF;
  134. bt.titleLabel.font = [UIFont fontWithName:bt.isSelected ? Rob_Bold : Rob_Regular size:16];
  135. }
  136. // MARK: - subvs
  137. - (UIView *)topBgV {
  138. if (!_topBgV) {
  139. UIView *v = [UIView baseV];
  140. v.backgroundColor = _E0FFF5;
  141. _topBgV = v;
  142. }
  143. return _topBgV;
  144. }
  145. - (UIView *)bottomBgV{
  146. if (!_bottomBgV) {
  147. UIView *v = [UIView baseV];
  148. v.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight);
  149. v.backgroundColor = UIColor.clearColor;
  150. _bottomBgV = v;
  151. }
  152. return _bottomBgV;
  153. }
  154. - (UIButton *)availabelBt {
  155. if (!_availabelBt) {
  156. UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
  157. [bt addTarget:self action:@selector(topBtAction:) forControlEvents:UIControlEventTouchUpInside];
  158. bt.selected = true;
  159. bt.backgroundColor = _113632;
  160. bt.titleLabel.font = [UIFont fontWithName:Rob_Bold size:16];
  161. [bt setTitleColor:Col_000 forState:UIControlStateNormal];
  162. bt.layer.cornerRadius = 4;
  163. bt.layer.masksToBounds = true;
  164. [bt setTitleColor:Col_FFF forState:UIControlStateSelected];
  165. [bt setTitle:@"AVAILABLE" forState:UIControlStateNormal];
  166. _availabelBt = bt;
  167. }
  168. return _availabelBt;
  169. }
  170. - (UIButton *)usedBt {
  171. if (!_usedBt) {
  172. UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
  173. [bt addTarget:self action:@selector(topBtAction:) forControlEvents:UIControlEventTouchUpInside];
  174. bt.backgroundColor = Col_FFF;
  175. bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:16];
  176. [bt setTitleColor:Col_000 forState:UIControlStateNormal];
  177. bt.layer.cornerRadius = 4;
  178. bt.layer.masksToBounds = true;
  179. [bt setTitleColor:Col_FFF forState:UIControlStateSelected];
  180. [bt setTitle:@"EXPIRED/USED" forState:UIControlStateNormal];
  181. _usedBt = bt;
  182. }
  183. return _usedBt;
  184. }
  185. - (UIScrollView *)scrollV {
  186. if (!_scrollV) {
  187. UIScrollView *v = [[UIScrollView alloc] init];
  188. v.showsVerticalScrollIndicator = false;
  189. v.showsHorizontalScrollIndicator = false;
  190. v.delegate = self;
  191. v.pagingEnabled = true;
  192. v.backgroundColor = UIColor.clearColor;
  193. v.alwaysBounceHorizontal = true;
  194. _scrollV = v;
  195. }
  196. return _scrollV;
  197. }
  198. - (ASGiftCardTableView *)allTableV {
  199. if (!_allTableV) {
  200. ASGiftCardTableView *v = [[ASGiftCardTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
  201. _allTableV = v;
  202. }
  203. return _allTableV;
  204. }
  205. - (ASGiftCardTableView *)usedTableV {
  206. if (!_usedTableV) {
  207. ASGiftCardTableView *v = [[ASGiftCardTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
  208. _usedTableV = v;
  209. }
  210. return _usedTableV;
  211. }
  212. // MARK: - scrollview delegate
  213. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  214. NSInteger index = (NSInteger)(scrollView.contentOffset.x/KScreenWidth);
  215. self.availabelBt.selected = index == 0;
  216. self.usedBt.selected = index == 1;
  217. [self checkEmpty];
  218. [self setBtStatus:self.availabelBt];
  219. [self setBtStatus:self.usedBt];
  220. }
  221. - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
  222. NSInteger index = (NSInteger)(scrollView.contentOffset.x/KScreenWidth);
  223. self.availabelBt.selected = index == 0;
  224. self.usedBt.selected = index == 1;
  225. [self checkEmpty];
  226. [self setBtStatus:self.availabelBt];
  227. [self setBtStatus:self.usedBt];
  228. }
  229. @end