YMPersonalPageAlbumView.m 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. //
  2. // YMPersonalPageAlbumView.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/17.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMPersonalPageAlbumView.h"
  9. #import "YMPersonalPageViewModel.h"
  10. #import "YMPersonalPageMainAlbumCell.h"
  11. #import "YMPersonalPageSubAlbumCell.h"
  12. @interface YMPersonalPageAlbumView ()<TYCyclePagerViewDataSource,TYCyclePagerViewDelegate,YBImageBrowserDelegate>
  13. /// 个人主页VM
  14. @property (nonatomic, strong) YMPersonalPageViewModel *viewModel;
  15. /// 主相册视图
  16. @property (nonatomic, strong) TYCyclePagerView *mainAlbumView;
  17. /// 子相册视图
  18. @property (nonatomic, strong) TYCyclePagerView *subAlbumView;
  19. /// 展示语音视图
  20. @property (nonatomic, strong) UIImageView *showcaseVoiceView;
  21. /// 展示语音秒数
  22. @property (nonatomic, strong) UILabel *showcaseVoiceSecondsLb;
  23. @end
  24. @implementation YMPersonalPageAlbumView
  25. - (void)ym_setupViews{
  26. [self addSubview:self.mainAlbumView];
  27. [self addSubview:self.subAlbumView];
  28. [self addSubview:self.showcaseVoiceView];
  29. [self.showcaseVoiceView addSubview:self.showcaseVoiceSecondsLb];
  30. [self setNeedsUpdateConstraints];
  31. [self updateConstraintsIfNeeded];
  32. }
  33. - (void)updateConstraints{
  34. [self.mainAlbumView mas_makeConstraints:^(MASConstraintMaker *make) {
  35. make.top.equalTo(self);
  36. make.left.equalTo(self);
  37. make.right.equalTo(self);
  38. make.bottom.equalTo(self);
  39. make.height.mas_equalTo(adapt(375));
  40. }];
  41. [self.subAlbumView mas_makeConstraints:^(MASConstraintMaker *make) {
  42. make.left.equalTo(self).offset(adapt(12));
  43. make.right.equalTo(self).offset(adapt(-100));
  44. make.bottom.equalTo(self).offset(adapt(-20));
  45. make.height.mas_equalTo(adapt(44));
  46. }];
  47. [self.showcaseVoiceView mas_makeConstraints:^(MASConstraintMaker *make) {
  48. make.centerY.equalTo(self.subAlbumView.mas_centerY);
  49. make.right.equalTo(self).offset(adapt(-20));
  50. make.width.mas_equalTo(adapt(73));
  51. make.height.mas_equalTo(adapt(28));
  52. }];
  53. [self.showcaseVoiceSecondsLb mas_makeConstraints:^(MASConstraintMaker *make) {
  54. make.centerY.equalTo(self.showcaseVoiceView.mas_centerY);
  55. make.right.equalTo(self.showcaseVoiceView).offset(adapt(-5));
  56. }];
  57. [super updateConstraints];
  58. }
  59. - (void)ym_bindViewModel:(YMPersonalPageViewModel *)viewModel{
  60. if (!viewModel) {
  61. return;
  62. }
  63. _viewModel = viewModel;
  64. @weakify(self)
  65. [[self.viewModel.refreshUISubject takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id result) {
  66. @strongify(self)
  67. [self.mainAlbumView reloadData];
  68. [self.subAlbumView reloadData];
  69. }];
  70. [[[[RACObserve(self.viewModel, showcaseVoiceSeconds) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSNumber * showcaseVoiceSeconds) {
  71. @strongify(self)
  72. self.showcaseVoiceView.hidden = [showcaseVoiceSeconds intValue] == 0 ? YES : NO;
  73. self.showcaseVoiceSecondsLb.text = stringFormat(@"%d",[showcaseVoiceSeconds intValue]);
  74. }];
  75. }
  76. #pragma mark - mainAlbumView
  77. - (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView {
  78. if (pageView == self.mainAlbumView) {
  79. return self.viewModel.albumDataArray.count;
  80. } else {
  81. return self.viewModel.albumDataArray.count;
  82. }
  83. }
  84. - (UICollectionViewCell *)pagerView:(TYCyclePagerView *)pagerView cellForItemAtIndex:(NSInteger)index {
  85. if (pagerView == self.mainAlbumView) {
  86. YMPersonalPageMainAlbumCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageMainAlbumCell class]) forIndex:index];
  87. [cell ym_bindViewModel:self.viewModel.albumDataArray[index]];
  88. return cell;
  89. } else {
  90. YMPersonalPageSubAlbumCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageSubAlbumCell class]) forIndex:index];
  91. [cell ym_bindViewModel:self.viewModel.albumDataArray[index]];
  92. return cell;
  93. }
  94. }
  95. /// banner样式
  96. - (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView {
  97. TYCyclePagerViewLayout *layout = [[TYCyclePagerViewLayout alloc]init];
  98. if (pageView == self.mainAlbumView) {
  99. layout.itemSpacing = 0;
  100. layout.itemSize = CGSizeMake(pageView.bounds.size.width, pageView.bounds.size.height);
  101. } else {
  102. layout.itemSpacing = 5;
  103. layout.itemSize = CGSizeMake(adapt(30), adapt(30));
  104. }
  105. layout.scrollDirection = TYCyclePagerScrollDirectionHorizontal;
  106. return layout;
  107. }
  108. /// pagerView当前展示
  109. - (void)pagerView:(TYCyclePagerView *)pageView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex {
  110. if (pageView == self.mainAlbumView) {
  111. YMPersonalPageSubAlbumCell *fromIndexCell = (YMPersonalPageSubAlbumCell*)[self.subAlbumView.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:fromIndex inSection:self.subAlbumView.indexSection.section]];
  112. fromIndexCell.borderWidth = 0;
  113. YMPersonalPageSubAlbumCell *toIndexCell = (YMPersonalPageSubAlbumCell*)[self.subAlbumView.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:toIndex inSection:self.subAlbumView.indexSection.section]];
  114. toIndexCell.borderWidth = 1;
  115. [self.subAlbumView scrollToItemAtIndex:toIndex animate:YES];
  116. }else if (pageView == self.subAlbumView) {
  117. }
  118. }
  119. - (void)pagerView:(TYCyclePagerView *)pageView didSelectedItemCell:(__kindof UICollectionViewCell *)cell atIndex:(NSInteger)index{
  120. if (pageView == self.subAlbumView) {
  121. [self.mainAlbumView scrollToItemAtIndex:index animate:YES];
  122. }else if (pageView == self.mainAlbumView) {
  123. NSMutableArray *albumArr = [NSMutableArray array];
  124. for (YMPersonalPageAlbumCellViewModel *model in self.viewModel.albumDataArray) {
  125. if (model.isVideo) {
  126. YBIBVideoData *data = [YBIBVideoData new];
  127. data.videoURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@",[LCSaveData getImageUrl]?[LCSaveData getImageUrl]:BaseImgUrl,model.albumUrl]];
  128. data.projectiveView = self.mainAlbumView;
  129. [albumArr addObject:data];
  130. }else{
  131. YBIBImageData *data = [YBIBImageData new];
  132. data.imageURL = [LCTools getImageUrlWithAddress:model.albumUrl];
  133. data.projectiveView = self.mainAlbumView;
  134. [albumArr addObject:data];
  135. }
  136. }
  137. YBImageBrowser *browser = [YBImageBrowser new];
  138. browser.delegate = self;
  139. browser.dataSourceArray = albumArr;
  140. browser.currentPage = index;
  141. [browser show];
  142. }
  143. }
  144. - (void)pagerViewDidScroll:(TYCyclePagerView *)pageView{
  145. }
  146. /// pagerView将开始拖动
  147. - (void)pagerViewWillBeginDragging:(TYCyclePagerView *)pageView{
  148. }
  149. /// pagerView将开始减速
  150. - (void)pagerViewWillBeginDecelerating:(TYCyclePagerView *)pageView{
  151. }
  152. /// pagerView确认结束
  153. - (void)pagerViewDidEndDragging:(TYCyclePagerView *)pageView willDecelerate:(BOOL)decelerate{
  154. }
  155. /// pagerView确认减速
  156. - (void)pagerViewDidEndDecelerating:(TYCyclePagerView *)pageView{
  157. }
  158. /// pagerView将开始滚动动画
  159. - (void)pagerViewWillBeginScrollingAnimation:(TYCyclePagerView *)pageView{
  160. }
  161. /// pagerView确认结束滚动动画
  162. - (void)pagerViewDidEndScrollingAnimation:(TYCyclePagerView *)pageView{
  163. }
  164. - (TYCyclePagerView *)mainAlbumView{
  165. if (!_mainAlbumView) {
  166. _mainAlbumView = [[TYCyclePagerView alloc]init];
  167. _mainAlbumView.dataSource = self;
  168. _mainAlbumView.delegate = self;
  169. //无限滚动
  170. _mainAlbumView.isInfiniteLoop = NO;
  171. //自动轮播
  172. _mainAlbumView.autoScrollInterval = 0;
  173. [_mainAlbumView registerClass:[YMPersonalPageMainAlbumCell class] forCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageMainAlbumCell class])];
  174. }
  175. return _mainAlbumView;
  176. }
  177. - (TYCyclePagerView *)subAlbumView{
  178. if (!_subAlbumView) {
  179. _subAlbumView = [[TYCyclePagerView alloc]init];
  180. _subAlbumView.dataSource = self;
  181. _subAlbumView.delegate = self;
  182. //无限滚动
  183. _subAlbumView.isInfiniteLoop = NO;
  184. //自动轮播
  185. _subAlbumView.autoScrollInterval = 0;
  186. [_subAlbumView registerClass:[YMPersonalPageSubAlbumCell class] forCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageSubAlbumCell class])];
  187. }
  188. return _subAlbumView;
  189. }
  190. - (UIImageView *)showcaseVoiceView{
  191. if (!_showcaseVoiceView) {
  192. _showcaseVoiceView = [[UIImageView alloc]init];
  193. _showcaseVoiceView.image = ImageByName(@"ym_personal_call_bg");
  194. _showcaseVoiceView.userInteractionEnabled = true;
  195. WS(weakSelf)
  196. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  197. [_showcaseVoiceView addGestureRecognizer:tap];
  198. [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  199. if (!OCStringIsEmpty(weakSelf.viewModel.showcaseVoice)){
  200. [YMAudioPlayer sharedInstance].playUrlStr = [LCTools getImageUrlWithAddress:weakSelf.viewModel.showcaseVoice].absoluteString;
  201. }else{
  202. NSLog(@"路径错误");
  203. }
  204. }];
  205. }
  206. return _showcaseVoiceView;
  207. }
  208. - (UILabel *)showcaseVoiceSecondsLb{
  209. if (!_showcaseVoiceSecondsLb) {
  210. _showcaseVoiceSecondsLb = [[UILabel alloc]init];
  211. _showcaseVoiceSecondsLb.font = LCFont(12);
  212. _showcaseVoiceSecondsLb.textColor = HexColorFromRGB(0xFFFFFF);
  213. _showcaseVoiceSecondsLb.textAlignment = NSTextAlignmentRight;
  214. _showcaseVoiceSecondsLb.text = @"**";
  215. }
  216. return _showcaseVoiceSecondsLb;
  217. }
  218. @end