From eca168957d1821e1ed2d5b3da7184768585da164 Mon Sep 17 00:00:00 2001 From: CodeST <694468528@qq.com> Date: Wed, 3 Dec 2025 20:02:37 +0800 Subject: [PATCH] 1 --- keyBoard/Class/Home/V/KBTopThreeView.h | 6 ++-- keyBoard/Class/Home/V/KBTopThreeView.m | 42 +++++++++++++++----------- keyBoard/Class/Home/VC/HomeHotVC.m | 15 +++------ 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/keyBoard/Class/Home/V/KBTopThreeView.h b/keyBoard/Class/Home/V/KBTopThreeView.h index 1b0b882..6afd63f 100644 --- a/keyBoard/Class/Home/V/KBTopThreeView.h +++ b/keyBoard/Class/Home/V/KBTopThreeView.h @@ -6,16 +6,16 @@ // #import +#import "KBCharacter.h" NS_ASSUME_NONNULL_BEGIN /// 用于 HomeHot 顶部展示前三名的视图 @interface KBTopThreeView : UIView -/// 配置三项内容(数组元素可传 @{ @"title":NSString, @"rank":@(1/2/3) }) -- (void)configWithItems:(NSArray *)items; +/// 使用前三名角色模型进行配置(数组元素为 KBCharacter*,最多取前三个) +- (void)configWithCharacters:(NSArray *)characters; @end NS_ASSUME_NONNULL_END - diff --git a/keyBoard/Class/Home/V/KBTopThreeView.m b/keyBoard/Class/Home/V/KBTopThreeView.m index debf600..7c4787e 100644 --- a/keyBoard/Class/Home/V/KBTopThreeView.m +++ b/keyBoard/Class/Home/V/KBTopThreeView.m @@ -4,17 +4,18 @@ // #import "KBTopThreeView.h" +#import "UIImageView+KBWebImage.h" @interface KBTopThreeCardView : UIView -/// 头像占位(圆形描边) +/// 头像视图(圆形描边) @property (nonatomic, strong) UIImageView *avatarCircleView; /// 彩条卡片背景 @property (nonatomic, strong) UIImageView *cardImageView; /// 标题 @property (nonatomic, strong) UILabel *titleLabel; -/// 渲染 -- (void)renderWithTitle:(NSString *)title rank:(NSInteger)rank; +/// 使用角色模型渲染 +- (void)renderWithCharacter:(KBCharacter *)character rank:(NSInteger)rank; @end @implementation KBTopThreeCardView @@ -55,7 +56,8 @@ } -- (void)renderWithTitle:(NSString *)title rank:(NSInteger)rank { +- (void)renderWithCharacter:(KBCharacter *)character rank:(NSInteger)rank { + NSString *title = character.characterName ?: @""; self.titleLabel.text = title.length ? title : @""; // 不同名次数的配色 @@ -80,7 +82,9 @@ } break; // 橙 } self.cardImageView.image = image; - // 加号按钮移至 KBTopThreeView,由其统一控制样式与布局 + + // 头像图片 + [self.avatarCircleView kb_setAvatarURL:character.avatarUrl placeholder:KBPlaceholderImage]; // 圆圈描边 self.avatarCircleView.layer.borderColor = [UIColor colorWithRed:0.83 green:0.95 blue:0.27 alpha:1.0].CGColor; @@ -94,6 +98,7 @@ _avatarCircleView.backgroundColor = [UIColor whiteColor]; _avatarCircleView.layer.cornerRadius = 34; _avatarCircleView.layer.borderWidth = 2.0; + _avatarCircleView.layer.masksToBounds = true; } return _avatarCircleView; } @@ -197,19 +202,22 @@ }]; } -- (void)configWithItems:(NSArray *)items { - // items 顺序任意,这里按 rank 分配:1 放中间,2 左,3 右 - NSString *t1 = @"", *t2 = @"", *t3 = @""; - for (NSDictionary *d in items) { - NSInteger r = [d[@"rank"] integerValue]; - NSString *title = d[@"title"] ?: @""; - if (r == 1) t1 = title; - else if (r == 2) t2 = title; - else if (r == 3) t3 = title; +- (void)configWithCharacters:(NSArray *)characters { + if (characters.count == 0) { + // 无数据时清空标题与头像 + [self.centerCard renderWithCharacter:[KBCharacter new] rank:1]; + [self.leftCard renderWithCharacter:[KBCharacter new] rank:2]; + [self.rightCard renderWithCharacter:[KBCharacter new] rank:3]; + return; } - [self.centerCard renderWithTitle:t1 rank:1]; - [self.leftCard renderWithTitle:t2 rank:2]; - [self.rightCard renderWithTitle:t3 rank:3]; + + KBCharacter *first = characters.count > 0 ? characters[0] : nil; + KBCharacter *second = characters.count > 1 ? characters[1] : nil; + KBCharacter *third = characters.count > 2 ? characters[2] : nil; + + if (first) [self.centerCard renderWithCharacter:first rank:1]; + if (second) [self.leftCard renderWithCharacter:second rank:2]; + if (third) [self.rightCard renderWithCharacter:third rank:3]; } #pragma mark - Lazy diff --git a/keyBoard/Class/Home/VC/HomeHotVC.m b/keyBoard/Class/Home/VC/HomeHotVC.m index a7eef96..e781e08 100644 --- a/keyBoard/Class/Home/VC/HomeHotVC.m +++ b/keyBoard/Class/Home/VC/HomeHotVC.m @@ -63,17 +63,12 @@ } weakSelf.allCharacters = list ?: @[]; - // 顶部前三名数据 - NSMutableArray *topItems = [NSMutableArray array]; + // 顶部前三名数据:直接取前三个模型交给 KBTopThreeView NSInteger topCount = MIN(3, weakSelf.allCharacters.count); - for (NSInteger i = 0; i < topCount; i++) { - KBCharacter *c = weakSelf.allCharacters[i]; -// NSInteger rank = (c.rank > 0) ? c.rank : (i + 1); - NSString *title = c.characterName ?: @""; - [topItems addObject:@{ @"title": title, @"rank": @(i + 1) }]; - } - if (topItems.count > 0) { - [weakSelf.topThreeView configWithItems:topItems]; + if (topCount > 0) { + NSRange range = NSMakeRange(0, topCount); + NSArray *topThree = [weakSelf.allCharacters subarrayWithRange:range]; + [weakSelf.topThreeView configWithCharacters:topThree]; } // 列表部分:从第 4 名开始