This commit is contained in:
2025-11-14 19:48:15 +08:00
parent 4f2e80e482
commit dace0a9309
21 changed files with 792 additions and 19 deletions

View File

@@ -0,0 +1,147 @@
//
// KBVipPayHeaderView.m
// keyBoard
//
// 使 Masonry 5
//
#import "KBVipPayHeaderView.h"
@interface KBVipPayHeaderView ()
// 便 KB_NAV_TOTAL_HEIGHT
@property (nonatomic, strong) UIView *containerView;
// pay_vip_icon
@property (nonatomic, strong) UIImageView *vipImageView;
//
@property (nonatomic, strong) UIImageView *aiImageView;
@property (nonatomic, strong) UIImageView *keyboardImageView;
@property (nonatomic, strong) UIImageView *chatImageView;
@property (nonatomic, strong) UIImageView *emotionImageView;
@end
@implementation KBVipPayHeaderView
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor clearColor];
[self addSubview:self.containerView];
[self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
}];
// 1.
[self.containerView addSubview:self.vipImageView];
[self.vipImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.containerView).offset(16);
make.right.equalTo(self.containerView).offset(-16);
make.top.equalTo(self.containerView).offset(KB_NAV_TOTAL_HEIGHT + 8);
make.height.mas_equalTo(KBFit(180));
}];
// 2.
UIView *g1 = [self gridItemWithImageView:self.aiImageView];
UIView *g2 = [self gridItemWithImageView:self.keyboardImageView];
UIView *g3 = [self gridItemWithImageView:self.chatImageView];
UIView *g4 = [self gridItemWithImageView:self.emotionImageView];
[self.containerView addSubview:g1];
[self.containerView addSubview:g2];
[self.containerView addSubview:g3];
[self.containerView addSubview:g4];
CGFloat spacing = 12;
[g1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.vipImageView);
make.top.equalTo(self.vipImageView.mas_bottom).offset(18);
make.height.mas_equalTo(KBFit(90));
}];
[g2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.vipImageView);
make.top.equalTo(g1);
make.height.equalTo(g1);
make.left.equalTo(g1.mas_right).offset(spacing);
make.width.equalTo(g1);
}];
[g3 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(g1);
make.top.equalTo(g1.mas_bottom).offset(spacing);
make.height.equalTo(g1);
make.width.equalTo(g1);
}];
[g4 mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.vipImageView);
make.top.equalTo(g3);
make.left.equalTo(g3.mas_right).offset(spacing);
make.height.equalTo(g1);
make.width.equalTo(g1);
make.bottom.lessThanOrEqualTo(self.containerView).offset(-12);
}];
}
return self;
}
#pragma mark - Helpers
- (UIView *)gridItemWithImageView:(UIImageView *)iv {
//
UIView *v = [UIView new];
v.backgroundColor = [UIColor colorWithWhite:0.97 alpha:1.0];
v.layer.cornerRadius = 12;
v.layer.masksToBounds = YES;
[v addSubview:iv];
[iv mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(v);
make.width.height.mas_equalTo(40);
}];
return v;
}
#pragma mark - Lazy
- (UIView *)containerView {
if (!_containerView) {
_containerView = [UIView new];
_containerView.backgroundColor = [UIColor clearColor];
}
return _containerView;
}
- (UIImageView *)vipImageView {
if (!_vipImageView) {
_vipImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_vip_icon"]];
_vipImageView.contentMode = UIViewContentModeScaleAspectFill;
_vipImageView.clipsToBounds = YES;
_vipImageView.layer.cornerRadius = 14;
}
return _vipImageView;
}
- (UIImageView *)aiImageView {
if (!_aiImageView) {
_aiImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_ai_icon"]];
_aiImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _aiImageView;
}
- (UIImageView *)keyboardImageView {
if (!_keyboardImageView) {
_keyboardImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_keyboard_icon"]];
_keyboardImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _keyboardImageView;
}
- (UIImageView *)chatImageView {
if (!_chatImageView) {
_chatImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_chat_icon"]];
_chatImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _chatImageView;
}
- (UIImageView *)emotionImageView {
if (!_emotionImageView) {
_emotionImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pay_emotion_icon"]];
_emotionImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _emotionImageView;
}
@end