// // XPRoomGiftBroadcastView.m // xplan-ios // // Created by 冯硕 on 2021/11/18. // #import "XPRoomGiftBroadcastView.h" ///Third #import ///Tool #import "ThemeColor+Room.h" #import "XPMacro.h" ///Model #import "XPRoomGiftBroadCastModel.h" ///View #import "NetImageView.h" #define kScreenScale (CGFloat)KScreenWidth / (CGFloat)375 @interface XPRoomGiftUserView : UIView /// @property (nonatomic,strong) NetImageView *avatarImageView; /// @property (nonatomic,strong) UIImageView *boraderImageView; /// @property (nonatomic,strong) UIButton *nickButton; @end @implementation XPRoomGiftUserView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.avatarImageView]; [self addSubview:self.boraderImageView]; [self addSubview:self.nickButton]; } - (void)initSubViewConstraints { [self mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(self.nickButton.mas_bottom); }]; [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.top.mas_equalTo(self); make.height.width.mas_equalTo(44 * kScreenScale); }]; [self.boraderImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(51 * kScreenScale, 51 * kScreenScale)); make.center.mas_equalTo(self.avatarImageView); }]; [self.nickButton mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self); make.top.mas_equalTo(self.avatarImageView.mas_bottom).offset(-8 * kScreenScale); make.size.mas_equalTo(CGSizeMake(66 * kScreenScale, 16 * kScreenScale)); }]; } #pragma mark - Getters And Setters - (NetImageView *)avatarImageView { if (!_avatarImageView) { _avatarImageView = [[NetImageView alloc] init]; _avatarImageView.userInteractionEnabled = YES; _avatarImageView.imageType = ImageTypeUserIcon; _avatarImageView.layer.masksToBounds = YES; _avatarImageView.layer.cornerRadius = 50 * kScreenScale/2; } return _avatarImageView; } - (UIImageView *)boraderImageView { if (!_boraderImageView) { _boraderImageView = [[UIImageView alloc] init]; _boraderImageView.userInteractionEnabled = YES; } return _boraderImageView; } - (UIButton *)nickButton { if (!_nickButton) { _nickButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_nickButton setTitleColor:[ThemeColor giftBroadcastNickColor] forState:UIControlStateNormal]; _nickButton.titleLabel.font = [UIFont systemFontOfSize:10]; [_nickButton setBackgroundImage:[UIImage imageNamed:@"room_gift_broadcast_avatar_board"] forState:UIControlStateNormal]; } return _nickButton; } @end @interface XPRoomGiftBroadcastView () ///背景 @property (nonatomic,strong) UIImageView *backImageView; ///赠送者 @property (nonatomic,strong) XPRoomGiftUserView *sendView; ///赠送 @property (nonatomic,strong) UIImageView *sendImageView; ///接收者 @property (nonatomic,strong) XPRoomGiftUserView *receiveView; ///礼物 @property (nonatomic,strong) NetImageView *giftImageView; ///数量 @property (nonatomic,strong) UILabel *countLabel; ///关闭 @property (nonatomic,strong) UIButton *closeButton; @end @implementation XPRoomGiftBroadcastView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Response - (void)closeButtonAction:(UIButton *)sender { [self removeFromSuperview]; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.backImageView]; [self.backImageView addSubview:self.closeButton]; [self.backImageView addSubview:self.sendView]; [self.backImageView addSubview:self.sendImageView]; [self.backImageView addSubview:self.receiveView]; [self.backImageView addSubview:self.giftImageView]; [self.backImageView addSubview:self.countLabel]; } - (void)initSubViewConstraints { CGFloat kscale = (CGFloat)125/ (CGFloat)345; CGFloat width = KScreenWidth - 30; [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.mas_equalTo(self).inset(15); make.top.mas_equalTo(self); make.height.mas_equalTo(width * kscale); }]; [self.sendView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.backImageView).offset(41 * kScreenScale); make.width.mas_equalTo(66 * kScreenScale); make.left.mas_equalTo(self.backImageView).offset(13 * kScreenScale); }]; [self.sendImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(30 * kScreenScale, 15 * kScreenScale)); make.centerY.mas_equalTo(self.sendView); make.left.mas_equalTo(self.sendView.mas_right).offset(13 * kScreenScale); }]; [self.receiveView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.width.mas_equalTo(self.sendView); make.left.mas_equalTo(self.sendImageView.mas_right).offset(13 * kScreenScale); }]; [self.giftImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(60 * kScreenScale, 60 * kScreenScale)); make.centerY.mas_equalTo(self.sendView); make.left.mas_equalTo(self.receiveView.mas_right).offset(13 * kScreenScale); }]; [self.countLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(self.backImageView).offset(-13 * kScreenScale); make.centerY.mas_equalTo(self.sendView); }]; [self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(self.backImageView).offset(-3); make.top.mas_equalTo(13); make.size.mas_equalTo(CGSizeMake(28, 22)); }]; } - (void)updateSubviews:(BroadCastLevel)level { NSString * nickBackImageName; UIColor * nickColor; NSString * bgImageName; switch (level) { case BroadCastLevel_Normal: { CGFloat kscale = (CGFloat)124/ (CGFloat)345; CGFloat width = KScreenWidth - 30; [self.backImageView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(width * kscale); }]; [self.closeButton mas_updateConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(14 * kScreenScale); }]; nickBackImageName = @"room_gift_broadcast_normal_nick_bg"; nickColor = [ThemeColor mainTextColor]; bgImageName = @"room_gift_broadcast_low_bg"; } break; case BroadCastLevel_Middle: { CGFloat kscale = (CGFloat)120/ (CGFloat)345; CGFloat width = KScreenWidth - 30; [self.backImageView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(width * kscale); }];; [self.closeButton mas_updateConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(11 * kScreenScale); }]; nickBackImageName = @"room_gift_broadcast_higher_nick_bg"; nickColor = [ThemeColor giftBroadcastNickColor]; bgImageName = @"room_gift_broadcast_middle_bg"; } break; case BroadCastLevel_High: { CGFloat kscale = (CGFloat)143/ (CGFloat)345; CGFloat width = KScreenWidth - 30; [self.backImageView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(width * kscale); }]; [self.closeButton mas_updateConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(33 * kScreenScale); }]; nickBackImageName = @"room_gift_broadcast_higher_nick_bg"; nickColor = [ThemeColor giftBroadcastNickColor]; bgImageName = @"room_gift_broadcast_high_bg"; } break; default: break; } if (nickBackImageName.length > 0) { [self.sendView.nickButton setBackgroundImage:[UIImage imageNamed:nickBackImageName] forState:UIControlStateNormal]; [self.receiveView.nickButton setBackgroundImage:[UIImage imageNamed:nickBackImageName] forState:UIControlStateNormal]; } if (nickColor) { [self.sendView.nickButton setTitleColor:nickColor forState:UIControlStateNormal]; [self.receiveView.nickButton setTitleColor:nickColor forState:UIControlStateNormal]; } self.backImageView.image = [UIImage imageNamed:bgImageName]; } #pragma mark - Getters And Setters - (void)setBroadcastModel:(XPRoomGiftBroadCastModel *)broadcastModel { _broadcastModel = broadcastModel; if (_broadcastModel) { if (broadcastModel.sendUserNick.length > 6) { broadcastModel.sendUserNick = [broadcastModel.sendUserNick substringToIndex:6]; } self.sendView.avatarImageView.imageUrl = broadcastModel.sendUserAvatar; [self.sendView.nickButton setTitle:broadcastModel.sendUserNick forState:UIControlStateNormal]; if (broadcastModel.recvUserNick.length > 6) { broadcastModel.recvUserNick = [broadcastModel.recvUserNick substringToIndex:6]; } self.receiveView.avatarImageView.imageUrl = broadcastModel.recvUserAvatar; [self.receiveView.nickButton setTitle:broadcastModel.recvUserNick forState:UIControlStateNormal]; self.giftImageView.imageUrl = broadcastModel.giftUrl; self.countLabel.text = [NSString stringWithFormat:@"x%ld", broadcastModel.giftNum]; [self updateSubviews:broadcastModel.levelNum]; } } - (UIImageView *)backImageView { if (!_backImageView) { _backImageView = [[UIImageView alloc] init]; _backImageView.userInteractionEnabled = YES; } return _backImageView; } - (XPRoomGiftUserView *)sendView { if (!_sendView) { _sendView = [[XPRoomGiftUserView alloc] init]; } return _sendView; } - (UIImageView *)sendImageView { if (!_sendImageView) { _sendImageView = [[UIImageView alloc] init]; _sendImageView.userInteractionEnabled = YES; _sendImageView.image = [UIImage imageNamed:@"room_gift_broadcast_send"]; } return _sendImageView; } - (XPRoomGiftUserView *)receiveView { if (!_receiveView) { _receiveView = [[XPRoomGiftUserView alloc] init]; } return _receiveView; } - (NetImageView *)giftImageView { if (!_giftImageView) { _giftImageView = [[NetImageView alloc] init]; _giftImageView.imageType = ImageTypeUserIcon; } return _giftImageView; } - (UILabel *)countLabel { if (!_countLabel) { _countLabel = [[UILabel alloc] init]; _countLabel.font = [UIFont fontWithName:@"PingFang-SC-Heavy" size:20]; _countLabel.textColor = [ThemeColor giftBroadcastNumberColor]; } return _countLabel; } - (UIButton *)closeButton { if (!_closeButton) { _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_closeButton setImage:[UIImage imageNamed:@"room_gift_broadcast_close"] forState:UIControlStateNormal]; [_closeButton setImage:[UIImage imageNamed:@"room_gift_broadcast_close"] forState:UIControlStateSelected]; [_closeButton addTarget:self action:@selector(closeButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _closeButton; } @end