// // KBMyHeaderView.m // keyBoard // #import "KBMyHeaderView.h" #import #import "UIColor+Extension.h" #import "KBPersonInfoVC.h" #import "KBMyKeyBoardVC.h" @interface KBMyHeaderView () @property (nonatomic, strong) UILabel *titleLabel; @property (nonatomic, strong) UIButton *keyboardBtn; @property (nonatomic, strong) UIImageView *avatarView; @property (nonatomic, strong) UILabel *nameLabel; @property (nonatomic, strong) UIImageView *cardLeft; @property (nonatomic, strong) UIImageView *cardRight; @property (nonatomic, strong) UIImageView *avatarEditIcon; // 头像右下角的编辑图标 @end @implementation KBMyHeaderView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor clearColor]; // 透明,露出底部背景图 [self addSubview:self.titleLabel]; [self addSubview:self.keyboardBtn]; [self addSubview:self.avatarView]; [self addSubview:self.avatarEditIcon]; // 头像右下角编辑图标 [self addSubview:self.nameLabel]; [self addSubview:self.cardLeft]; [self addSubview:self.cardRight]; // 布局 [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(26); make.bottom.equalTo(self.avatarView.mas_top).offset(-35); // 顶部安全区下方 }]; [self.keyboardBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.titleLabel); make.right.equalTo(self).offset(-20); make.height.mas_equalTo(34); make.width.mas_greaterThanOrEqualTo(115); }]; [self.avatarView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(26); make.bottom.equalTo(self.cardLeft.mas_top).offset(-23); make.width.height.mas_equalTo(70); }]; [self.avatarEditIcon mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(18); make.right.equalTo(self.avatarView.mas_right); make.bottom.equalTo(self.avatarView.mas_bottom); }]; [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.avatarView); make.left.equalTo(self.avatarView.mas_right).offset(12); make.right.lessThanOrEqualTo(self).offset(-20); }]; // 166 99 // w ? CGFloat height = 99 * (KB_SCREEN_WIDTH - 2 * 16 - 10) * 0.5 / 166; [self.cardLeft mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(16); make.bottom.equalTo(self).offset(-30); make.right.equalTo(self.mas_centerX).offset(-5); make.height.mas_equalTo(height); }]; [self.cardRight mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self).offset(-16); make.bottom.equalTo(self).offset(-30); make.left.equalTo(self.mas_centerX).offset(5); make.height.equalTo(self.cardLeft); }]; } return self; } - (void)layoutSubviews { [super layoutSubviews]; // 圆角 self.avatarView.layer.cornerRadius = self.avatarView.bounds.size.height * 0.5; self.avatarView.layer.masksToBounds = YES; } + (void)kb_applyGradientTo:(UIView *)view colors:(NSArray *)colors { // 删除旧的渐变层,重复 setNeedsLayout 时避免叠加 NSMutableArray *remove = [NSMutableArray array]; for (CALayer *l in view.layer.sublayers) { if ([l isKindOfClass:[CAGradientLayer class]]) { [remove addObject:l]; } } for (CALayer *l in remove) { [l removeFromSuperlayer]; } CAGradientLayer *g = [CAGradientLayer layer]; g.colors = colors; g.startPoint = CGPointMake(0, 0.5); g.endPoint = CGPointMake(1, 0.5); g.frame = view.bounds; [view.layer insertSublayer:g atIndex:0]; } #pragma mark - Lazy UI - (UILabel *)titleLabel { if (!_titleLabel) { _titleLabel = [UILabel new]; _titleLabel.text = @"Settings"; // 大标题 _titleLabel.font = [UIFont systemFontOfSize:30 weight:UIFontWeightBold]; _titleLabel.textColor = [UIColor colorWithHex:0x1B1F1A]; } return _titleLabel; } - (UIButton *)keyboardBtn { if (!_keyboardBtn) { _keyboardBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_keyboardBtn setTitle:@"My Keyboard" forState:UIControlStateNormal]; _keyboardBtn.titleLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightSemibold]; [_keyboardBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; _keyboardBtn.backgroundColor = [UIColor colorWithHex:KBColorValue]; _keyboardBtn.layer.cornerRadius = 17; _keyboardBtn.layer.masksToBounds = YES; // 图标 + 文本,图文间距 6 UIImage *kbImg = [UIImage imageNamed:@"my_kb_icon"]; if (kbImg) { [_keyboardBtn setImage:kbImg forState:UIControlStateNormal]; _keyboardBtn.imageView.contentMode = UIViewContentModeScaleAspectFit; CGFloat spacing = 6.0; _keyboardBtn.contentEdgeInsets = UIEdgeInsetsMake(0, spacing, 0, spacing); _keyboardBtn.titleEdgeInsets = UIEdgeInsetsMake(0, spacing, 0, -spacing); } // 点击事件 [_keyboardBtn addTarget:self action:@selector(onKeyboardTap) forControlEvents:UIControlEventTouchUpInside]; } return _keyboardBtn; } - (UIImageView *)avatarView { if (!_avatarView) { _avatarView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"lufei.jpg"]]; _avatarView.contentMode = UIViewContentModeScaleAspectFill; _avatarView.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0]; _avatarView.userInteractionEnabled = YES; // 头像可点击 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onAvatarTap)]; [_avatarView addGestureRecognizer:tap]; } return _avatarView; } - (UILabel *)nameLabel { if (!_nameLabel) { _nameLabel = [UILabel new]; _nameLabel.text = @"Notice"; _nameLabel.font = [UIFont systemFontOfSize:20 weight:UIFontWeightSemibold]; _nameLabel.textColor = [UIColor colorWithHex:0x1B1F1A]; } return _nameLabel; } - (UIImageView *)cardLeft { if (!_cardLeft) { _cardLeft = [UIImageView new]; _cardLeft.contentMode = UIViewContentModeScaleAspectFit; _cardLeft.image = [UIImage imageNamed:@"my_member_icon"]; _cardLeft.userInteractionEnabled = YES; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onLeftCardTap)]; [_cardLeft addGestureRecognizer:tap]; } return _cardLeft; } - (UIImageView *)cardRight { if (!_cardRight) { _cardRight = [UIImageView new]; _cardRight.contentMode = UIViewContentModeScaleAspectFit; _cardRight.image = [UIImage imageNamed:@"my_recharge_icon"]; _cardRight.userInteractionEnabled = YES; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onRightCardTap)]; [_cardRight addGestureRecognizer:tap]; } return _cardRight; } - (UIImageView *)avatarEditIcon { if (!_avatarEditIcon) { _avatarEditIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"my_head_edite"]]; _avatarEditIcon.contentMode = UIViewContentModeScaleAspectFit; _avatarEditIcon.userInteractionEnabled = NO; // 仅展示 } return _avatarEditIcon; } #pragma mark - Actions - (void)onKeyboardTap { KBMyKeyBoardVC *vc = [[KBMyKeyBoardVC alloc] init]; [KB_CURRENT_NAV pushViewController:vc animated:true]; } - (void)onAvatarTap { KBPersonInfoVC *vc = [[KBPersonInfoVC alloc] init]; [KB_CURRENT_NAV pushViewController:vc animated:true]; } - (void)onLeftCardTap { if (self.onLeftCardTapped) { self.onLeftCardTapped(); } } - (void)onRightCardTap { if (self.onRightCardTapped) { self.onRightCardTapped(); } } @end