MGShowLiveWishView.m 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. //
  2. // MGShowLiveWishView.m
  3. // BuguLive
  4. //
  5. // Created by 宋晨光 on 2019/12/14.
  6. // Copyright © 2019 xfg. All rights reserved.
  7. //
  8. #import "MGShowLiveWishView.h"
  9. @implementation MGShowLiveWishView
  10. - (instancetype)initWithFrame:(CGRect)frame
  11. {
  12. self = [super initWithFrame:frame];
  13. if (self) {
  14. self.isDragging = NO;
  15. self.isDecelerating = NO;
  16. self.scrollView.frame = self.bounds;
  17. [self setUpView];
  18. // [self requestModel];
  19. }
  20. return self;
  21. }
  22. - (instancetype)init
  23. {
  24. self = [super init];
  25. if (self) {
  26. self.scrollView.frame = self.bounds;
  27. [self addSubview:self.scrollView];
  28. // [self setUpView];
  29. // [self requestModel];
  30. //启动定时器
  31. self.rotateTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(aoutScroll) userInfo:nil repeats:YES];
  32. }
  33. return self;
  34. }
  35. -(void)setUpView{
  36. CGFloat viewWidth = self.width;
  37. CGFloat viewHeight = self.height;
  38. for (int i = 0; i < 3; i ++) {
  39. MGShowLiveSubView *view = [[MGShowLiveSubView alloc]initWithFrame:CGRectMake(0, viewHeight * i, viewWidth, viewHeight)];
  40. view.tag = 100 + i;
  41. [self.scrollView addSubview:view];
  42. }
  43. }
  44. -(void)showView{
  45. }
  46. -(void)relayoutFrameOfSubViews{
  47. CGFloat viewWidth = self.width;
  48. CGFloat viewHeight = self.height;
  49. self.scrollView.frame = self.bounds;
  50. self.scrollView.contentSize = CGSizeMake(0, self.listArr.count * viewHeight);
  51. self.contentOffsetP = CGPointMake(viewWidth, viewHeight * 3);
  52. [self.scrollView removeAllSubViews];
  53. for (int i = 0; i < self.listArr.count; i ++) {
  54. MGShowLiveSubView *view = [[MGShowLiveSubView alloc]initWithFrame:CGRectMake(0, viewHeight * i, viewWidth, viewHeight)];
  55. view.tag = 100 + i;
  56. view.frame = CGRectMake(0, viewHeight * i, viewWidth, viewHeight);
  57. MGLiveWishModel *model = self.listArr[i];
  58. view.model.g_now_num = @"30";
  59. view.model = model;
  60. [self.scrollView addSubview:view];
  61. if (i == 0) self.topWishView = view;
  62. if (i == 1) self.middleWishView = view;
  63. if (i == 2) self.bottomWishView = view;
  64. }
  65. }
  66. -(void)requestModel:(NSString *)roomIDStr{
  67. self.listArr = [NSMutableArray array];
  68. NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
  69. [mDict setObject:@"user_wish" forKey:@"ctl"];
  70. [mDict setObject:@"wish_list" forKey:@"act"];
  71. if(roomIDStr.length > 0)
  72. {
  73. //4-16 3.心愿单无效。
  74. [mDict setObject:roomIDStr forKey:@"room_id"];
  75. }
  76. [[NetHttpsManager manager] POSTWithParameters:mDict SuccessBlock:^(NSDictionary *responseJson) {
  77. if ([responseJson toInt:@"status"] == 1)
  78. {
  79. NSArray *arr = [responseJson valueForKey:@"list"];
  80. [self.listArr removeAllObjects];
  81. if (arr.count > 0) {
  82. for (NSDictionary *dic in arr)
  83. {
  84. MGLiveWishModel *model = [MGLiveWishModel mj_objectWithKeyValues:dic];
  85. [self.listArr addObject:model];
  86. }
  87. }
  88. self.hidden = self.listArr.count > 0 ? NO :YES;
  89. [self relayoutFrameOfSubViews];
  90. }
  91. } FailureBlock:^(NSError *error) {
  92. }];
  93. }
  94. #pragma mark ---- 用户翻页后重置数据
  95. - (void)resetContent{
  96. if (self.listArr.count < 2) {
  97. return;
  98. }
  99. //重置偏移量
  100. CGPoint offset = CGPointMake(0, self.height);
  101. [self.scrollView setContentOffset:offset];
  102. //重置图片
  103. NSInteger leftIndex = (self.currentPageIndex-1+self.listArr.count)%self.listArr.count;
  104. NSInteger centerIndex = self.currentPageIndex;
  105. NSInteger rightIndex = (self.currentPageIndex+1+self.listArr.count)%self.listArr.count;
  106. self.topWishView.model = self.listArr[leftIndex];
  107. self.middleWishView.model = self.listArr[centerIndex];
  108. self.bottomWishView.model = self.listArr[rightIndex];
  109. self.isDragging = NO;
  110. self.isDecelerating = NO;
  111. }
  112. #pragma mark --- ScrollView代理
  113. //当调用contentoffset方法动画完毕时调用次方法
  114. -(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
  115. [self scrollViewDidEndDecelerating:self];
  116. NSLog(ASLocalizedString(@"调用方法contentoffset方法动画完毕时调用次方法+++++++++++"));
  117. }
  118. //当用手指拖拽的时候调用次方法
  119. - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
  120. NSLog(ASLocalizedString(@"正在拖拽视图,所以需要将自动播放暂停掉"));
  121. //setFireDate:设置定时器在什么时间启动
  122. //[NSDate distantFuture]:将来的某一时刻
  123. self.isDragging = YES;
  124. [self.rotateTimer setFireDate:[NSDate distantFuture]];
  125. }
  126. //当手指拖拽产生的滚动停止滚动时调用此方法。
  127. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
  128. {
  129. self.isDragging = NO;
  130. //视图静止之后,过4秒在开启定时器
  131. NSLog(ASLocalizedString(@"开启定时器"));
  132. [self.rotateTimer setFireDate:[NSDate dateWithTimeInterval:3 sinceDate:[NSDate date]]];
  133. NSLog(@"scrollViewDidEndDecelerating------------%f",self.contentOffsetP.y);
  134. //获取滚动视图移动的距离。
  135. CGFloat userDistance = self.contentOffsetP.y - self.height;
  136. if (userDistance < 0 ) {
  137. //往左翻页,将currentPage往上翻页
  138. self.currentPageIndex = (self.currentPageIndex - 1 + self.listArr.count)% self.listArr.count;
  139. [self resetContent];
  140. }else if (userDistance > 0){
  141. //往右翻页,将currentPage往下翻页
  142. self.currentPageIndex = (self.currentPageIndex + 1 + self.listArr.count)%self.listArr.count;
  143. [self resetContent];
  144. }else{
  145. //用户未翻页成功,什么都不做。
  146. }
  147. }
  148. #pragma mark --- 定时器自动翻页方法
  149. - (void)aoutScroll{
  150. if (self.listArr.count < 2) {
  151. return;
  152. }
  153. NSLog(ASLocalizedString(@"定时器被调用------------------------"));
  154. //这里需要判断如果用户正在拖动屏幕或者视图正在滚动,是不可以自动翻页的,避免和用户的操作相冲突。
  155. if (![self isDragging] || ![self isDecelerating]) {
  156. //这里只对contentOffset进行设置,因为一旦设置了contentOffSet后代理就会自动调用- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView此方法,代码重用,会利用我们上面写好的逻辑帮我们处理剩下的东西。
  157. [self.scrollView setContentOffset:CGPointMake(0, self.height * 2) animated:YES];
  158. }
  159. }
  160. -(UIScrollView *)scrollView{
  161. if (!_scrollView) {
  162. _scrollView = [UIScrollView new];
  163. _scrollView.delegate = self;
  164. }
  165. return _scrollView;
  166. }
  167. @end
  168. @implementation MGShowLiveSubView
  169. - (instancetype)initWithFrame:(CGRect)frame
  170. {
  171. self = [super initWithFrame:frame];
  172. if (self) {
  173. [self setUpView];
  174. }
  175. return self;
  176. }
  177. -(void)setUpView{
  178. self.iconImgView = [[UIImageView alloc]initWithFrame:CGRectMake(kRealValue(6), 0, kRealValue(30), kRealValue(30))];
  179. self.iconImgView.centerY = self.frame.size.height / 2;
  180. self.nameL = [[UILabel alloc]initWithFrame:CGRectMake(self.iconImgView.right + kRealValue(6), 0, kRealValue(80), kRealValue(20))];
  181. self.nameL.text = ASLocalizedString(@"七彩火箭");
  182. self.nameL.font = [UIFont systemFontOfSize:11];
  183. self.nameL.textColor = kWhiteColor;
  184. self.countL = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, kRealValue(73), kRealValue(15))];
  185. self.countL.textColor = kWhiteColor;
  186. self.countL.textAlignment = NSTextAlignmentCenter;
  187. self.countL.font = [UIFont systemFontOfSize:(9)];
  188. self.tintLineView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 0, kRealValue(15))];
  189. // [UIColor colorWithHexString:@""];
  190. self.bgLineView = [[UIView alloc]initWithFrame:CGRectMake(self.nameL.left, self.nameL.bottom + kRealValue(2), kRealValue(70), kRealValue(15))];
  191. self.bgLineView.backgroundColor = [UIColor colorWithHexString:@"#D8D8D8"];
  192. self.bgLineView.layer.cornerRadius = kRealValue(15 / 2);
  193. self.bgLineView.layer.masksToBounds = YES;
  194. [self addSubview:self.iconImgView];
  195. [self addSubview:self.nameL];
  196. [self addSubview:self.bgLineView];
  197. [self.bgLineView addSubview:self.tintLineView];
  198. [self.bgLineView addSubview:self.countL];
  199. }
  200. - (void)setModel:(MGLiveWishModel *)model{
  201. [self.bgLineView removeAllSubViews];
  202. self.tintLineView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 0, kRealValue(15))];
  203. [self.bgLineView addSubview:self.tintLineView];
  204. [self.bgLineView addSubview:self.countL];
  205. [self.iconImgView sd_setImageWithURL:[NSURL URLWithString:model.g_icon] placeholderImage:nil];
  206. self.nameL.text = model.g_name;
  207. self.tintLineView.width = [model.g_now_num floatValue] / [model.g_num floatValue] * self.bgLineView.width;
  208. CAGradientLayer *layer = [self gradientLayerWithColor1:[UIColor colorWithHexString:@"#9D64FF"] AtColor2:[UIColor colorWithHexString:@"#F060F6"] view:self.tintLineView];
  209. [self.tintLineView.layer addSublayer:layer];
  210. self.countL.text = [NSString stringWithFormat:@"%@/%@",model.g_now_num,model.g_num];
  211. }
  212. - (CAGradientLayer*)gradientLayerWithColor1:(UIColor*)color1 AtColor2:(UIColor*)color2 view:(UIView *)view
  213. {
  214. CAGradientLayer* layer = [CAGradientLayer new];
  215. layer.colors = @[ (__bridge id)color1.CGColor, (__bridge id)color2.CGColor];
  216. layer.startPoint = CGPointMake(0.5f, -0.5);
  217. layer.endPoint = CGPointMake(0.5, 1);
  218. layer.frame = view.bounds;
  219. return layer;
  220. }
  221. @end