Files
peko-ios/YuMi/Modules/YMMine/View/Medals/MedalsViewController.m

859 lines
31 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MedalsViewController.m
// YuMi
//
// Created by P on 2025/6/17.
//
#import "MedalsViewController.h"
#import "MedalsPresenter.h"
#import "UserInfoModel.h"
#import "TYCyclePagerView.h"
#import "MedalsCollectionViewCell.h"
#import "MedalsCyclePagerCell.h"
#import "MedalsDetailView.h"
#import "MedalsWearingViewController.h"
#import "MedalsRankViewController.h"
#import <QGVAPWrapView.h>
#import "XPRoomGiftAnimationParser.h"
typedef enum : NSInteger {
MedalsCenterTab_TaskMedals = 1,
MedalsCenterTab_ActivityMedals = 2,
MedalsCenterTab_GloryMedals = 3,
} MedalsCenterTabType;
typedef enum : NSInteger {
MedalsCenterDisplayType_Mine,
MedalsCenterDisplayType_Other,
MedalsCenterDisplayType_Square
} MedalsCenterDisplayType;
@interface MedalsViewController () <MedalsPresenterProtocol, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, TYCyclePagerViewDataSource, TYCyclePagerViewDelegate>
@property (nonatomic, strong) UserInfoModel *userInfo;
@property (nonatomic, copy) NSArray <UIButton *> *centerTabButtons;
@property (nonatomic, strong) UILabel *medalDescLabel;
@property (nonatomic, strong) UIButton *emptyUserMedalButton;
@property (nonatomic, strong) TYCyclePagerView *medalsCyclePagerView;
@property (nonatomic, strong) UIView *emptyView;
@property (nonatomic, copy) UICollectionView *medalsCollectionView;
@property (nonatomic, strong) NSMutableArray <MedalSeriesVo *>*datasourceTaskMedals;
@property (nonatomic, strong) NSMutableArray <MedalSeriesVo *>*datasourceActivityMedals;
@property (nonatomic, strong) NSMutableArray <MedalSeriesVo *>*datasourceGloryMedals;
@property (nonatomic, copy) NSArray <MedalVo *> *useMedals;
@property (nonatomic, assign) NSInteger currentPageTaskMedals;
@property (nonatomic, assign) NSInteger currentPageActivityMedals;
@property (nonatomic, assign) NSInteger currentPageGloryMedals;
@property (nonatomic, assign) MedalsCenterTabType currentTabType;
@property (nonatomic, assign) MedalsCenterDisplayType displayType;
@property (nonatomic, strong) UserMedalsModel *userMedalsModel;
@property (nonatomic, strong) UIImageView *otherBG;
@property (nonatomic, strong) NetImageView *otherAvatar;
@property (nonatomic, strong) NetImageView *otherMedal;
@property (nonatomic, strong) VAPView *otherMP4View;
@property (nonatomic, strong) XPRoomGiftAnimationParser *mp4Parser;
@property (nonatomic, strong) UILabel *otherNameLabel;
@property (nonatomic, strong) UILabel *otherCountLabel;
@end
@implementation MedalsViewController
- (instancetype)initForMyMedals:(UserInfoModel *)userInfo {
self = [super init];
if (self) {
self.displayType = MedalsCenterDisplayType_Mine;
self.userInfo = userInfo;
}
return self;
}
- (instancetype)initForOtherMedals:(UserInfoModel *)userInfo {
self = [super init];
if (self) {
self.displayType = MedalsCenterDisplayType_Other;
self.userInfo = userInfo;
}
return self;
}
- (instancetype)initForMedalsSquare {
self = [super init];
if (self) {
self.displayType = MedalsCenterDisplayType_Square;
}
return self;
}
- (BOOL)isHiddenNavBar {
return YES;
}
- (MedalsPresenter *)createPresenter {
return [[MedalsPresenter alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setupUI];
[self setupData];
}
#pragma mark - UI
- (void)setupUI {
[self setupBackground];
if (self.displayType != MedalsCenterDisplayType_Other) {
[self setupWearingButton];
if (self.userInfo.medals.medalCount == 0) {
[self setupEmptyUserMedals];
} else {
[self setupWearingUserMedals];
}
} else {
[self setupOthersMedalInfo];
}
[self setupCenterTabs];
[self setupBottomMedalsList];
[self setupEmptyView];
[self setupNavigationBar];
}
- (void)setupNavigationBar {
NSString *title = @"";
NSArray *navigationButtons = [NSArray array];
switch (self.displayType) {
case MedalsCenterDisplayType_Mine:
title = YMLocalizedString(@"20.20.61_text_1");
navigationButtons = @[[self medalsRankButton],
[self medalsSquareButton]];
break;
case MedalsCenterDisplayType_Other:
title = [NSString stringWithFormat:YMLocalizedString(@"20.20.61_text_14"),
self.userInfo.nick];
break;
case MedalsCenterDisplayType_Square:
title = YMLocalizedString(@"20.20.61_text_10");
break;
default:
break;
}
[self setupCustomNavigationBar:^{}
title:title
titleColor:[UIColor whiteColor]];
[self setupCustonNavigationRightButtons:navigationButtons
sizes:@[
[NSValue valueWithCGSize:CGSizeMake(22, 22)],
[NSValue valueWithCGSize:CGSizeMake(22, 22)]
]];
}
- (void)setupBackground {
self.view.backgroundColor = UIColorFromRGB(0x1B0043);
UIImageView *bottomBg = [self bottomBG];
[self.view addSubview:bottomBg];
if (self.displayType == MedalsCenterDisplayType_Other) {
[bottomBg mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.leading.trailing.mas_equalTo(self.view);
make.top.mas_equalTo(self.view).offset(66 + 98 + 44 + kSafeAreaTopHeight);
}];
} else {
UIImageView *topBg = [self topBG];
[self.view addSubview:topBg];
[topBg mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.leading.trailing.mas_equalTo(self.view);
make.height.mas_equalTo(kGetScaleWidth(314));
}];
[bottomBg mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.leading.trailing.mas_equalTo(self.view);
make.height.mas_equalTo(kGetScaleWidth(445));
}];
}
}
- (void)setupOthersMedalInfo {
UIImageView *bg = [[UIImageView alloc] initWithImage:kImage(@"medals_other_bg")];
[self.view addSubview:bg];
[bg mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(80);
make.leading.trailing.mas_equalTo(self.view).inset(12);
make.height.mas_equalTo(kGetScaleWidth(98));
}];
self.otherBG = bg;
[self.view addSubview:self.otherAvatar];
[self.otherAvatar mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(bg);
make.leading.mas_equalTo(bg).offset(15);
make.size.mas_equalTo(CGSizeMake(53, 53));
}];
self.otherNameLabel = [UILabel labelInitWithText:@""
font:kFontSemibold(15)
textColor:UIColorFromRGB(0x313131)];
[self.view addSubview:self.otherNameLabel];
[self.otherNameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.otherAvatar.mas_trailing).offset(10);
make.top.mas_equalTo(self.otherAvatar);
}];
UIImageView *rankIcon = [[UIImageView alloc] initWithImage:kImage(@"medals_rank")];
[self.view addSubview:rankIcon];
[rankIcon mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.otherAvatar.mas_trailing).offset(10);
make.bottom.mas_equalTo(self.otherAvatar);
make.size.mas_equalTo(CGSizeMake(14, 18));
}];
self.otherCountLabel = [UILabel labelInitWithText:@""
font:kFontMedium(20)
textColor:UIColorFromRGB(0x313131)];
[self.view addSubview:self.otherCountLabel];
[self.otherCountLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(rankIcon.mas_trailing).offset(6);
make.centerY.mas_equalTo(rankIcon);
}];
self.otherMedal = [[NetImageView alloc] initWithImage:kImage(@"medals_empty")];
[self.view addSubview:self.otherMedal];
[self.otherMedal mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(bg);
make.trailing.mas_equalTo(bg).offset(-15);
make.size.mas_equalTo(CGSizeMake(80, 80));
}];
}
- (void)setupCenterTabs {
UIStackView *centerTabsStackView = [self centerTabStack];
[self.view addSubview:centerTabsStackView];
[centerTabsStackView mas_makeConstraints:^(MASConstraintMaker *make) {
if (self.displayType == MedalsCenterDisplayType_Other) {
make.top.mas_equalTo(self.otherBG.mas_bottom).offset(18);
} else {
make.top.mas_equalTo(kGetScaleWidth(314));
// make.bottom.mas_equalTo(kGetScaleWidth(-445));
}
make.height.mas_equalTo(44);
make.leading.trailing.mas_equalTo(self.view);
}];
}
- (void)setupWearingButton {
UIView *wearingBg = [[UIView alloc] init];
[wearingBg addGradientBackgroundWithColors:@[
UIColorFromRGB(0xf2e7ff),
UIColorFromRGB(0xb497f6)
] startPoint:CGPointMake(0, 0.5) endPoint:CGPointMake(1, 0.5) cornerRadius:25/2];
[wearingBg setAllCornerRadius:25/2 borderWidth:1 borderColor:[UIColor whiteColor]];
[self.view addSubview:wearingBg];
UIButton *wearingButton = [self wearingButton];
[self.view addSubview:wearingButton];
[wearingButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(90);
make.trailing.mas_equalTo(-12);
}];
[wearingBg mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(wearingButton).insets(UIEdgeInsetsMake(0, -15, 0, -25));
}];
}
- (void)setupEmptyUserMedals {
[self.view addSubview:self.medalsCyclePagerView];
[self.view addSubview:self.emptyUserMedalButton];
[self.emptyUserMedalButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(184);
make.centerX.mas_equalTo(self.view);
make.top.mas_equalTo(100);
}];
[self.medalsCyclePagerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.emptyUserMedalButton);
make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width);
make.height.mas_equalTo(self.emptyUserMedalButton);
}];
[self.view addSubview:self.medalDescLabel];
self.medalDescLabel.text = YMLocalizedString(@"20.20.61_text_6");
[self.medalDescLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kGetScaleWidth(290));
make.leading.trailing.mas_equalTo(self.view).inset(20);
make.height.mas_equalTo(20);
}];
}
- (void)setupWearingUserMedals {
// 添加 TYCyclePagerView 用于显示佩戴的勋章
[self.view addSubview:self.medalsCyclePagerView];
[self.medalsCyclePagerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(100);
make.centerX.mas_equalTo(self.view);
make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width);
make.height.mas_equalTo(184);
}];
[self.view addSubview:self.medalDescLabel];
self.medalDescLabel.text = @"显示过期时间";//YMLocalizedString(@"20.20.61_text_6");
[self.medalDescLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kGetScaleWidth(290));
make.leading.trailing.mas_equalTo(self.view).inset(20);
make.height.mas_equalTo(20);
}];
}
- (void)setupScrollMedalsList {
}
- (void)setupBottomMedalsList {
[self.view addSubview:self.medalsCollectionView];
[self.medalsCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.view);
make.trailing.leading.mas_equalTo(self.view).inset(26);
make.height.mas_equalTo(kGetScaleWidth(380));
}];
// 添加下拉刷新
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
header.lastUpdatedTimeLabel.hidden = YES;
self.medalsCollectionView.mj_header = header;
// 添加上拉加载更多
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
self.medalsCollectionView.mj_footer = footer;
}
- (void)setupEmptyView {
self.emptyView.hidden = YES;
[self.view insertSubview:self.emptyView
belowSubview:self.medalsCollectionView];
[self.emptyView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.leading.trailing.mas_equalTo(self.medalsCollectionView);
make.height.mas_equalTo(200);
}];
}
#pragma mark - Refresh Methods
- (void)headerRefresh {
NSInteger page = 1;
switch (self.currentTabType) {
case MedalsCenterTab_TaskMedals:
self.currentPageTaskMedals = 1;
page = self.currentPageTaskMedals;
break;
case MedalsCenterTab_ActivityMedals:
self.currentPageActivityMedals = 1;
page = self.currentPageActivityMedals;
break;
case MedalsCenterTab_GloryMedals:
self.currentPageGloryMedals = 1;
page = self.currentPageGloryMedals;
break;
default:
break;
}
[self loadMedalsList:self.currentTabType page:page];
}
- (void)footerRefresh {
NSInteger page = 1;
switch (self.currentTabType) {
case MedalsCenterTab_TaskMedals:
self.currentPageTaskMedals += 1;
page = self.currentPageTaskMedals;
break;
case MedalsCenterTab_ActivityMedals:
self.currentPageActivityMedals += 1;
page = self.currentPageActivityMedals;
break;
case MedalsCenterTab_GloryMedals:
self.currentPageGloryMedals += 1;
page = self.currentPageGloryMedals;
break;
default:
break;
}
[self loadMedalsList:self.currentTabType page:page];
}
- (void)endReresh {
[self.medalsCollectionView.mj_header endRefreshing];
[self.medalsCollectionView.mj_footer endRefreshing];
}
#pragma mark - Load datas
- (void)setupData {
self.datasourceTaskMedals = @[].mutableCopy;
self.datasourceActivityMedals = @[].mutableCopy;
self.datasourceGloryMedals = @[].mutableCopy;
self.currentPageTaskMedals = 1;
self.currentPageActivityMedals = 1;
self.currentPageGloryMedals = 1;
self.currentTabType = MedalsCenterTab_TaskMedals;
[self loadMedalsList:self.currentTabType page:1];
}
- (void)loadMedalsList:(MedalsCenterTabType)tabType page:(NSInteger)tabPage {
if (self.displayType == MedalsCenterDisplayType_Square) {
[self.presenter squareMedals:tabPage
type:tabType];
} else {
[self.presenter userMedals:self.userInfo.uid
page:tabPage
type:tabType];
}
}
#pragma mark - MedalsPresenterProtocol
- (void)userMedalsSuccess:(UserMedalsModel *)userMedalsModel {
self.userMedalsModel = userMedalsModel;
[self endReresh];
[self _updateDataSource:userMedalsModel.medalSeries];
[self _updateOtherInfo:userMedalsModel];
[self _updateWearingInfo];
}
- (void)userMedalsFailure {
[self endReresh];
// 如果是加载更多失败,页码需要回退
switch (self.currentTabType) {
case MedalsCenterTab_TaskMedals:
if (self.currentPageTaskMedals > 1) {
self.currentPageTaskMedals--;
}
break;
case MedalsCenterTab_ActivityMedals:
if (self.currentPageActivityMedals > 1) {
self.currentPageActivityMedals--;
}
break;
case MedalsCenterTab_GloryMedals:
if (self.currentPageGloryMedals > 1) {
self.currentPageGloryMedals--;
}
break;
default:
break;
}
[self _updateDataSource:@[]];
}
- (void)squareMedalsSuccess:(NSArray <MedalSeriesVo *>*)squareMedalsModel {
[self endReresh];
[self _updateDataSource:squareMedalsModel];
}
- (void)squareMedalsFailure {
[self endReresh];
// 如果是加载更多失败,页码需要回退
switch (self.currentTabType) {
case MedalsCenterTab_TaskMedals:
if (self.currentPageTaskMedals > 1) {
self.currentPageTaskMedals--;
}
break;
case MedalsCenterTab_ActivityMedals:
if (self.currentPageActivityMedals > 1) {
self.currentPageActivityMedals--;
}
break;
case MedalsCenterTab_GloryMedals:
if (self.currentPageGloryMedals > 1) {
self.currentPageGloryMedals--;
}
break;
default:
break;
}
}
- (void)_updateWearingInfo {
self.useMedals = self.userMedalsModel.useMedals;
if (self.displayType != MedalsCenterDisplayType_Other) {
if (self.useMedals.count > 0 ) {
self.emptyUserMedalButton.hidden = YES;
[self.medalsCyclePagerView reloadData];
} else {
self.emptyUserMedalButton.hidden = NO;
self.medalsCyclePagerView.hidden = YES;
}
}
}
- (void)_updateOtherInfo:(UserMedalsModel *)userModel {
if (self.displayType == MedalsCenterDisplayType_Other) {
self.otherAvatar.imageUrl = userModel.avatar;
self.otherNameLabel.text = userModel.nick;
self.otherCountLabel.text = @(userModel.medalNum).stringValue;
}
}
- (void)_updateDataSource:(NSArray <MedalSeriesVo *>*)models {
if (models.count < [self.presenter pageSize]) {
[self.medalsCollectionView.mj_footer endRefreshingWithNoMoreData];
} else {
[self.medalsCollectionView.mj_footer resetNoMoreData];
}
switch (self.currentTabType) {
case MedalsCenterTab_TaskMedals:
if (self.currentPageTaskMedals == 1) {
self.emptyView.hidden = (models.count != 0);
self.datasourceTaskMedals = models.mutableCopy;
} else {
[self.datasourceTaskMedals addObjectsFromArray:models];
}
break;
case MedalsCenterTab_ActivityMedals:
if (self.currentPageActivityMedals == 1) {
self.emptyView.hidden = (models.count != 0);
self.datasourceActivityMedals = models.mutableCopy;
} else {
[self.datasourceActivityMedals addObjectsFromArray:models];
}
break;
case MedalsCenterTab_GloryMedals:
if (self.currentPageGloryMedals == 1) {
self.emptyView.hidden = (models.count != 0);
self.datasourceGloryMedals = models.mutableCopy;
} else {
[self.datasourceGloryMedals addObjectsFromArray:models];
}
break;
default:
break;
}
[self.medalsCollectionView reloadData];
}
#pragma mark - Button actions
- (void)didTapSquareButton:(UIButton *)sender {
MedalsViewController *vc = [[MedalsViewController alloc] initForMedalsSquare];
[self.navigationController pushViewController:vc animated:YES];
}
- (void)didTapRankButton:(UIButton *)sender {
MedalsRankViewController *vc = [[MedalsRankViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
}
- (void)didTapWearingButton:(UIButton *)sender {
MedalsWearingViewController *vc = [[MedalsWearingViewController alloc] init];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
}
- (void)didTapEmptyMedalButton:(UIButton *)sender {
MedalsWearingViewController *vc = [[MedalsWearingViewController alloc] init];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
}
- (void)didTapCenterTab:(UIButton *)sender {
if (sender.isSelected == YES) {
return;
}
for (UIButton *b in self.centerTabButtons) {
b.selected = NO;
}
sender.selected = YES;
self.currentTabType = sender.tag;
[self loadMedalsList:self.currentTabType page:1];
}
#pragma mark - UICollectionView DataSource & Delegate
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
switch (self.currentTabType) {
case MedalsCenterTab_TaskMedals:
return self.datasourceTaskMedals.count;
break;
case MedalsCenterTab_ActivityMedals:
return self.datasourceActivityMedals.count;
break;
case MedalsCenterTab_GloryMedals:
return self.datasourceGloryMedals.count;
break;
default:
break;
}
}
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MedalsCollectionViewCell *cell = [MedalsCollectionViewCell cellFor:collectionView atIndexPath:indexPath];
[cell updateCell:[self loadModel:indexPath.item]];
return cell;
}
// 处理 cell 的可见性
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
if ([cell isKindOfClass:[MedalsCollectionViewCell class]]) {
[(MedalsCollectionViewCell *)cell willDisplay];
}
}
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
if ([cell isKindOfClass:[MedalsCollectionViewCell class]]) {
[(MedalsCollectionViewCell *)cell didEndDisplaying];
}
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
MedalsDetailView *view = [[MedalsDetailView alloc] initWithFrame:self.view.bounds];
view.detailItemVo = [self loadModel:indexPath.item];
[self.view addSubview:view];
}
- (MedalSeriesVo *)loadModel:(NSInteger)row {
MedalSeriesVo *model = nil;
switch (self.currentTabType) {
case MedalsCenterTab_TaskMedals:
model = [self.datasourceTaskMedals xpSafeObjectAtIndex:row];
break;
case MedalsCenterTab_ActivityMedals:
model = [self.datasourceActivityMedals xpSafeObjectAtIndex:row];
break;
case MedalsCenterTab_GloryMedals:
model = [self.datasourceGloryMedals xpSafeObjectAtIndex:row];
break;
default:
break;
}
return model;
}
#pragma mark - TYCyclePagerView DataSource & Delegate
- (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView {
return self.useMedals.count;
}
- (__kindof UICollectionViewCell *)pagerView:(TYCyclePagerView *)pagerView cellForItemAtIndex:(NSInteger)index {
MedalsCyclePagerCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@"MedalsCyclePagerCell" forIndex:index];
MedalVo *vo = [self.useMedals xpSafeObjectAtIndex:index];
[cell updateCell:vo];
return cell;
}
- (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView {
TYCyclePagerViewLayout *layout = [[TYCyclePagerViewLayout alloc] init];
layout.itemSize = CGSizeMake(184, 184);
layout.itemSpacing = 10;
layout.layoutType = TYCyclePagerTransformLayoutLinear;
layout.itemHorizontalCenter = YES;
return layout;
}
- (void)pagerView:(TYCyclePagerView *)pageView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex {
// 处理滚动事件,暂停之前的 cell恢复当前的 cell
// 获取可见的 cells
NSArray *visibleCells = pageView.collectionView.visibleCells;
// 简化处理:遍历所有可见的 cells暂停非当前 index 的 cell
for (UICollectionViewCell *cell in visibleCells) {
if ([cell isKindOfClass:[MedalsCyclePagerCell class]]) {
NSIndexPath *indexPath = [pageView.collectionView indexPathForCell:cell];
if (indexPath) {
NSInteger cellIndex = indexPath.item;
if (cellIndex == toIndex) {
[(MedalsCyclePagerCell *)cell willDisplay];
} else {
[(MedalsCyclePagerCell *)cell didEndDisplaying];
}
}
}
}
}
#pragma mark - Lazy load
- (UIButton *)medalsSquareButton {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(didTapSquareButton:) forControlEvents:UIControlEventTouchUpInside];
[button setBackgroundImage:kImage(@"medals_square") forState:UIControlStateNormal];
return button;
}
- (UIButton *)medalsRankButton {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(didTapRankButton:) forControlEvents:UIControlEventTouchUpInside];
[button setBackgroundImage:kImage(@"medals_rank") forState:UIControlStateNormal];
return button;
}
- (UIButton *)wearingButton {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(didTapWearingButton:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:YMLocalizedString(@"20.20.61_text_2") forState:UIControlStateNormal];
[button setTitleColor:UIColorFromRGB(0x201440) forState:UIControlStateNormal];
button.titleLabel.font = kFontMedium(12);
return button;
}
- (UIImageView *)topBG {
UIImageView *iv = [[UIImageView alloc] initWithImage:kImage(@"medals_top_bg")];
iv.contentMode = UIViewContentModeScaleAspectFit;
return iv;
}
- (UIImageView *)bottomBG {
UIImageView *iv = [[UIImageView alloc] initWithImage:kImage(@"medals_bottom_bg")];
iv.contentMode = UIViewContentModeScaleAspectFit;
return iv;
}
- (UIButton *)taskMedalsButton:(MedalsCenterTabType)tabType {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.tag = tabType;
switch (tabType) {
case MedalsCenterTab_TaskMedals:
[button setTitle:YMLocalizedString(@"20.20.61_text_3") forState:UIControlStateNormal];
break;
case MedalsCenterTab_ActivityMedals:
[button setTitle:YMLocalizedString(@"20.20.61_text_4") forState:UIControlStateNormal];
break;
case MedalsCenterTab_GloryMedals:
[button setTitle:YMLocalizedString(@"20.20.61_text_5") forState:UIControlStateNormal];
break;
default:
break;
}
[button addTarget:self action:@selector(didTapCenterTab:) forControlEvents:UIControlEventTouchUpInside];
[button setBackgroundImage:kImage(@"medals_tab_normal") forState:UIControlStateNormal];
[button setBackgroundImage:kImage(@"medals_tab_selected") forState:UIControlStateSelected];
[button setTitleColor:UIColorFromRGB(0xd8a2ff) forState:UIControlStateNormal];
[button setTitleColor:UIColorFromRGB(0xFFFFFF) forState:UIControlStateSelected];
[button.titleLabel setFont:kFontMedium(13)];
[button setAdjustsImageWhenDisabled:NO];
return button;
}
- (UIStackView *)centerTabStack {
UIButton *taskMedalsButton = [self taskMedalsButton:MedalsCenterTab_TaskMedals];
taskMedalsButton.selected = YES;
UIButton *activityMedalsButton = [self taskMedalsButton:MedalsCenterTab_ActivityMedals];
UIButton *gloryMedalsButton = [self taskMedalsButton:MedalsCenterTab_GloryMedals];
self.centerTabButtons = @[
taskMedalsButton,
activityMedalsButton,
gloryMedalsButton
];
UIStackView *stack = [[UIStackView alloc] initWithArrangedSubviews:self.centerTabButtons];
stack.distribution = UIStackViewDistributionFillEqually;
return stack;
}
- (UILabel *)medalDescLabel {
if (!_medalDescLabel) {
_medalDescLabel = [UILabel labelInitWithText:@""
font:kFontRegular(12)
textColor:[UIColor whiteColor]];
_medalDescLabel.textAlignment = NSTextAlignmentCenter;
}
return _medalDescLabel;
}
- (UIButton *)emptyUserMedalButton {
if (!_emptyUserMedalButton) {
_emptyUserMedalButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_emptyUserMedalButton setImage:kImage(@"medals_empty")
forState:UIControlStateNormal];
[_emptyUserMedalButton addTarget:self
action:@selector(didTapEmptyMedalButton:)
forControlEvents:UIControlEventTouchUpInside];
}
return _emptyUserMedalButton;
}
- (UICollectionView *)medalsCollectionView {
if (!_medalsCollectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(kGetScaleWidth(156), kGetScaleWidth(218));
layout.minimumInteritemSpacing = 6;
layout.minimumLineSpacing = 6;
_medalsCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
_medalsCollectionView.backgroundColor = [UIColor clearColor];
_medalsCollectionView.delegate = self;
_medalsCollectionView.dataSource = self;
[MedalsCollectionViewCell registerTo:_medalsCollectionView];
}
return _medalsCollectionView;
}
- (UIView *)emptyView {
if (!_emptyView) {
_emptyView = [[UIView alloc] init];
_emptyView.backgroundColor = [UIColor clearColor];
UILabel *titleLabel = [UILabel labelInitWithText:YMLocalizedString(@"20.20.61_text_7")
font:kFontRegular(14)
textColor:UIColorFromRGB(0xafb1b3)];
titleLabel.numberOfLines = 2;
titleLabel.textAlignment = NSTextAlignmentCenter;
UIImageView *ufoImageView = [[UIImageView alloc] initWithImage:kImage(@"common_empty_UFO")];
[_emptyView addSubview:ufoImageView];
[_emptyView addSubview:titleLabel];
[ufoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(_emptyView);
make.top.mas_equalTo(20);
make.size.mas_equalTo(CGSizeMake(110, 110));
}];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(_emptyView);
make.top.mas_equalTo(ufoImageView.mas_bottom).offset(10);
make.leading.trailing.mas_equalTo(_emptyView).inset(20);
}];
}
return _emptyView;
}
- (NetImageView *)otherAvatar {
if (!_otherAvatar) {
NetImageConfig *config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
_otherAvatar = [[NetImageView alloc] initWithConfig:config];
[_otherAvatar setAllCornerRadius:53/2 borderWidth:1 borderColor:[UIColor whiteColor]];
}
return _otherAvatar;
}
- (TYCyclePagerView *)medalsCyclePagerView {
if (!_medalsCyclePagerView) {
_medalsCyclePagerView = [[TYCyclePagerView alloc] init];
_medalsCyclePagerView.dataSource = self;
_medalsCyclePagerView.delegate = self;
_medalsCyclePagerView.backgroundColor = [UIColor clearColor];
_medalsCyclePagerView.isInfiniteLoop = NO;
_medalsCyclePagerView.clipsToBounds = NO;
[_medalsCyclePagerView registerClass:[MedalsCyclePagerCell class]
forCellWithReuseIdentifier:@"MedalsCyclePagerCell"];
}
return _medalsCyclePagerView;
}
@end