// // YMPersonalPageAlbumView.m // MSYOUPAI // // Created by YoMi on 2024/2/17. // Copyright © 2024 MS. All rights reserved. // #import "YMPersonalPageAlbumView.h" #import "YMPersonalPageViewModel.h" #import "YMPersonalPageMainAlbumCell.h" #import "YMPersonalPageSubAlbumCell.h" @interface YMPersonalPageAlbumView () /// 个人主页VM @property (nonatomic, strong) YMPersonalPageViewModel *viewModel; /// 主相册视图 @property (nonatomic, strong) TYCyclePagerView *mainAlbumView; /// 子相册视图 @property (nonatomic, strong) TYCyclePagerView *subAlbumView; /// 展示语音视图 @property (nonatomic, strong) UIImageView *showcaseVoiceView; /// 展示语音秒数 @property (nonatomic, strong) UILabel *showcaseVoiceSecondsLb; @end @implementation YMPersonalPageAlbumView - (void)ym_setupViews{ [self addSubview:self.mainAlbumView]; [self addSubview:self.subAlbumView]; [self addSubview:self.showcaseVoiceView]; [self.showcaseVoiceView addSubview:self.showcaseVoiceSecondsLb]; [self setNeedsUpdateConstraints]; [self updateConstraintsIfNeeded]; } - (void)updateConstraints{ [self.mainAlbumView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self); make.left.equalTo(self); make.right.equalTo(self); make.bottom.equalTo(self); make.height.mas_equalTo(adapt(375)); }]; [self.subAlbumView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(adapt(12)); make.right.equalTo(self).offset(adapt(-100)); make.bottom.equalTo(self).offset(adapt(-20)); make.height.mas_equalTo(adapt(44)); }]; [self.showcaseVoiceView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.subAlbumView.mas_centerY); make.right.equalTo(self).offset(adapt(-20)); make.width.mas_equalTo(adapt(73)); make.height.mas_equalTo(adapt(28)); }]; [self.showcaseVoiceSecondsLb mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.showcaseVoiceView.mas_centerY); make.right.equalTo(self.showcaseVoiceView).offset(adapt(-5)); }]; [super updateConstraints]; } - (void)ym_bindViewModel:(YMPersonalPageViewModel *)viewModel{ if (!viewModel) { return; } _viewModel = viewModel; @weakify(self) [[self.viewModel.refreshUISubject takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id result) { @strongify(self) [self.mainAlbumView reloadData]; [self.subAlbumView reloadData]; }]; [[[[RACObserve(self.viewModel, showcaseVoiceSeconds) distinctUntilChanged] deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(NSNumber * showcaseVoiceSeconds) { @strongify(self) self.showcaseVoiceView.hidden = [showcaseVoiceSeconds intValue] == 0 ? YES : NO; self.showcaseVoiceSecondsLb.text = stringFormat(@"%d",[showcaseVoiceSeconds intValue]); }]; } #pragma mark - mainAlbumView - (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView { if (pageView == self.mainAlbumView) { return self.viewModel.albumDataArray.count; } else { return self.viewModel.albumDataArray.count; } } - (UICollectionViewCell *)pagerView:(TYCyclePagerView *)pagerView cellForItemAtIndex:(NSInteger)index { if (pagerView == self.mainAlbumView) { YMPersonalPageMainAlbumCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageMainAlbumCell class]) forIndex:index]; [cell ym_bindViewModel:self.viewModel.albumDataArray[index]]; return cell; } else { YMPersonalPageSubAlbumCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageSubAlbumCell class]) forIndex:index]; [cell ym_bindViewModel:self.viewModel.albumDataArray[index]]; return cell; } } /// banner样式 - (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView { TYCyclePagerViewLayout *layout = [[TYCyclePagerViewLayout alloc]init]; if (pageView == self.mainAlbumView) { layout.itemSpacing = 0; layout.itemSize = CGSizeMake(pageView.bounds.size.width, pageView.bounds.size.height); } else { layout.itemSpacing = 5; layout.itemSize = CGSizeMake(adapt(30), adapt(30)); } layout.scrollDirection = TYCyclePagerScrollDirectionHorizontal; return layout; } /// pagerView当前展示 - (void)pagerView:(TYCyclePagerView *)pageView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex { if (pageView == self.mainAlbumView) { YMPersonalPageSubAlbumCell *fromIndexCell = (YMPersonalPageSubAlbumCell*)[self.subAlbumView.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:fromIndex inSection:self.subAlbumView.indexSection.section]]; fromIndexCell.borderWidth = 0; YMPersonalPageSubAlbumCell *toIndexCell = (YMPersonalPageSubAlbumCell*)[self.subAlbumView.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:toIndex inSection:self.subAlbumView.indexSection.section]]; toIndexCell.borderWidth = 1; [self.subAlbumView scrollToItemAtIndex:toIndex animate:YES]; }else if (pageView == self.subAlbumView) { } } - (void)pagerView:(TYCyclePagerView *)pageView didSelectedItemCell:(__kindof UICollectionViewCell *)cell atIndex:(NSInteger)index{ if (pageView == self.subAlbumView) { [self.mainAlbumView scrollToItemAtIndex:index animate:YES]; }else if (pageView == self.mainAlbumView) { NSMutableArray *albumArr = [NSMutableArray array]; for (YMPersonalPageAlbumCellViewModel *model in self.viewModel.albumDataArray) { if (model.isVideo) { YBIBVideoData *data = [YBIBVideoData new]; data.videoURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@",[LCSaveData getImageUrl]?[LCSaveData getImageUrl]:BaseImgUrl,model.albumUrl]]; data.projectiveView = self.mainAlbumView; [albumArr addObject:data]; }else{ YBIBImageData *data = [YBIBImageData new]; data.imageURL = [LCTools getImageUrlWithAddress:model.albumUrl]; data.projectiveView = self.mainAlbumView; [albumArr addObject:data]; } } YBImageBrowser *browser = [YBImageBrowser new]; browser.delegate = self; browser.dataSourceArray = albumArr; browser.currentPage = index; [browser show]; } } - (void)pagerViewDidScroll:(TYCyclePagerView *)pageView{ } /// pagerView将开始拖动 - (void)pagerViewWillBeginDragging:(TYCyclePagerView *)pageView{ } /// pagerView将开始减速 - (void)pagerViewWillBeginDecelerating:(TYCyclePagerView *)pageView{ } /// pagerView确认结束 - (void)pagerViewDidEndDragging:(TYCyclePagerView *)pageView willDecelerate:(BOOL)decelerate{ } /// pagerView确认减速 - (void)pagerViewDidEndDecelerating:(TYCyclePagerView *)pageView{ } /// pagerView将开始滚动动画 - (void)pagerViewWillBeginScrollingAnimation:(TYCyclePagerView *)pageView{ } /// pagerView确认结束滚动动画 - (void)pagerViewDidEndScrollingAnimation:(TYCyclePagerView *)pageView{ } - (TYCyclePagerView *)mainAlbumView{ if (!_mainAlbumView) { _mainAlbumView = [[TYCyclePagerView alloc]init]; _mainAlbumView.dataSource = self; _mainAlbumView.delegate = self; //无限滚动 _mainAlbumView.isInfiniteLoop = NO; //自动轮播 _mainAlbumView.autoScrollInterval = 0; [_mainAlbumView registerClass:[YMPersonalPageMainAlbumCell class] forCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageMainAlbumCell class])]; } return _mainAlbumView; } - (TYCyclePagerView *)subAlbumView{ if (!_subAlbumView) { _subAlbumView = [[TYCyclePagerView alloc]init]; _subAlbumView.dataSource = self; _subAlbumView.delegate = self; //无限滚动 _subAlbumView.isInfiniteLoop = NO; //自动轮播 _subAlbumView.autoScrollInterval = 0; [_subAlbumView registerClass:[YMPersonalPageSubAlbumCell class] forCellWithReuseIdentifier:NSStringFromClass([YMPersonalPageSubAlbumCell class])]; } return _subAlbumView; } - (UIImageView *)showcaseVoiceView{ if (!_showcaseVoiceView) { _showcaseVoiceView = [[UIImageView alloc]init]; _showcaseVoiceView.image = ImageByName(@"ym_personal_call_bg"); _showcaseVoiceView.userInteractionEnabled = true; WS(weakSelf) UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init]; [_showcaseVoiceView addGestureRecognizer:tap]; [[[tap rac_gestureSignal] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { if (!OCStringIsEmpty(weakSelf.viewModel.showcaseVoice)){ [YMAudioPlayer sharedInstance].playUrlStr = [LCTools getImageUrlWithAddress:weakSelf.viewModel.showcaseVoice].absoluteString; }else{ NSLog(@"路径错误"); } }]; } return _showcaseVoiceView; } - (UILabel *)showcaseVoiceSecondsLb{ if (!_showcaseVoiceSecondsLb) { _showcaseVoiceSecondsLb = [[UILabel alloc]init]; _showcaseVoiceSecondsLb.font = LCFont(12); _showcaseVoiceSecondsLb.textColor = HexColorFromRGB(0xFFFFFF); _showcaseVoiceSecondsLb.textAlignment = NSTextAlignmentRight; _showcaseVoiceSecondsLb.text = @"**"; } return _showcaseVoiceSecondsLb; } @end