feat(勋章): 新增多等级高亮功能并优化勋章展示逻辑
refactor(勋章排行): 重构排行榜分页加载和刷新逻辑 fix(会话): 优化官方账号判断逻辑和跳转处理 style(UI): 调整勋章排行榜和游戏菜单UI布局 chore: 更新Podfile配置和bitcode框架列表
This commit is contained in:
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -35,5 +35,6 @@
|
||||
"Superview",
|
||||
"Uids",
|
||||
"XNDJTDD"
|
||||
]
|
||||
],
|
||||
"C_Cpp.errorSquiggles": "disabled"
|
||||
}
|
3
Podfile
3
Podfile
@@ -61,7 +61,7 @@ target 'YuMi' do
|
||||
|
||||
pod 'UMCommon'
|
||||
pod 'UMDevice'
|
||||
# pod 'ZLCollectionViewFlowLayout'
|
||||
pod 'ZLCollectionViewFlowLayout'
|
||||
pod 'TABAnimated'
|
||||
pod 'YuMi',:path=>'yum'
|
||||
pod 'QCloudCOSXML'
|
||||
@@ -74,6 +74,7 @@ post_install do |installer|
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
|
||||
config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf-with-dsym'
|
||||
config.build_settings['ENABLE_BITCODE'] = 'NO'
|
||||
xcconfig_path = config.base_configuration_reference.real_path
|
||||
xcconfig = File.read(xcconfig_path)
|
||||
xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -157,7 +157,7 @@
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
if (![[[ClientConfig shareConfig].configInfo officialAccountUids] containsObject:self.session.sessionId]) {
|
||||
if (![NIMMessageUtils isOfficalAccount:self.session.sessionId]) {
|
||||
[self.presenter getFansLike:self.session.sessionId];
|
||||
if (!self.userInfo) {
|
||||
[self.presenter getUserInfoWithUid:self.session.sessionId];
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#import "XPSkillCardPlayerManager.h"
|
||||
#import "MessagePresenter.h"
|
||||
#import "MessageProtocol.h"
|
||||
#import "NIMMessageUtils.h"
|
||||
|
||||
NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey";
|
||||
|
||||
@@ -147,10 +148,25 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey";
|
||||
|
||||
- (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo {
|
||||
if (userInfo) {
|
||||
SessionViewController *vc = [[SessionViewController alloc] initWithSession:self.recentSession.session];
|
||||
vc.openType = self.openType;
|
||||
vc.userInfo = userInfo;
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
|
||||
if (self.openType == SessionListOpenTypeRoom) {
|
||||
SessionViewController * sessionVC =[[SessionViewController alloc] initWithSession:self.recentSession.session];
|
||||
sessionVC.userInfo = userInfo;
|
||||
sessionVC.openType = self.openType;
|
||||
CATransition *transition = [CATransition animation];
|
||||
transition.duration = 0.3f;
|
||||
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
|
||||
transition.type = kCATransitionPush;
|
||||
transition.subtype = kCATransitionFromRight;
|
||||
[self.mainController.view.layer addAnimation:transition forKey:nil];
|
||||
[self.mainController.view addSubview:sessionVC.view];
|
||||
[self.mainController addChildViewController:sessionVC];
|
||||
} else {
|
||||
SessionViewController *vc = [[SessionViewController alloc] initWithSession:self.recentSession.session];
|
||||
vc.openType = self.openType;
|
||||
vc.userInfo = userInfo;
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,28 +176,28 @@ NSString * const kMessageShowReadDotKey = @"kMessageShowReadDotKey";
|
||||
return;
|
||||
}
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
if (self.openType == SessionListOpenTypeRoom) {
|
||||
NIMRecentSession *recentSession = self.recentSessions[indexPath.row];
|
||||
SessionViewController * sessionVC =[[SessionViewController alloc] initWithSession:recentSession.session];
|
||||
sessionVC.openType = self.openType;
|
||||
CATransition *transition = [CATransition animation];
|
||||
transition.duration = 0.3f;
|
||||
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
|
||||
transition.type = kCATransitionPush;
|
||||
transition.subtype = kCATransitionFromRight;
|
||||
[self.mainController.view.layer addAnimation:transition forKey:nil];
|
||||
[self.mainController.view addSubview:sessionVC.view];
|
||||
[self.mainController addChildViewController:sessionVC];
|
||||
} else {
|
||||
NIMRecentSession *recentSession = self.recentSessions[indexPath.row];
|
||||
self.recentSession = recentSession;
|
||||
if ([[[ClientConfig shareConfig].configInfo officialAccountUids] containsObject:self.recentSession.session.sessionId]) {
|
||||
NIMRecentSession *recentSession = self.recentSessions[indexPath.row];
|
||||
self.recentSession = recentSession;
|
||||
|
||||
if ([NIMMessageUtils isOfficalAccount:self.recentSession.session.sessionId]) {
|
||||
if (self.openType == SessionListOpenTypeRoom) {
|
||||
SessionViewController * sessionVC =[[SessionViewController alloc] initWithSession:self.recentSession.session];
|
||||
sessionVC.openType = self.openType;
|
||||
CATransition *transition = [CATransition animation];
|
||||
transition.duration = 0.3f;
|
||||
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
|
||||
transition.type = kCATransitionPush;
|
||||
transition.subtype = kCATransitionFromRight;
|
||||
[self.mainController.view.layer addAnimation:transition forKey:nil];
|
||||
[self.mainController.view addSubview:sessionVC.view];
|
||||
[self.mainController addChildViewController:sessionVC];
|
||||
} else {
|
||||
SessionViewController *vc = [[SessionViewController alloc] initWithSession:self.recentSession.session];
|
||||
vc.openType = self.openType;
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
} else {
|
||||
[self.presenter getUserInfoWithUid:recentSession.session.sessionId];
|
||||
}
|
||||
} else {
|
||||
[self.presenter getUserInfoWithUid:recentSession.session.sessionId];
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -75,6 +75,8 @@
|
||||
}];
|
||||
|
||||
self.titleLabel = [UILabel labelInitWithText:@"" font:kFontMedium(14) textColor:[UIColor whiteColor]];
|
||||
self.titleLabel.adjustsFontSizeToFitWidth = YES;
|
||||
self.titleLabel.minimumScaleFactor = 0.5;
|
||||
self.subLabel = [UILabel labelInitWithText:@"" font:kFontRegular(11) textColor:[UIColor colorWithWhite:1 alpha:0.6]];
|
||||
self.titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||
self.subLabel.textAlignment = NSTextAlignmentCenter;
|
||||
@@ -82,7 +84,7 @@
|
||||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.contentView);
|
||||
make.top.mas_equalTo(self.imageView.mas_bottom).offset(3);
|
||||
make.leading.trailing.mas_equalTo(self.contentView).inset(13);
|
||||
make.leading.trailing.mas_equalTo(self.contentView).inset(10);
|
||||
}];
|
||||
[self.contentView addSubview:self.subLabel];
|
||||
[self.subLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
@@ -102,18 +104,18 @@
|
||||
}];
|
||||
|
||||
// 设置等级选择回调
|
||||
@kWeakify(self);
|
||||
self.levelIndicatorView.levelSelectedBlock = ^(NSInteger level) {
|
||||
@kStrongify(self);
|
||||
// 处理等级选择事件
|
||||
if (self.currentItemVo && level <= self.currentItemVo.medalVos.count) {
|
||||
MedalVo *selectedMedalVo = [self.currentItemVo.medalVos xpSafeObjectAtIndex:level - 1];
|
||||
if (selectedMedalVo) {
|
||||
self.displayModel = selectedMedalVo;
|
||||
[self updateDisplayWithCurrentModel];
|
||||
}
|
||||
}
|
||||
};
|
||||
// @kWeakify(self);
|
||||
// self.levelIndicatorView.levelSelectedBlock = ^(NSInteger level) {
|
||||
// @kStrongify(self);
|
||||
// // 处理等级选择事件
|
||||
// if (self.currentItemVo && level <= self.currentItemVo.medalVos.count) {
|
||||
// MedalVo *selectedMedalVo = [self.currentItemVo.medalVos xpSafeObjectAtIndex:level - 1];
|
||||
// if (selectedMedalVo) {
|
||||
// self.displayModel = selectedMedalVo;
|
||||
// [self updateDisplayWithCurrentModel];
|
||||
// }
|
||||
// }
|
||||
// };
|
||||
|
||||
// 设置通知监听
|
||||
[self setupNotifications];
|
||||
@@ -184,11 +186,20 @@
|
||||
[self.levelIndicatorView setupWithMaxLevel:model.medalLevel];
|
||||
|
||||
if (isSquare) {
|
||||
self.subLabel.hidden = YES;
|
||||
self.displayModel = [model.medalVos xpSafeObjectAtIndex:model.medalVos.count - 1];
|
||||
[self.levelIndicatorView setSelectedLevel:model.medalLevel animated:NO];
|
||||
} else {
|
||||
self.levelIndicatorView.userInteractionEnabled = YES;
|
||||
self.displayModel = [model.medalVos xpSafeObjectAtIndex:0];
|
||||
[self.levelIndicatorView setSelectedLevel:1 animated:NO];
|
||||
NSMutableArray *arr = @[].mutableCopy;
|
||||
for (MedalVo *vo in model.medalVos) {
|
||||
[arr addObject:@(vo.level)];
|
||||
if (vo.level > self.displayModel.level) {
|
||||
self.displayModel = vo;
|
||||
}
|
||||
}
|
||||
[self.levelIndicatorView setHighlightLevels:arr animated:NO];
|
||||
}
|
||||
|
||||
self.levelIndicatorView.userInteractionEnabled = !isSquare;
|
||||
@@ -250,7 +261,7 @@
|
||||
|
||||
/// 更新文本标签
|
||||
- (void)updateTextLabels {
|
||||
self.titleLabel.text = self.displayModel.name;
|
||||
self.titleLabel.text = self.currentItemVo.seriesName;
|
||||
self.subLabel.text = [self.displayModel expireDateString];
|
||||
}
|
||||
|
||||
|
@@ -135,7 +135,12 @@
|
||||
self.displayModel = [detailItemVo.medalVos xpSafeObjectAtIndex:0];
|
||||
|
||||
[self.levelIndicatorView setupWithMaxLevel:self.currentSeriesItemVO.medalLevel];
|
||||
[self.levelIndicatorView setSelectedLevel:1 animated:NO];
|
||||
for (MedalVo *vo in detailItemVo.medalVos) {
|
||||
if (vo.level > self.displayModel.level) {
|
||||
self.displayModel = vo;
|
||||
}
|
||||
}
|
||||
[self.levelIndicatorView setSelectedLevel:self.displayModel.level animated:NO];
|
||||
[self.levelIndicatorView setSeriesItems:detailItemVo.medalVos];
|
||||
|
||||
// 设置指示器类型为带图片
|
||||
|
@@ -23,6 +23,13 @@ typedef NS_ENUM(NSInteger, MedalsLevelIndicatorType) {
|
||||
- (void)setupWithMaxLevel:(NSInteger)maxLevel;
|
||||
- (void)setSelectedLevel:(NSInteger)level animated:(BOOL)animated;
|
||||
|
||||
/**
|
||||
* 设置多个高亮等级
|
||||
* @param levels 需要高亮的等级数组
|
||||
* @param animated 是否使用动画
|
||||
*/
|
||||
- (void)setHighlightLevels:(NSArray<NSNumber *> *)levels animated:(BOOL)animated;
|
||||
|
||||
/**
|
||||
* 重置等级指示器到指定等级
|
||||
* @param level 等级(0表示重置到初始状态)
|
||||
|
@@ -460,6 +460,11 @@
|
||||
CGFloat itemWidth = 25.0; // 每个等级指示器的宽度
|
||||
CGFloat leftMargin = 20.0; // 左边距
|
||||
CGFloat rightMargin = 20.0; // 右边距
|
||||
if (_levelItems.count > 4) {
|
||||
itemWidth = 16;
|
||||
leftMargin = 0;
|
||||
rightMargin = 10;
|
||||
}
|
||||
|
||||
// 计算可用宽度(考虑左右边距)
|
||||
CGFloat availableWidth = self.bounds.size.width - leftMargin - rightMargin;
|
||||
@@ -487,6 +492,9 @@
|
||||
CGFloat totalWidth = totalItemWidth + spacing * (_maxLevel - 1);
|
||||
// 重新计算起始位置,使整体居中
|
||||
startX = (self.bounds.size.width - totalWidth) / 2.0;
|
||||
if (_levelItems.count > 4) {
|
||||
startX -= spacing/2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -645,6 +653,64 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setHighlightLevels:(NSArray<NSNumber *> *)levels animated:(BOOL)animated {
|
||||
if (!levels || levels.count == 0 || _levelItems.count == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 先将所有 item 重置为非高亮状态
|
||||
for (LevelItemView *item in _levelItems) {
|
||||
[item setSelected:NO animated:animated];
|
||||
}
|
||||
|
||||
// 将所有连接线重置为非高亮状态
|
||||
for (UIView *line in _connectionLines) {
|
||||
void (^updateBlock)(void) = ^{
|
||||
line.backgroundColor = UIColorFromRGB(0x8B54E8); // 非选中颜色
|
||||
};
|
||||
|
||||
if (animated) {
|
||||
[UIView animateWithDuration:0.2 animations:updateBlock];
|
||||
} else {
|
||||
updateBlock();
|
||||
}
|
||||
}
|
||||
|
||||
// 高亮指定的等级
|
||||
NSMutableSet *highlightedLevels = [NSMutableSet set];
|
||||
for (NSNumber *levelNumber in levels) {
|
||||
NSInteger level = [levelNumber integerValue];
|
||||
if (level >= 1 && level <= _maxLevel) {
|
||||
[highlightedLevels addObject:@(level)];
|
||||
|
||||
// 设置对应的 item 为高亮状态
|
||||
LevelItemView *item = _levelItems[level - 1];
|
||||
[item setSelected:YES animated:animated];
|
||||
}
|
||||
}
|
||||
|
||||
// 更新连接线状态
|
||||
// 只有当连接线两端的等级都被高亮时,连接线才高亮
|
||||
for (NSInteger i = 0; i < _connectionLines.count; i++) {
|
||||
UIView *line = _connectionLines[i];
|
||||
NSInteger startLevel = i + 1;
|
||||
NSInteger endLevel = i + 2;
|
||||
|
||||
BOOL isSelected = [highlightedLevels containsObject:@(startLevel)] &&
|
||||
[highlightedLevels containsObject:@(endLevel)];
|
||||
|
||||
void (^updateBlock)(void) = ^{
|
||||
line.backgroundColor = isSelected ? [UIColor whiteColor] : UIColorFromRGB(0x8B54E8);
|
||||
};
|
||||
|
||||
if (animated) {
|
||||
[UIView animateWithDuration:0.2 animations:updateBlock];
|
||||
} else {
|
||||
updateBlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 计算布局参数
|
||||
- (void)calculateLayoutParams:(CGFloat *)itemWidth spacing:(CGFloat *)spacing startX:(CGFloat *)startX forMaxLevel:(NSInteger)maxLevel {
|
||||
*itemWidth = 25.0; // 每个等级指示器的宽度
|
||||
|
@@ -9,6 +9,8 @@
|
||||
#import "MedalsPresenter.h"
|
||||
#import "MedalsViewController.h"
|
||||
#import "UserInfoModel.h"
|
||||
#import <MJRefresh/MJRefresh.h>
|
||||
#import "DJDKMIMOMColor.h"
|
||||
|
||||
|
||||
@interface MedalsRankListCell : UITableViewCell
|
||||
@@ -17,7 +19,7 @@
|
||||
@property (nonatomic, strong) NetImageView *avatarImageView;
|
||||
@property (nonatomic, strong) UILabel *nameLabel;
|
||||
@property (nonatomic, strong) UILabel *countLabel;
|
||||
@property (nonatomic, strong) UILabel *detailLabel;
|
||||
|
||||
|
||||
+ (void)registerTo:(UITableView *)tableView;
|
||||
+ (instancetype)cellFor:(UITableView *)tableView atIndexPath:(NSIndexPath *)index;
|
||||
@@ -44,9 +46,8 @@
|
||||
- (void)updateCell:(MedalsRankUserModel *)userModel atIndex:(NSInteger)index {
|
||||
self.avatarImageView.imageUrl = userModel.avatar;
|
||||
self.nameLabel.text = userModel.nick;
|
||||
self.indexLabel.text = @(userModel.rank).stringValue;
|
||||
self.indexLabel.text = @(index + 4).stringValue;
|
||||
self.countLabel.text = @(userModel.medalCount).stringValue;
|
||||
// self.detailLabel.hidden = userModel.uid == 0;
|
||||
}
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
@@ -81,12 +82,12 @@
|
||||
make.top.mas_equalTo(self.avatarImageView);
|
||||
}];
|
||||
|
||||
UIImageView *rankIcon = [[UIImageView alloc] initWithImage:[kImage(@"medals_icon_rank") ms_SetImageForRTL]];
|
||||
UIImageView *rankIcon = [[UIImageView alloc] initWithImage:kImage(@"medals_rank")];
|
||||
[self.contentView addSubview:rankIcon];
|
||||
[rankIcon mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.leading.mas_equalTo(self.avatarImageView.mas_trailing).offset(6);
|
||||
make.bottom.mas_equalTo(self.avatarImageView);
|
||||
make.size.mas_equalTo(CGSizeMake(15, 15));
|
||||
make.size.mas_equalTo(CGSizeMake(10, 14));
|
||||
}];
|
||||
|
||||
self.countLabel = [UILabel labelInitWithText:@"" font:kFontMedium(14) textColor:[UIColor whiteColor]];
|
||||
@@ -96,11 +97,11 @@
|
||||
make.centerY.mas_equalTo(rankIcon);
|
||||
}];
|
||||
|
||||
self.detailLabel = [UILabel labelInitWithText:YMLocalizedString(@"20.20.61_text_13")
|
||||
UILabel *detailLabel = [UILabel labelInitWithText:YMLocalizedString(@"20.20.61_text_13")
|
||||
font:kFontRegular(12)
|
||||
textColor:[UIColor colorWithWhite:1 alpha:0.6]];
|
||||
[self.contentView addSubview:self.detailLabel];
|
||||
[self.detailLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
[self.contentView addSubview:detailLabel];
|
||||
[detailLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.trailing.mas_equalTo(self.contentView).offset(-28);
|
||||
make.centerY.mas_equalTo(self.contentView);
|
||||
}];
|
||||
@@ -128,7 +129,7 @@
|
||||
|
||||
@implementation MedalsRankTopView
|
||||
{
|
||||
NetImageView *avataImageView;
|
||||
NetImageView *avatarImageView;
|
||||
UIImageView *decorationImageView;
|
||||
UILabel *nameLabel;
|
||||
UILabel *honorLabel;
|
||||
@@ -144,10 +145,10 @@
|
||||
if (self) {
|
||||
NetImageConfig *config = [[NetImageConfig alloc] init];
|
||||
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
|
||||
avataImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
[avataImageView setCornerRadius:50];
|
||||
[self addSubview:avataImageView];
|
||||
[avataImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
avatarImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
[avatarImageView setCornerRadius:50];
|
||||
[self addSubview:avatarImageView];
|
||||
[avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.center.mas_equalTo(self);
|
||||
make.size.mas_equalTo(CGSizeMake(100, 100));
|
||||
}];
|
||||
@@ -176,16 +177,13 @@
|
||||
nameLabel = [UILabel labelInitWithText:@"" font:kFontSemibold(15) textColor:UIColorFromRGB(0xffffff)];
|
||||
[self addSubview:nameLabel];
|
||||
|
||||
medalIconImageView = [[UIImageView alloc] initWithImage:kImage(@"medals_icon_rank")];
|
||||
medalIconImageView = [[UIImageView alloc] initWithImage:kImage(@"medals_rank")];
|
||||
medalCountLabel = [UILabel labelInitWithText:@"0" font:kFontMedium(14) textColor:UIColorFromRGB(0xffffff)];
|
||||
medalCountStack = [[UIStackView alloc] initWithArrangedSubviews:@[
|
||||
medalIconImageView,
|
||||
medalCountLabel
|
||||
]];
|
||||
[self addSubview:medalCountStack];
|
||||
[medalIconImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(15, 15));
|
||||
}];
|
||||
|
||||
honorLabel.hidden = YES;
|
||||
honorImageView.hidden = YES;
|
||||
@@ -249,7 +247,7 @@
|
||||
- (void)setUserModel:(MedalsRankUserModel *)userModel {
|
||||
_userModel = userModel;
|
||||
if (userModel) {
|
||||
avataImageView.imageUrl = userModel.avatar;
|
||||
avatarImageView.imageUrl = userModel.avatar;
|
||||
nameLabel.text = userModel.nick;
|
||||
medalCountLabel.text = @(userModel.medalCount).stringValue;
|
||||
}
|
||||
@@ -273,6 +271,9 @@
|
||||
|
||||
@property (nonatomic, strong) UITableView *rankTableView;
|
||||
|
||||
// 分页相关属性
|
||||
@property (nonatomic, assign) NSInteger currentPage;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MedalsRankViewController
|
||||
@@ -288,7 +289,11 @@
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
// 初始化分页
|
||||
self.currentPage = 1;
|
||||
|
||||
[self setupUI];
|
||||
[self setupRefresh];
|
||||
[self loadData];
|
||||
}
|
||||
|
||||
@@ -411,46 +416,86 @@
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)setupRefresh {
|
||||
// 设置下拉刷新
|
||||
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
|
||||
header.stateLabel.font = [UIFont systemFontOfSize:10.0];
|
||||
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0];
|
||||
header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
|
||||
header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor];
|
||||
self.rankTableView.mj_header = header;
|
||||
|
||||
// 设置上拉加载更多
|
||||
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
|
||||
footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
|
||||
footer.stateLabel.font = [UIFont systemFontOfSize:10.0];
|
||||
self.rankTableView.mj_footer = footer;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
- (void)loadData {
|
||||
[self.presenter rankList:1];
|
||||
[self.presenter rankList:self.currentPage];
|
||||
}
|
||||
|
||||
- (void)rankListSuccess:(MedalsRankModel *)model {
|
||||
// 结束刷新状态
|
||||
[self.rankTableView.mj_header endRefreshing];
|
||||
[self.rankTableView.mj_footer endRefreshing];
|
||||
|
||||
NSInteger currentRank = 4; // 从第4名开始计算(前三名已经处理)
|
||||
|
||||
if (model) {
|
||||
self.mineRankModel = model.mine;
|
||||
self.avatarImageView.imageUrl = self.mineRankModel.avatar;
|
||||
self.nameLabel.text = self.mineRankModel.nick;
|
||||
self.indexLabel.text = @(self.mineRankModel.rank).stringValue;
|
||||
self.countLabel.text = @(self.mineRankModel.medalCount).stringValue;
|
||||
|
||||
self.rankList = [NSMutableArray array];
|
||||
NSInteger currentRank = 4; // 从第4名开始计算(前三名已经处理)
|
||||
|
||||
for (MedalsRankUserModel *user in model.rankList) {
|
||||
if (user.rank == 1) {
|
||||
self.topOne.userModel = user;
|
||||
} else if (user.rank == 2) {
|
||||
self.topTwo.userModel = user;
|
||||
} else if (user.rank == 3) {
|
||||
self.topThree.userModel = user;
|
||||
} else {
|
||||
[self.rankList addObject:user];
|
||||
currentRank = MAX(currentRank, user.rank + 1);
|
||||
// 第一页时更新个人信息和前三名
|
||||
if (self.currentPage == 1) {
|
||||
self.mineRankModel = model.mine;
|
||||
self.avatarImageView.imageUrl = self.mineRankModel.avatar;
|
||||
self.nameLabel.text = self.mineRankModel.nick;
|
||||
self.indexLabel.text = self.mineRankModel.rank == 0 ? @"-" : @(self.mineRankModel.rank).stringValue;
|
||||
self.countLabel.text = @(self.mineRankModel.medalCount).stringValue;
|
||||
|
||||
self.rankList = [NSMutableArray array];
|
||||
|
||||
// 处理前三名显示
|
||||
for (MedalsRankUserModel *user in model.rankList) {
|
||||
if (user.rank == 1) {
|
||||
self.topOne.userModel = user;
|
||||
} else if (user.rank == 2) {
|
||||
self.topTwo.userModel = user;
|
||||
} else if (user.rank == 3) {
|
||||
self.topThree.userModel = user;
|
||||
} else {
|
||||
[self.rankList addObject:user];
|
||||
currentRank = MAX(currentRank, user.rank + 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 非第一页,追加数据(排除前三名)
|
||||
for (MedalsRankUserModel *user in model.rankList) {
|
||||
if (user.rank > 3) {
|
||||
[self.rankList addObject:user];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 补充数据至 10 个(rankList 中应有 7 个,因为前三名在 top 视图中)
|
||||
NSInteger targetCount = 7; // 总共10个,减去前3名
|
||||
while (self.rankList.count < targetCount) {
|
||||
MedalsRankUserModel *emptyUser = [[MedalsRankUserModel alloc] init];
|
||||
emptyUser.rank = currentRank;
|
||||
emptyUser.uid = 0;
|
||||
emptyUser.avatar = @"";
|
||||
emptyUser.nick = @"--";
|
||||
emptyUser.medalCount = 0;
|
||||
[self.rankList addObject:emptyUser];
|
||||
currentRank++;
|
||||
// 检查是否还有更多数据
|
||||
if (model.rankList.count < [self.presenter rankListSize]) {
|
||||
if (self.currentPage == 1) {
|
||||
// 补充数据至 10 个(rankList 中应有 7 个,因为前三名在 top 视图中)
|
||||
NSInteger targetCount = 7; // 总共10个,减去前3名
|
||||
while (self.rankList.count < targetCount) {
|
||||
MedalsRankUserModel *emptyUser = [[MedalsRankUserModel alloc] init];
|
||||
emptyUser.rank = currentRank;
|
||||
emptyUser.uid = 0;
|
||||
emptyUser.avatar = @"";
|
||||
emptyUser.nick = @"--";
|
||||
emptyUser.medalCount = 0;
|
||||
[self.rankList addObject:emptyUser];
|
||||
currentRank++;
|
||||
}
|
||||
}
|
||||
[self.rankTableView.mj_footer endRefreshingWithNoMoreData];
|
||||
} else {
|
||||
[self.rankTableView.mj_footer resetNoMoreData];
|
||||
}
|
||||
|
||||
[self.rankTableView reloadData];
|
||||
@@ -458,7 +503,14 @@
|
||||
}
|
||||
|
||||
- (void)rankListFailure {
|
||||
// 结束刷新状态
|
||||
[self.rankTableView.mj_header endRefreshing];
|
||||
[self.rankTableView.mj_footer endRefreshing];
|
||||
|
||||
// 如果是加载更多失败,页码需要回退
|
||||
if (self.currentPage > 1) {
|
||||
self.currentPage--;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UITableView DataSource & Delegate
|
||||
@@ -482,15 +534,11 @@
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
|
||||
MedalsRankUserModel *model = [self.rankList xpSafeObjectAtIndex:indexPath.row];
|
||||
|
||||
// 检查是否为有效的用户数据(非空补充数据)
|
||||
if (model && model.uid != 0) {
|
||||
[self handleTopViewTap:model];
|
||||
}
|
||||
[self handleTopViewTap:model];
|
||||
}
|
||||
|
||||
- (void)handleTopViewTap:(MedalsRankUserModel *)model {
|
||||
if (model && model.uid != 0) {
|
||||
if (model) {
|
||||
UserInfoModel *userInfo = [[UserInfoModel alloc] init];
|
||||
userInfo.uid = model.uid;
|
||||
userInfo.avatar = model.avatar;
|
||||
@@ -518,4 +566,15 @@
|
||||
return _rankTableView;
|
||||
}
|
||||
|
||||
#pragma mark - 刷新方法
|
||||
- (void)headerRefresh {
|
||||
self.currentPage = 1;
|
||||
[self loadData];
|
||||
}
|
||||
|
||||
- (void)footerRefresh {
|
||||
self.currentPage++;
|
||||
[self loadData];
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -294,7 +294,8 @@ typedef enum : NSInteger {
|
||||
|
||||
[bottomBg mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.leading.trailing.mas_equalTo(self.view);
|
||||
make.height.mas_equalTo(kGetScaleWidth(445));
|
||||
// make.height.mas_equalTo(kGetScaleWidth(445));
|
||||
make.top.mas_equalTo(topBg.mas_bottom).offset(44);
|
||||
}];
|
||||
}
|
||||
}
|
||||
@@ -413,7 +414,10 @@ typedef enum : NSInteger {
|
||||
}];
|
||||
|
||||
[self.view addSubview:self.medalDescLabel];
|
||||
self.medalDescLabel.text = YMLocalizedString(@"20.20.61_text_6");
|
||||
if (self.displayType != MedalsCenterDisplayType_Square) {
|
||||
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);
|
||||
|
@@ -100,24 +100,6 @@
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
// Debug 环境:如果数据不满足新逻辑条件,使用现有逻辑
|
||||
if ([NSString isEmpty:medalVo.mp4Url] && [NSString isEmpty:medalVo.picUrl]) {
|
||||
// 都为空,使用旧逻辑
|
||||
[self handleLegacyDisplay:medalVo];
|
||||
return;
|
||||
}
|
||||
|
||||
if (![NSString isEmpty:medalVo.picUrl] && [NSString isEmpty:medalVo.mp4Url]) {
|
||||
// 只有 picUrl 有值,mp4Url 为空,检查是否符合新逻辑
|
||||
if (![NSString isImageFormat:medalVo.picUrl] && ![medalVo.picUrl.lowercaseString hasSuffix:@".mp4"]) {
|
||||
// picUrl 既不是图片也不是 mp4,使用旧逻辑
|
||||
[self handleLegacyDisplay:medalVo];
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// 1. 优先判断 mp4Url 是否有内容
|
||||
if (![NSString isEmpty:medalVo.mp4Url]) {
|
||||
// 该 Cell 不支持 mp4,降级使用 picUrl
|
||||
@@ -136,8 +118,7 @@
|
||||
if ([NSString isImageFormat:medalVo.picUrl]) {
|
||||
self.medalImageView.imageUrl = medalVo.picUrl;
|
||||
} else {
|
||||
// 不是图片格式,显示默认占位图
|
||||
self.medalImageView.image = [UIImageConstant defaultEmptyPlaceholder];
|
||||
[self handleLegacyDisplay:medalVo];
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -150,6 +131,8 @@
|
||||
- (void)handleLegacyDisplay:(MedalVo *)medalVo {
|
||||
if (![medalVo.picUrl hasSuffix:@"mp4"]) {
|
||||
self.medalImageView.imageUrl = medalVo.picUrl;
|
||||
} else {
|
||||
self.medalImageView.image = [UIImageConstant defaultEmptyPlaceholder];
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -61,40 +61,20 @@
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
// Debug 环境:如果数据不满足新逻辑条件,使用现有逻辑
|
||||
if ([NSString isEmpty:medalModel.mp4Url] && [NSString isEmpty:medalModel.picUrl]) {
|
||||
// 都为空,使用旧逻辑
|
||||
[self handleLegacyDisplay:medalModel];
|
||||
return;
|
||||
}
|
||||
|
||||
if (![NSString isEmpty:medalModel.picUrl] && [NSString isEmpty:medalModel.mp4Url]) {
|
||||
// 只有 picUrl 有值,mp4Url 为空,检查是否符合新逻辑
|
||||
if (![NSString isImageFormat:medalModel.picUrl] && ![medalModel.picUrl.lowercaseString hasSuffix:@".mp4"]) {
|
||||
// picUrl 既不是图片也不是 mp4,使用旧逻辑
|
||||
[self handleLegacyDisplay:medalModel];
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// 1. 优先判断 mp4Url 是否有内容
|
||||
if (![NSString isEmpty:medalModel.mp4Url]) {
|
||||
[self setMp4Path:medalModel.mp4Url];
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. mp4Url 为空,使用 picUrl
|
||||
// 使用 picUrl
|
||||
if (![NSString isEmpty:medalModel.picUrl]) {
|
||||
// 3. 使用 picUrl 时,判断内容是否为图片
|
||||
if ([NSString isImageFormat:medalModel.picUrl]) {
|
||||
[self setImagePath:medalModel.picUrl];
|
||||
} else {
|
||||
// 不是图片格式,显示默认占位图
|
||||
[self setImagePath:@""];
|
||||
// 降级
|
||||
[self handleLegacyDisplay:medalModel];
|
||||
}
|
||||
return;
|
||||
} else if (![NSString isEmpty:medalModel.mp4Url]) {
|
||||
// 判断 mp4Url 是否有内容
|
||||
[self setMp4Path:medalModel.mp4Url];
|
||||
return;
|
||||
}
|
||||
|
||||
// 4. 都为空,显示默认占位图
|
||||
@@ -185,6 +165,10 @@
|
||||
}
|
||||
|
||||
- (void)setMp4Path:(NSString *)mp4Path {
|
||||
if ([NSString isEmpty:mp4Path]) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果是相同的 mp4 路径,不需要重新加载
|
||||
// if ([_mp4Path isEqualToString:mp4Path]) {
|
||||
// return;
|
||||
|
@@ -196,12 +196,10 @@
|
||||
|
||||
if (currentMinVipLevel != NSIntegerMax) {
|
||||
// 更新全局最低VIP level
|
||||
if (self.minVipLevelForSeats == 0 || currentMinVipLevel < self.minVipLevelForSeats) {
|
||||
self.minVipLevelForSeats = currentMinVipLevel;
|
||||
}
|
||||
self.minVipLevelForSeats = currentMinVipLevel;
|
||||
[cell updateVIPLevel:currentMinVipLevel];
|
||||
}
|
||||
} else if (self.minVipLevelForSeats > 0) {
|
||||
} else if (self.minVipLevelForSeats >= 0) {
|
||||
// 当前座位没有对应的vip seat vo,但之前已经有最低VIP level,则沿用
|
||||
[cell updateVIPLevel:self.minVipLevelForSeats];
|
||||
}
|
||||
|
@@ -89,12 +89,15 @@
|
||||
self.priceLabel.attributedText = priceStr;
|
||||
self.numLabel.text = [NSString stringWithFormat:@"%ld",
|
||||
(long)rechargeModel.chargeGoldNum];
|
||||
|
||||
self.extBG.hidden = YES;
|
||||
self.moneyLabel.hidden = YES;
|
||||
FirstRechargeModel *model = [FirstRechargeManager.sharedManager loadCurrentModel];
|
||||
if (model && model.chargeStatus == NO) {
|
||||
for (FirstRechargeLevelModel *levelModel in model.levelCharge) {
|
||||
if (levelModel.exp == rechargeModel.chargeGoldNum) {
|
||||
[self.moneyLabel updateContent: [NSString stringWithFormat:@"+ %@", @(levelModel.awardNum)]];
|
||||
self.extBG.hidden = NO;
|
||||
self.moneyLabel.hidden = NO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -25,13 +25,12 @@
|
||||
}
|
||||
-(void)installConstraints{
|
||||
[self.gameView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(kGetScaleWidth(20));
|
||||
make.width.height.mas_equalTo(kGetScaleWidth(56));
|
||||
make.centerX.equalTo(self.contentView);
|
||||
make.top.leading.trailing.mas_equalTo(self.contentView).inset(4);
|
||||
make.height.mas_equalTo(self.gameView.mas_width);
|
||||
// make.centerX.equalTo(self.contentView);
|
||||
}];
|
||||
[self.textView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.gameView.mas_bottom).mas_offset(kGetScaleWidth(10));
|
||||
|
||||
make.top.equalTo(self.gameView.mas_bottom).mas_offset(7);
|
||||
make.leading.trailing.equalTo(self.contentView).inset(kGetScaleWidth(5));
|
||||
}];
|
||||
}
|
||||
@@ -80,7 +79,7 @@
|
||||
_textView = [UILabel labelInitWithText:@"" font:kFontRegular(12) textColor:[UIColor whiteColor]];
|
||||
_textView.textAlignment = NSTextAlignmentCenter;
|
||||
_textView.numberOfLines = 2;
|
||||
_textView.hidden = YES;
|
||||
_textView.hidden = NO;
|
||||
}
|
||||
return _textView;
|
||||
}
|
||||
|
@@ -27,7 +27,7 @@ static const NSInteger kItemsPerRow = 5;
|
||||
-(instancetype)initWithFrame:(CGRect)frame{
|
||||
self = [super initWithFrame:frame];
|
||||
if(self){
|
||||
self.itemHeight = kGetScaleWidth(80);
|
||||
self.itemHeight = kGetScaleWidth(120);
|
||||
self.emptyHeight = kGetScaleWidth(100);
|
||||
self.dataSource = @[].mutableCopy;
|
||||
|
||||
@@ -52,7 +52,7 @@ static const NSInteger kItemsPerRow = 5;
|
||||
[self.blurEffectView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.leading.trailing.equalTo(self).inset(0);
|
||||
make.bottom.equalTo(self).offset(12);
|
||||
make.height.mas_equalTo(self.collectionView.mas_height).multipliedBy(1.1);
|
||||
make.height.mas_equalTo(self.collectionView.mas_height).multipliedBy(1.05);
|
||||
}];
|
||||
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.leading.trailing.equalTo(self).inset(kGetScaleWidth(0));
|
||||
@@ -108,6 +108,9 @@ static const NSInteger kItemsPerRow = 5;
|
||||
// [self.ms_bgView mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
// make.height.mas_equalTo(kGetScaleWidth(height + 12));
|
||||
// }];
|
||||
if (height > KScreenHeight*2/3) {
|
||||
height = KScreenHeight*2/3;
|
||||
}
|
||||
[self.collectionView mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(kGetScaleWidth(height));
|
||||
}];
|
||||
@@ -119,7 +122,7 @@ static const NSInteger kItemsPerRow = 5;
|
||||
|
||||
#pragma mark- UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout
|
||||
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
|
||||
CGFloat width = (KScreenWidth-kGetScaleWidth(6))/5;
|
||||
CGFloat width = (KScreenWidth-kGetScaleWidth(6))/4;
|
||||
return [self countOfCurrentType] > 0 ? CGSizeMake(width, self.itemHeight) : CGSizeMake(KScreenWidth, self.emptyHeight);
|
||||
}
|
||||
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
|
||||
@@ -179,8 +182,8 @@ static const NSInteger kItemsPerRow = 5;
|
||||
- (UICollectionView *)collectionView{
|
||||
if (!_collectionView) {
|
||||
MSBaseRTLFlowLayout *layout = [[MSBaseRTLFlowLayout alloc] init];
|
||||
|
||||
layout.minimumLineSpacing = 0;
|
||||
|
||||
layout.minimumLineSpacing = 10;
|
||||
layout.minimumInteritemSpacing = 0;
|
||||
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
|
||||
_collectionView.showsHorizontalScrollIndicator = NO;
|
||||
@@ -206,7 +209,7 @@ static const NSInteger kItemsPerRow = 5;
|
||||
_blurEffectView.frame = CGRectMake(0, 0, KScreenWidth, kGetScaleWidth(246));
|
||||
_blurEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||
|
||||
[_blurEffectView setCornerRadius:12];
|
||||
[_blurEffectView setCornerRadius:24];
|
||||
}
|
||||
return _blurEffectView;
|
||||
}
|
||||
|
@@ -1497,9 +1497,7 @@
|
||||
|
||||
#pragma mark -
|
||||
- (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo {
|
||||
#if DEBUG
|
||||
// userInfo.medalsPic = @[];
|
||||
#endif
|
||||
|
||||
self.userInfoModel = userInfo;
|
||||
self.avatar.userInfo = userInfo;
|
||||
@kWeakify(self);
|
||||
@@ -2163,7 +2161,7 @@
|
||||
|
||||
- (void)updateCollectionViewFrame {
|
||||
CGFloat newHeight = [self calculateCollectionViewHeight];
|
||||
if (ABS(self.collectionHeight - newHeight) > 0.1) { // 只有高度确实变化时才更新
|
||||
// if (ABS(self.collectionHeight - newHeight) > 0.1) { // 只有高度确实变化时才更新
|
||||
self.collectionHeight = newHeight;
|
||||
CGFloat space_top = KScreenHeight - self.collectionHeight;
|
||||
|
||||
@@ -2175,7 +2173,7 @@
|
||||
[XNDJTDDLoadingTool hideHUD];
|
||||
}
|
||||
}];
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -1,85 +1,16 @@
|
||||
Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/tvos-arm64/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/tvos-arm64_x86_64-simulator/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64_x86_64-simulator/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
Pods/UMDevice/UMDevice_3.4.0/UMDevice.xcframework/ios-arm64_x86_64-simulator/UMDevice.framework/UMDevice
|
||||
Pods/UMDevice/UMDevice_3.4.0/UMDevice.xcframework/ios-arm64_armv7/UMDevice.framework/UMDevice
|
||||
Pods/mob_linksdk_pro/MobLinkPro/MobLinkPro.framework/MobLinkPro
|
||||
Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/tvos-arm64/FBAEMKit.framework/FBAEMKit
|
||||
Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/tvos-arm64_x86_64-simulator/FBAEMKit.framework/FBAEMKit
|
||||
Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64_x86_64-simulator/FBAEMKit.framework/FBAEMKit
|
||||
Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64_x86_64-maccatalyst/FBAEMKit.framework/FBAEMKit
|
||||
Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64/FBAEMKit.framework/FBAEMKit
|
||||
Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/tvos-arm64/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/tvos-arm64_x86_64-simulator/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64_x86_64-simulator/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/QimeiSDK.framework/QimeiSDK
|
||||
Pods/MOBFoundation/MOBFoundation/MOBFoundation.xcframework/ios-arm64/MOBFoundation.framework/MOBFoundation
|
||||
Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/tvos-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/tvos-arm64_x86_64-simulator/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64_x86_64-simulator/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
Pods/mob_sharesdk/ShareSDK/Support/Required/ShareSDKConnector.framework/ShareSDKConnector
|
||||
Pods/mob_sharesdk/ShareSDK/Support/Optional/ShareSDKExtension.framework/ShareSDKExtension
|
||||
Pods/mob_sharesdk/ShareSDK/Support/PlatformConnector/AppleAccountConnector.framework/AppleAccountConnector
|
||||
Pods/mob_sharesdk/ShareSDK/ShareSDK.framework/ShareSDK
|
||||
Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.xcframework/ios-arm64_i386_x86_64-simulator/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.xcframework/ios-arm64_x86_64-maccatalyst/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.xcframework/ios-arm64_armv7/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
Pods/mob_sharesdk/ShareSDK/Support/Required/ShareSDKConnector.xcframework/ios-arm64_x86_64-simulator/ShareSDKConnector.framework/ShareSDKConnector
|
||||
Pods/mob_sharesdk/ShareSDK/Support/Required/ShareSDKConnector.xcframework/ios-arm64/ShareSDKConnector.framework/ShareSDKConnector
|
||||
Pods/Bugly/Bugly.framework/Bugly
|
||||
Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/tvos-arm64/FBSDKShareKit.framework/FBSDKShareKit
|
||||
Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/tvos-arm64_x86_64-simulator/FBSDKShareKit.framework/FBSDKShareKit
|
||||
Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64_x86_64-simulator/FBSDKShareKit.framework/FBSDKShareKit
|
||||
Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKShareKit.framework/FBSDKShareKit
|
||||
Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64/FBSDKShareKit.framework/FBSDKShareKit
|
||||
./Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/tvos-arm64/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
./Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/tvos-arm64_x86_64-simulator/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
./Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64_x86_64-simulator/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
./Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
./Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64/FBSDKCoreKit.framework/FBSDKCoreKit
|
||||
./Pods/UMDevice/UMDevice_3.4.0/UMDevice.xcframework/ios-arm64_x86_64-simulator/UMDevice.framework/UMDevice
|
||||
./Pods/UMDevice/UMDevice_3.4.0/UMDevice.xcframework/ios-arm64_armv7/UMDevice.framework/UMDevice
|
||||
./Pods/mob_linksdk_pro/MobLinkPro/MobLinkPro.framework/MobLinkPro
|
||||
./Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/tvos-arm64/FBAEMKit.framework/FBAEMKit
|
||||
./Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/tvos-arm64_x86_64-simulator/FBAEMKit.framework/FBAEMKit
|
||||
./Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64_x86_64-simulator/FBAEMKit.framework/FBAEMKit
|
||||
./Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64_x86_64-maccatalyst/FBAEMKit.framework/FBAEMKit
|
||||
./Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64/FBAEMKit.framework/FBAEMKit
|
||||
./Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/tvos-arm64/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
./Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/tvos-arm64_x86_64-simulator/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
./Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64_x86_64-simulator/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
./Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
./Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64/FBSDKLoginKit.framework/FBSDKLoginKit
|
||||
./Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
./Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/QimeiSDK.framework/QimeiSDK
|
||||
./Pods/MOBFoundation/MOBFoundation/MOBFoundation.xcframework/ios-arm64/MOBFoundation.framework/MOBFoundation
|
||||
./Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
./Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
./Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
./Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
./Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
./Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64/FirebaseAnalytics.framework/FirebaseAnalytics
|
||||
./Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/tvos-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
./Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/tvos-arm64_x86_64-simulator/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
./Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64_x86_64-simulator/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
./Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
./Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
|
||||
./Pods/mob_sharesdk/ShareSDK/Support/Required/ShareSDKConnector.framework/ShareSDKConnector
|
||||
./Pods/mob_sharesdk/ShareSDK/Support/Optional/ShareSDKExtension.framework/ShareSDKExtension
|
||||
./Pods/mob_sharesdk/ShareSDK/Support/PlatformConnector/AppleAccountConnector.framework/AppleAccountConnector
|
||||
./Pods/mob_sharesdk/ShareSDK/ShareSDK.framework/ShareSDK
|
||||
./Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.xcframework/ios-arm64_i386_x86_64-simulator/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
./Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.xcframework/ios-arm64_x86_64-maccatalyst/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
./Pods/QCloudTrack/QCloudTrack/Classes/BeaconFramework/COSBeaconAPI_Base.xcframework/ios-arm64_armv7/COSBeaconAPI_Base.framework/COSBeaconAPI_Base
|
||||
./Pods/mob_sharesdk/ShareSDK/Support/Required/ShareSDKConnector.xcframework/ios-arm64_x86_64-simulator/ShareSDKConnector.framework/ShareSDKConnector
|
||||
./Pods/mob_sharesdk/ShareSDK/Support/Required/ShareSDKConnector.xcframework/ios-arm64/ShareSDKConnector.framework/ShareSDKConnector
|
||||
./Pods/Bugly/Bugly.framework/Bugly
|
||||
./Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/tvos-arm64/FBSDKShareKit.framework/FBSDKShareKit
|
||||
./Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/tvos-arm64_x86_64-simulator/FBSDKShareKit.framework/FBSDKShareKit
|
||||
./Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64_x86_64-simulator/FBSDKShareKit.framework/FBSDKShareKit
|
||||
./Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64_x86_64-maccatalyst/FBSDKShareKit.framework/FBSDKShareKit
|
||||
./Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64/FBSDKShareKit.framework/FBSDKShareKit
|
||||
./YuMi/Modules/YMRTC/Library/ZegoAudioRoom.framework/ZegoAudioRoom
|
||||
|
Reference in New Issue
Block a user