// // XPMonentsUserInfoView.m // xplan-ios // // Created by 冯硕 on 2022/5/12. // #import "XPMonentsUserInfoView.h" ///Third #import ///Tool #import "ThemeColor.h" #import "NetImageView.h" #import "SpriteSheetImageManager.h" #import "XPMacro.h" ///Model #import "MonentsInfoModel.h" @interface XPMonentsUserInfoView () ///头像 @property (nonatomic,strong) NetImageView *avatarImageView; ///昵称 @property (nonatomic,strong) UILabel *nickLabel; ///性别 @property (nonatomic,strong) UIImageView *sexImageView; ///新用户 @property (nonatomic,strong) UIImageView *newsUserImageView; ///官方的 @property (nonatomic,strong) UIImageView *officalImageView; ///头饰 @property (nonatomic,strong) YYAnimatedImageView *headWearImageView; ///头饰播放 @property (nonatomic, strong) SpriteSheetImageManager *manager; ///用户的等级 @property (nonatomic,strong) UIStackView *levelStackView; ///魅力等级 @property (nonatomic,strong) NetImageView *charmImageView; ///等级 @property (nonatomic,strong) NetImageView *experImageView; ///铭牌的容器 @property (nonatomic,strong) UIView * namePlateView; ///铭牌图片 @property (nonatomic,strong) NetImageView *nameplateImageView; ///铭牌文字 @property (nonatomic,strong) UILabel *nameplateLabel; ///tag的容器 @property (nonatomic,strong) UIStackView *tagStackView; ///第一个tag @property (nonatomic,strong) NetImageView *firstTagImageView; ///第二个tag @property (nonatomic,strong) NetImageView *secondTagImageView; ///第三个tag @property (nonatomic,strong) NetImageView *thirdTagImageView; ///直播中 @property (nonatomic,strong) UIButton *onlineButton; @end @implementation XPMonentsUserInfoView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.avatarImageView]; [self addSubview:self.headWearImageView]; [self addSubview:self.nickLabel]; [self addSubview:self.sexImageView]; [self addSubview:self.tagStackView]; [self addSubview:self.levelStackView]; [self addSubview:self.onlineButton]; [self.tagStackView addArrangedSubview:self.firstTagImageView]; [self.tagStackView addArrangedSubview:self.secondTagImageView]; [self.tagStackView addArrangedSubview:self.thirdTagImageView]; [self.levelStackView addArrangedSubview:self.newsUserImageView]; [self.levelStackView addArrangedSubview:self.officalImageView]; [self.levelStackView addArrangedSubview:self.experImageView]; [self.levelStackView addArrangedSubview:self.charmImageView]; [self.levelStackView addArrangedSubview:self.namePlateView]; ///铭牌 [self.namePlateView addSubview:self.nameplateImageView]; [self.namePlateView addSubview:self.nameplateLabel]; } - (void)initSubViewConstraints { [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(40, 40)); make.left.mas_equalTo(self).offset(15); make.top.mas_equalTo(self).offset(15); }]; [self.headWearImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.center.mas_equalTo(self.avatarImageView); make.width.mas_equalTo(self.avatarImageView.mas_width).multipliedBy(1.2); make.height.mas_equalTo(self.headWearImageView.mas_width); }]; [self.nickLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.avatarImageView.mas_right).offset(12); make.bottom.mas_equalTo(self.avatarImageView.mas_centerY).offset(-2); }]; [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(14, 14)); make.left.mas_equalTo(self.nickLabel.mas_right).offset(4); make.centerY.mas_equalTo(self.nickLabel); }]; [self.levelStackView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.nickLabel); make.top.mas_equalTo(self.avatarImageView.mas_centerY).offset(2); make.height.mas_equalTo(20); }]; [self.newsUserImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(20); }]; [self.officalImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(20); }]; [self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(20); }]; [self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(20); }]; [self.namePlateView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(self.nameplateImageView.mas_width); }]; [self.nameplateImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(20); make.width.mas_equalTo(60); make.left.top.mas_equalTo(self.namePlateView); }]; [self.nameplateLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.bottom.mas_equalTo(self.nameplateImageView); make.right.mas_equalTo(self.namePlateView).offset(-2); }]; [self.tagStackView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self).offset(-15); make.centerY.mas_equalTo(self.nickLabel); make.height.mas_equalTo(14); }]; [self.firstTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(35); }]; [self.secondTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(self.firstTagImageView); }]; [self.thirdTagImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(self.firstTagImageView); }]; } #pragma mark - Event Response - (void)onlineButtonAction:(UIButton *)sender { if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsUserInfoView:didClickEnterRoom:)]) { [self.delegate xPMonentsUserInfoView:self didClickEnterRoom:self.monentsInfo]; } } - (void)didTapAvatarGuest { if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsUserInfoView:didClickAvatar:)]) { [self.delegate xPMonentsUserInfoView:self didClickAvatar:self.monentsInfo]; } } #pragma mark - Getters And Setters - (void)setMonentsInfo:(MonentsInfoModel *)monentsInfo { _monentsInfo = monentsInfo; if (_monentsInfo) { self.avatarImageView.imageUrl = _monentsInfo.avatar; NSString * nick = _monentsInfo.nick; if (nick.length > 8) { nick = [NSString stringWithFormat:@"%@…", [nick substringToIndex:8]]; } self.nickLabel.text = nick.length > 0 ? nick : @""; self.sexImageView.image = _monentsInfo.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; self.officalImageView.hidden = _monentsInfo.defUser != 2; self.newsUserImageView.hidden = !_monentsInfo.newUser; if (_monentsInfo.experLevelPic) { self.experImageView.imageUrl = _monentsInfo.experLevelPic; } self.experImageView.hidden = _monentsInfo.experLevelPic.length <= 0; if (_monentsInfo.charmLevelPic) { self.charmImageView.imageUrl = _monentsInfo.charmLevelPic; } self.charmImageView.hidden = _monentsInfo.charmLevelPic.length <= 0; if (_monentsInfo.nameplateWord.length>0 && _monentsInfo.nameplatePic.length>0) { self.nameplateImageView.imageUrl = _monentsInfo.nameplatePic; self.nameplateLabel.text = _monentsInfo.nameplateWord; self.namePlateView.hidden = NO; } else { self.namePlateView.hidden = YES; } NSString * headwearUrl= _monentsInfo.headwearEffect.length > 0 ? _monentsInfo.headwearEffect : _monentsInfo.headwearPic; self.headWearImageView.hidden = headwearUrl.length <= 0; if (headwearUrl.length > 0) { NSURL *url = [NSURL URLWithString:headwearUrl]; @kWeakify(self); [self.manager loadSpriteSheetImageWithURL:url completionBlock:^(YYSpriteSheetImage * _Nullable sprit) { @kStrongify(self); self.headWearImageView.image = sprit; } failureBlock:^(NSError * _Nullable error) { }]; } for (int i = 0; i< _monentsInfo.labelList.count; i++) { NSString * imageUrl = [_monentsInfo.labelList objectAtIndex:i]; if (i < self.tagStackView.subviews.count) { NetImageView * image = [self.tagStackView.subviews objectAtIndex:i]; image.imageUrl = imageUrl; } } self.onlineButton.hidden = _monentsInfo.inRoomUid.length <= 0; } } - (SpriteSheetImageManager *)manager { if (!_manager) { _manager = [[SpriteSheetImageManager alloc] init]; } return _manager; } - (YYAnimatedImageView *)headWearImageView { if (!_headWearImageView) { _headWearImageView = [[YYAnimatedImageView alloc] init]; _headWearImageView.backgroundColor = [UIColor clearColor]; _headWearImageView.contentMode = UIViewContentModeScaleAspectFit; } return _headWearImageView; } - (NetImageView *)avatarImageView { if (!_avatarImageView) { NetImageConfig * config = [[NetImageConfig alloc] init]; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; config.imageType = ImageTypeUserIcon; _avatarImageView = [[NetImageView alloc] initWithConfig:config]; _avatarImageView.userInteractionEnabled = YES; _avatarImageView.layer.masksToBounds = YES; _avatarImageView.layer.cornerRadius = 20; _avatarImageView.contentMode = UIViewContentModeScaleAspectFill; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAvatarGuest)]; [_avatarImageView addGestureRecognizer:tap]; } return _avatarImageView; } - (UILabel *)nickLabel { if (!_nickLabel) { _nickLabel = [[UILabel alloc] init]; _nickLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; _nickLabel.textColor = [ThemeColor mainTextColor]; } return _nickLabel; } - (UIImageView *)sexImageView { if (!_sexImageView) { _sexImageView = [[UIImageView alloc] init]; _sexImageView.userInteractionEnabled = YES; } return _sexImageView; } - (UIStackView *)levelStackView { if (!_levelStackView) { _levelStackView = [[UIStackView alloc] init]; _levelStackView.axis = UILayoutConstraintAxisHorizontal; _levelStackView.distribution = UIStackViewDistributionFill; _levelStackView.alignment = UIStackViewAlignmentFill; _levelStackView.spacing = 2; } return _levelStackView; } - (NetImageView *)experImageView { if (!_experImageView) { NetImageConfig * config = [[NetImageConfig alloc] init]; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; config.imageType = ImageTypeUserCardLevel; _experImageView = [[NetImageView alloc] initWithConfig:config]; _experImageView.userInteractionEnabled = YES; _experImageView.hidden = YES; _experImageView.contentMode = UIViewContentModeScaleAspectFit; } return _experImageView; } - (NetImageView *)charmImageView { if (!_charmImageView) { NetImageConfig * config = [[NetImageConfig alloc] init]; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; config.imageType = ImageTypeUserCardLevel; _charmImageView = [[NetImageView alloc] initWithConfig:config]; _charmImageView.userInteractionEnabled = YES; _charmImageView.hidden = YES; _charmImageView.contentMode = UIViewContentModeScaleAspectFit; } return _charmImageView; } - (UIView *)namePlateView { if (!_namePlateView) { _namePlateView = [[UIView alloc] init]; _namePlateView.backgroundColor = [UIColor clearColor]; _namePlateView.hidden = YES; } return _namePlateView; } - (NetImageView *)nameplateImageView { if (!_nameplateImageView) { NetImageConfig * config = [[NetImageConfig alloc] init]; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; config.imageType = ImageTypeUserCardLevel; _nameplateImageView = [[NetImageView alloc] initWithConfig:config]; _nameplateImageView.userInteractionEnabled = YES; _nameplateImageView.contentMode = UIViewContentModeScaleAspectFit; } return _nameplateImageView; } - (UILabel *)nameplateLabel { if (!_nameplateLabel) { _nameplateLabel = [[UILabel alloc] init]; _nameplateLabel.font = [UIFont systemFontOfSize:10]; _nameplateLabel.textAlignment = NSTextAlignmentCenter; _nameplateLabel.textColor = [UIColor whiteColor]; } return _nameplateLabel; } - (UIImageView *)newsUserImageView { if (!_newsUserImageView) { _newsUserImageView = [[UIImageView alloc] init]; _newsUserImageView.userInteractionEnabled = YES; _newsUserImageView.image = [UIImage imageNamed:@"common_new_user"]; _newsUserImageView.hidden = YES; } return _newsUserImageView; } - (UIImageView *)officalImageView { if (!_officalImageView) { _officalImageView = [[UIImageView alloc] init]; _officalImageView.userInteractionEnabled = YES; _officalImageView.image = [UIImage imageNamed:@"common_offical"]; _officalImageView.hidden = YES; } return _officalImageView; } - (UIStackView *)tagStackView { if (!_tagStackView) { _tagStackView = [[UIStackView alloc] init]; _tagStackView.axis = UILayoutConstraintAxisHorizontal; _tagStackView.distribution = UIStackViewDistributionFill; _tagStackView.alignment = UIStackViewAlignmentFill; _tagStackView.spacing = 2; } return _tagStackView; } - (NetImageView *)firstTagImageView { if (!_firstTagImageView) { _firstTagImageView = [[NetImageView alloc] init]; _firstTagImageView.hidden = YES; } return _firstTagImageView; } - (NetImageView *)secondTagImageView { if (!_secondTagImageView) { _secondTagImageView = [[NetImageView alloc] init]; _secondTagImageView.hidden = YES; } return _secondTagImageView; } - (NetImageView *)thirdTagImageView { if (!_thirdTagImageView) { _thirdTagImageView = [[NetImageView alloc] init]; _thirdTagImageView.hidden = YES; } return _thirdTagImageView; } - (UIButton *)onlineButton { if (!_onlineButton) { _onlineButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_onlineButton setTitle:@"直播中" forState:UIControlStateNormal]; [_onlineButton setImage:[UIImage imageNamed:@"home_search_user_online"] forState:UIControlStateNormal]; [_onlineButton setTitleColor:[ThemeColor appEmphasizeColor] forState:UIControlStateNormal]; _onlineButton.backgroundColor = [UIColor clearColor]; _onlineButton.titleLabel.font = [UIFont systemFontOfSize:10]; _onlineButton.layer.masksToBounds = YES; _onlineButton.layer.cornerRadius = 18/2; _onlineButton.layer.borderColor = [ThemeColor appEmphasizeColor].CGColor; _onlineButton.layer.borderWidth = 1; [_onlineButton addTarget:self action:@selector(onlineButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _onlineButton; } @end