Files
keyboard/keyBoard/Class/Home/V/KBTopThreeView.m

212 lines
6.8 KiB
Mathematica
Raw Normal View History

2025-11-06 14:59:00 +08:00
//
// KBTopThreeView.m
// keyBoard
//
#import "KBTopThreeView.h"
@interface KBTopThreeCardView : UIView
///
@property (nonatomic, strong) UIView *avatarCircleView;
///
2025-11-07 19:33:54 +08:00
@property (nonatomic, strong) UIImageView *cardImageView;
2025-11-06 14:59:00 +08:00
///
@property (nonatomic, strong) UILabel *titleLabel;
///
@property (nonatomic, strong) UIButton *plusButton;
///
- (void)renderWithTitle:(NSString *)title rank:(NSInteger)rank;
@end
@implementation KBTopThreeCardView
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setupUI];
}
return self;
}
- (void)setupUI {
//
2025-11-07 19:33:54 +08:00
[self addSubview:self.cardImageView];
2025-11-06 14:59:00 +08:00
//
[self addSubview:self.avatarCircleView];
2025-11-07 19:33:54 +08:00
[self.cardImageView addSubview:self.titleLabel];
2025-11-06 14:59:00 +08:00
//
[self addSubview:self.plusButton];
//
[self.avatarCircleView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self);
make.centerX.equalTo(self);
make.width.height.mas_equalTo(68);
}];
2025-11-07 19:33:54 +08:00
[self.cardImageView mas_makeConstraints:^(MASConstraintMaker *make) {
2025-11-06 14:59:00 +08:00
make.top.equalTo(self.avatarCircleView.mas_bottom).offset(-34); //
make.left.right.equalTo(self);
2025-11-07 19:33:54 +08:00
make.height.mas_equalTo(148);
2025-11-06 14:59:00 +08:00
}];
2025-11-07 19:33:54 +08:00
2025-11-06 14:59:00 +08:00
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
2025-11-07 19:33:54 +08:00
make.centerX.equalTo(self.cardImageView);
make.top.equalTo(self.cardImageView).offset(84);
2025-11-06 14:59:00 +08:00
}];
[self.plusButton mas_makeConstraints:^(MASConstraintMaker *make) {
2025-11-07 19:33:54 +08:00
make.top.equalTo(self.cardImageView.mas_bottom).offset(12);
2025-11-06 14:59:00 +08:00
make.centerX.equalTo(self);
make.width.mas_equalTo(52);
make.height.mas_equalTo(28);
make.bottom.equalTo(self.mas_bottom); //
}];
}
- (void)renderWithTitle:(NSString *)title rank:(NSInteger)rank {
self.titleLabel.text = title.length ? title : @"";
//
UIColor *theme;
2025-11-07 19:33:54 +08:00
UIImage *image;
2025-11-06 14:59:00 +08:00
switch (rank) {
2025-11-07 19:33:54 +08:00
case 1:
{
theme = [UIColor colorWithRed:1.00 green:0.86 blue:0.43 alpha:1.0];
image = [UIImage imageNamed:@"home_rank_1"];
}
break; //
case 2: {
theme = [UIColor colorWithRed:0.68 green:0.80 blue:1.00 alpha:1.0];
image = [UIImage imageNamed:@"home_rank_2"];
}
break; //
default: {
theme = [UIColor colorWithRed:1.00 green:0.78 blue:0.63 alpha:1.0];
image = [UIImage imageNamed:@"home_rank_3"];
} break; //
2025-11-06 14:59:00 +08:00
}
2025-11-07 19:33:54 +08:00
self.cardImageView.image = image;
2025-11-06 14:59:00 +08:00
self.plusButton.backgroundColor = [theme colorWithAlphaComponent:0.3];
//
self.avatarCircleView.layer.borderColor = [UIColor colorWithRed:0.83 green:0.95 blue:0.27 alpha:1.0].CGColor;
}
#pragma mark - Lazy
- (UIView *)avatarCircleView {
if (!_avatarCircleView) {
_avatarCircleView = [[UIView alloc] init];
_avatarCircleView.backgroundColor = [UIColor whiteColor];
_avatarCircleView.layer.cornerRadius = 34;
_avatarCircleView.layer.borderWidth = 2.0;
_avatarCircleView.layer.borderColor = [UIColor colorWithWhite:0.9 alpha:1].CGColor;
// UIImageView
}
return _avatarCircleView;
}
2025-11-07 19:33:54 +08:00
- (UIImageView *)cardImageView {
if (!_cardImageView) {
_cardImageView = [[UIImageView alloc] init];
2025-11-06 14:59:00 +08:00
}
2025-11-07 19:33:54 +08:00
return _cardImageView;
2025-11-06 14:59:00 +08:00
}
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.textColor = [UIColor colorWithWhite:0.1 alpha:1];
_titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightSemibold];
_titleLabel.textAlignment = NSTextAlignmentCenter;
}
return _titleLabel;
}
- (UIButton *)plusButton {
if (!_plusButton) {
_plusButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_plusButton setTitle:@"+" forState:UIControlStateNormal];
[_plusButton setTitleColor:[UIColor colorWithRed:0.20 green:0.65 blue:0.50 alpha:1.0] forState:UIControlStateNormal];
_plusButton.titleLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightSemibold];
_plusButton.layer.cornerRadius = 14.0;
_plusButton.layer.masksToBounds = YES;
}
return _plusButton;
}
@end
@interface KBTopThreeView()
@property (nonatomic, strong) KBTopThreeCardView *leftCard;
@property (nonatomic, strong) KBTopThreeCardView *centerCard;
@property (nonatomic, strong) KBTopThreeCardView *rightCard;
@end
@implementation KBTopThreeView
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
2025-11-07 19:33:54 +08:00
self.backgroundColor = [UIColor whiteColor];
2025-11-06 14:59:00 +08:00
[self setupUI];
}
return self;
}
- (void)setupUI {
[self addSubview:self.leftCard];
[self addSubview:self.centerCard];
[self addSubview:self.rightCard];
//
[self.centerCard mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self);
make.top.equalTo(self).offset(8);
make.width.equalTo(self.mas_width).multipliedBy(1.0/3.0).offset(-12);
}];
[self.leftCard mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.centerCard);
make.right.equalTo(self.centerCard.mas_left).offset(-8);
make.width.equalTo(self.centerCard);
}];
[self.rightCard mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.centerCard);
make.left.equalTo(self.centerCard.mas_right).offset(8);
make.width.equalTo(self.centerCard);
}];
// /
[self.leftCard mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self).offset(-8); }];
[self.rightCard mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self).offset(-8); }];
}
- (void)configWithItems:(NSArray<NSDictionary *> *)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;
}
[self.centerCard renderWithTitle:t1 rank:1];
[self.leftCard renderWithTitle:t2 rank:2];
[self.rightCard renderWithTitle:t3 rank:3];
}
#pragma mark - Lazy
- (KBTopThreeCardView *)leftCard { if (!_leftCard) _leftCard = [KBTopThreeCardView new]; return _leftCard; }
- (KBTopThreeCardView *)centerCard { if (!_centerCard) _centerCard = [KBTopThreeCardView new]; return _centerCard; }
- (KBTopThreeCardView *)rightCard { if (!_rightCard) _rightCard = [KBTopThreeCardView new]; return _rightCard; }
@end