增加换肤功能
This commit is contained in:
458
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m
Normal file
458
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m
Normal file
@@ -0,0 +1,458 @@
|
||||
//
|
||||
// QXRoomSeatContentView.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/7.
|
||||
//
|
||||
|
||||
#import "QXRoomSeatContentView.h"
|
||||
#import "QXSeatHeaderView.h"
|
||||
#import "QXEffectSvgaView.h"
|
||||
#import "UIView+VAP.h"
|
||||
#import "QXFileManager.h"
|
||||
#import <AgoraRtcKit/AgoraRtcEngineKit.h>
|
||||
|
||||
@interface QXRoomSeatContentView()
|
||||
/// 头像
|
||||
//@property (nonatomic,strong)UIView *headerContentView;
|
||||
@property (nonatomic,strong)QXSeatHeaderView *headerView;
|
||||
@property (nonatomic,strong)UIImageView *lockImageView;
|
||||
@property (nonatomic,strong)UIImageView *muteImageView;
|
||||
@property (nonatomic,strong)UIImageView *offlineImageView;
|
||||
/// 嘉宾 / 主持 标记
|
||||
@property (nonatomic,strong)UILabel *tagLabel;
|
||||
|
||||
///
|
||||
@property (nonatomic,strong)UILabel *nameLabel;
|
||||
|
||||
/// 魅力背景
|
||||
@property (nonatomic,strong)UIView *charmBgView;
|
||||
|
||||
/// 魅力图标
|
||||
@property (nonatomic,strong)UIImageView *charmIcon;
|
||||
|
||||
/// 魅力num
|
||||
@property (nonatomic,strong)UILabel *charmLabel;
|
||||
|
||||
/// 麦位序号
|
||||
@property (nonatomic,strong)UILabel *numberLabel;
|
||||
|
||||
|
||||
@property (nonatomic,strong) QXEffectSvgaView *micSvgaView;
|
||||
@property (nonatomic,strong) VAPView *micMp4View;
|
||||
@end
|
||||
|
||||
@implementation QXRoomSeatContentView
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)initSubviews{
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(speakInfo:) name:noticeUserSpeak object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onlineStatusDidChanged:) name:noticeRoomUserOnlineStatusDidChanged object:nil];
|
||||
self.clipsToBounds = NO;
|
||||
[self addSubview:self.noUserImageView];
|
||||
[self.noUserImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.left.equalTo(self).offset(5);
|
||||
make.right.equalTo(self).offset(-5);
|
||||
make.height.equalTo(self.noUserImageView.mas_width);
|
||||
}];
|
||||
|
||||
self.lockImageView.hidden = YES;
|
||||
[self addSubview:self.lockImageView];
|
||||
[self.lockImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.left.right.height.equalTo(self.noUserImageView);
|
||||
}];
|
||||
|
||||
[self addSubview:self.headerView];
|
||||
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.left.equalTo(self).offset(5);
|
||||
make.right.equalTo(self).offset(-5);
|
||||
make.height.equalTo(self.noUserImageView.mas_width);
|
||||
}];
|
||||
|
||||
self.muteImageView.hidden = YES;
|
||||
[self addSubview:self.muteImageView];
|
||||
[self.muteImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.left.right.height.equalTo(self.noUserImageView);
|
||||
}];
|
||||
|
||||
self.offlineImageView.hidden = YES;
|
||||
[self addSubview:self.offlineImageView];
|
||||
[self.offlineImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.left.right.height.equalTo(self.noUserImageView);
|
||||
}];
|
||||
|
||||
self.tagLabel = [[UILabel alloc] init];
|
||||
self.tagLabel.textColor = [UIColor whiteColor];
|
||||
self.tagLabel.backgroundColor = RGB16(0xC134EE);
|
||||
self.tagLabel.textAlignment = NSTextAlignmentCenter;
|
||||
self.tagLabel.font = [UIFont systemFontOfSize:ScaleWidth(10.0)];
|
||||
[self.tagLabel addRoundedCornersWithRadius:ScaleWidth(6.5)];
|
||||
self.tagLabel.hidden = YES;
|
||||
[self addSubview:self.tagLabel];
|
||||
[self.tagLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.left.right.equalTo(self);
|
||||
make.centerX.equalTo(self.noUserImageView);
|
||||
make.top.equalTo(self.noUserImageView.mas_bottom).offset(-8);
|
||||
make.height.mas_equalTo(ScaleWidth(13));
|
||||
}];
|
||||
|
||||
self.nameLabel = [[UILabel alloc] init];
|
||||
self.nameLabel.textColor = [UIColor whiteColor];
|
||||
self.nameLabel.font = [UIFont systemFontOfSize:ScaleWidth(12.0)];
|
||||
self.nameLabel.text = @"张三李四";
|
||||
self.nameLabel.lineBreakMode = NSLineBreakByClipping;
|
||||
self.nameLabel.textAlignment = NSTextAlignmentCenter;
|
||||
// self.nameLabel.adjustsFontSizeToFitWidth = YES;
|
||||
self.nameLabel.hidden = YES;
|
||||
[self addSubview:self.nameLabel];
|
||||
[self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.noUserImageView.mas_bottom).offset(5);
|
||||
// make.centerX.equalTo(self.noUserImageView);
|
||||
make.height.mas_equalTo(18);
|
||||
make.left.right.equalTo(self);
|
||||
}];
|
||||
|
||||
self.numberLabel = [[UILabel alloc] init];
|
||||
self.numberLabel.textColor = RGB16(0xffffff);
|
||||
self.numberLabel.font = [UIFont systemFontOfSize:ScaleWidth(12.0)];
|
||||
self.numberLabel.text = @"";
|
||||
[self addSubview:self.numberLabel];
|
||||
[self.numberLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.noUserImageView.mas_bottom).offset(5);
|
||||
make.centerX.equalTo(self.noUserImageView);
|
||||
make.height.mas_equalTo(18);
|
||||
}];
|
||||
|
||||
self.charmBgView = [[UIView alloc] init];
|
||||
self.charmBgView.backgroundColor = RGB16A(0xffffff, 0.2);
|
||||
[self.charmBgView addRoundedCornersWithRadius:ScaleWidth(7.5)];
|
||||
self.charmBgView.hidden = YES;
|
||||
[self addSubview:self.charmBgView];
|
||||
[self.charmBgView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.equalTo(self);
|
||||
make.top.equalTo(self.nameLabel.mas_bottom).offset(3);
|
||||
make.height.mas_equalTo(ScaleWidth(15));
|
||||
}];
|
||||
|
||||
self.charmIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_seat_charm"]];
|
||||
[self.charmBgView addSubview:self.charmIcon];
|
||||
[self.charmIcon mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(5);
|
||||
make.size.mas_equalTo(CGSizeMake(14, 14));
|
||||
make.centerY.equalTo(self.charmBgView).offset(-1);
|
||||
}];
|
||||
|
||||
self.charmLabel = [[UILabel alloc] init];
|
||||
self.charmLabel.textColor = [UIColor whiteColor];
|
||||
self.charmLabel.text = @"0";
|
||||
|
||||
self.charmLabel.font = [UIFont systemFontOfSize:ScaleWidth(10.0)];
|
||||
[self.charmBgView addSubview:self.charmLabel];
|
||||
[self.charmLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
// make.left.equalTo(self.charmIcon.mas_right).offset(1);
|
||||
make.centerY.equalTo(self.charmBgView);
|
||||
make.centerX.equalTo(self.charmBgView).offset(7);
|
||||
}];
|
||||
|
||||
[self addSubview:self.micSvgaView];
|
||||
[self.micSvgaView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.top.equalTo(self.headerView).offset(-8);
|
||||
make.right.bottom.equalTo(self.headerView).offset(8);
|
||||
}];
|
||||
|
||||
[self addSubview:self.micMp4View];
|
||||
[self.micMp4View mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.top.equalTo(self.headerView).offset(-8);
|
||||
make.right.bottom.equalTo(self.headerView).offset(8);
|
||||
}];
|
||||
}
|
||||
-(void)onlineStatusDidChanged:(NSNotification*)notice{
|
||||
NSDictionary *parm = notice.object;
|
||||
NSString *uid = [NSString stringWithFormat:@"%@",[parm objectForKey:@"user_id"]];
|
||||
BOOL isOnline = [[parm objectForKey:@"is_online"] boolValue];
|
||||
if ([uid isEqualToString:self.pitModel.user_id]) {
|
||||
if (isOnline) {
|
||||
self.offlineImageView.hidden = YES;
|
||||
}else{
|
||||
self.offlineImageView.hidden = NO;
|
||||
}
|
||||
}
|
||||
}
|
||||
-(void)speakInfo:(NSNotification*)notice{
|
||||
id object = notice.object;
|
||||
if ([object isKindOfClass:[AgoraRtcAudioVolumeInfo class]]) {
|
||||
AgoraRtcAudioVolumeInfo *info = (AgoraRtcAudioVolumeInfo*)object;
|
||||
if (info.uid == 0) {
|
||||
info.uid = [QXGlobal shareGlobal].loginModel.user_id.longLongValue;
|
||||
}
|
||||
if ((info.uid == self.pitModel.user_id.longLongValue)) {
|
||||
if (info.volume > 0) {
|
||||
[self startAudioAnimation];
|
||||
}else{
|
||||
[self stopAudioAnimation];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
-(void)setIsPK:(BOOL)isPK{
|
||||
_isPK = isPK;
|
||||
self.nameLabel.font = [UIFont systemFontOfSize:10];
|
||||
self.numberLabel.font = [UIFont systemFontOfSize:10];
|
||||
self.charmLabel.font = [UIFont systemFontOfSize:8];
|
||||
[self.nameLabel mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(ScaleWidth(15));
|
||||
}];
|
||||
[self.numberLabel mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(ScaleWidth(15));
|
||||
}];
|
||||
[self.charmBgView mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(ScaleWidth(12));
|
||||
make.top.equalTo(self.nameLabel.mas_bottom).offset(1);
|
||||
}];
|
||||
[self.charmBgView addRoundedCornersWithRadius:ScaleWidth(6)];
|
||||
}
|
||||
|
||||
/// 开启麦位动画
|
||||
- (void)startAudioAnimation {
|
||||
if (self.isSeatSpeaking == YES) {
|
||||
return;
|
||||
}
|
||||
self.isSeatSpeaking = YES;
|
||||
[self.micSvgaView setHidden:NO];
|
||||
[self.micSvgaView startEffectSvgaPlay];
|
||||
}
|
||||
/// 暂停麦位动画
|
||||
- (void)stopAudioAnimation {
|
||||
if (self.isSeatSpeaking == NO) {
|
||||
return;
|
||||
}
|
||||
self.isSeatSpeaking = NO;
|
||||
[self.micSvgaView setHidden:YES];
|
||||
[self.micSvgaView pauseEffectSvgaPlay];
|
||||
}
|
||||
|
||||
-(void)setTagString:(NSString *)tagString{
|
||||
_tagString = tagString;
|
||||
self.tagLabel.hidden = NO;
|
||||
self.numberLabel.hidden = YES;
|
||||
self.tagLabel.text = tagString;
|
||||
[self.tagLabel sizeToFit];
|
||||
[self.tagLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.equalTo(self.noUserImageView);
|
||||
make.top.equalTo(self.noUserImageView.mas_bottom).offset(-8);
|
||||
make.height.mas_equalTo(ScaleWidth(13));
|
||||
make.width.mas_equalTo(self.tagLabel.width+16);
|
||||
}];
|
||||
}
|
||||
-(void)setType:(QXRoomSeatContentViewType)type{
|
||||
_type = type;
|
||||
switch (type) {
|
||||
case QXRoomSeatContentViewTypeNormal:{
|
||||
|
||||
}
|
||||
break;
|
||||
case QXRoomSeatContentViewTypeAuction:{
|
||||
[self.noUserImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.left.equalTo(self).offset(5);
|
||||
make.bottom.equalTo(self).offset(-5);
|
||||
make.width.equalTo(self.noUserImageView.mas_height);
|
||||
}];
|
||||
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.top.bottom.equalTo(self.noUserImageView);
|
||||
}];
|
||||
|
||||
[self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.noUserImageView.mas_right).offset(2);
|
||||
make.right.equalTo(self);
|
||||
make.height.mas_equalTo(18);
|
||||
make.centerY.equalTo(self.noUserImageView);
|
||||
}];
|
||||
|
||||
[self.numberLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.noUserImageView.mas_right).offset(2);
|
||||
make.right.equalTo(self);
|
||||
make.height.mas_equalTo(18);
|
||||
make.centerY.equalTo(self.noUserImageView);
|
||||
}];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
-(void)setNumber:(NSInteger)number{
|
||||
_number = number;
|
||||
if (number>8) {
|
||||
return;
|
||||
}
|
||||
self.numberLabel.text = [NSString localizedStringWithFormat:QXText(@"%@号麦"),[NSString stringWithFormat:@"%ld",number]];
|
||||
}
|
||||
-(void)setOnlyShowHeader:(BOOL)onlyShowHeader{
|
||||
_onlyShowHeader = onlyShowHeader;
|
||||
self.charmBgView.hidden = onlyShowHeader;
|
||||
self.nameLabel.font = onlyShowHeader?[UIFont systemFontOfSize:8]:[UIFont systemFontOfSize:ScaleWidth(12.0)];;
|
||||
}
|
||||
|
||||
-(void)setPitModel:(QXRoomPitModel *)pitModel{
|
||||
_pitModel = pitModel;
|
||||
if (pitModel.is_lock.intValue == 1) {
|
||||
self.lockImageView.hidden = NO;
|
||||
}else{
|
||||
self.lockImageView.hidden = YES;
|
||||
}
|
||||
if (pitModel.user_id.longValue > 0) {
|
||||
self.noUserImageView.hidden = YES;
|
||||
self.numberLabel.hidden = YES;
|
||||
self.headerView.hidden = NO;
|
||||
self.nameLabel.hidden = NO;
|
||||
[self.headerView setHeadIcon:pitModel.avatar dress:pitModel.dress];
|
||||
self.nameLabel.text = pitModel.nickname;
|
||||
self.charmBgView.hidden = NO;
|
||||
self.charmLabel.text = [NSString qx_showHotCountNum:pitModel.charm.longLongValue];
|
||||
|
||||
// if (pitModel.is_mute.intValue == 1) {
|
||||
// self.muteImageView.hidden = NO;
|
||||
// }else{
|
||||
// self.muteImageView.hidden = YES;
|
||||
// }
|
||||
}else{
|
||||
self.noUserImageView.hidden = NO;
|
||||
self.offlineImageView.hidden = YES;
|
||||
self.numberLabel.hidden = NO;
|
||||
self.headerView.hidden = YES;
|
||||
self.nameLabel.hidden = YES;
|
||||
self.charmBgView.hidden = YES;
|
||||
|
||||
// if (pitModel.is_mute.intValue == 1) {
|
||||
// self.muteImageView.hidden = YES;
|
||||
// }else{
|
||||
// self.muteImageView.hidden = YES;
|
||||
// }
|
||||
}
|
||||
if (self.type == QXRoomSeatContentViewTypeAuction) {
|
||||
self.charmBgView.hidden = YES;
|
||||
}
|
||||
}
|
||||
-(void)hideCharm{
|
||||
self.charmBgView.hidden = YES;
|
||||
}
|
||||
//-(void)setUserModel:(QXRoomOwnerModel *)userModel{
|
||||
// _userModel = userModel;
|
||||
// self.noUserImageView.hidden = YES;
|
||||
// self.numberLabel.hidden = YES;
|
||||
// self.headerView.hidden = NO;
|
||||
// self.nameLabel.hidden = NO;
|
||||
//
|
||||
// [self.headerView setHeadIcon:userModel.avatar dress:userModel.dress];
|
||||
// self.nameLabel.text = userModel.nickname;
|
||||
// self.charmBgView.hidden = NO;
|
||||
// self.charmLabel.text = [NSString qx_showHotCountNum:userModel.charm.longLongValue];
|
||||
//}
|
||||
-(void)setIs_lock:(NSString *)is_lock{
|
||||
_is_lock = is_lock;
|
||||
self.pitModel.is_lock = is_lock;
|
||||
if (self.pitModel.is_lock.intValue == 1) {
|
||||
self.lockImageView.hidden = NO;
|
||||
}else{
|
||||
self.lockImageView.hidden = YES;
|
||||
}
|
||||
}
|
||||
-(void)setIsAutionSeat:(BOOL)isAutionSeat{
|
||||
_isAutionSeat = isAutionSeat;
|
||||
|
||||
self.noUserImageView.image = [UIImage imageNamed:@"room_seat_auction_icon"];
|
||||
self.charmBgView.hidden = YES;
|
||||
}
|
||||
-(void)setNumberString:(NSString *)numberString{
|
||||
self.numberLabel.text = numberString;
|
||||
}
|
||||
//-(void)setSinger:(QXSongListModel *)singer{
|
||||
// _singer = singer;
|
||||
// self.noUserImageView.hidden = YES;
|
||||
// self.numberLabel.hidden = YES;
|
||||
// self.headerView.hidden = NO;
|
||||
// self.nameLabel.hidden = NO;
|
||||
//
|
||||
// [self.headerView setHeadIcon:singer.avatar dress:singer.dress];
|
||||
// self.nameLabel.text = singer.nickname;
|
||||
// self.charmBgView.hidden = NO;
|
||||
// self.charmLabel.text = [NSString qx_showHotCountNum:singer.charm.longLongValue];
|
||||
//}
|
||||
|
||||
-(QXSeatHeaderView *)headerView{
|
||||
if (!_headerView) {
|
||||
_headerView = [[QXSeatHeaderView alloc] init];
|
||||
_headerView.hidden = YES;
|
||||
}
|
||||
return _headerView;
|
||||
}
|
||||
|
||||
-(UIImageView *)noUserImageView{
|
||||
if (!_noUserImageView) {
|
||||
UIImage *image = [UIImage imageNamed:@"room_seat_icon"];
|
||||
// image = [image imageByTintColor:QXConfig.themeColor];
|
||||
_noUserImageView = [[UIImageView alloc] initWithImage:image];
|
||||
}
|
||||
return _noUserImageView;
|
||||
}
|
||||
-(UIImageView *)offlineImageView{
|
||||
if (!_offlineImageView) {
|
||||
UIImage *image = [UIImage imageNamed:@"room_user_offline"];
|
||||
// image = [image imageByTintColor:QXConfig.themeColor];
|
||||
_offlineImageView = [[UIImageView alloc] initWithImage:image];
|
||||
_offlineImageView.contentMode = UIViewContentModeScaleToFill;
|
||||
_offlineImageView.hidden = YES;
|
||||
}
|
||||
return _offlineImageView;
|
||||
}
|
||||
-(UIImageView *)lockImageView{
|
||||
if (!_lockImageView) {
|
||||
_lockImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_seat_lock"]];
|
||||
}
|
||||
return _lockImageView;
|
||||
}
|
||||
-(UIImageView *)muteImageView{
|
||||
if (!_muteImageView) {
|
||||
_muteImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_seat_mute"]];
|
||||
}
|
||||
return _muteImageView;
|
||||
}
|
||||
- (QXEffectSvgaView *)micSvgaView {
|
||||
if (!_micSvgaView) {
|
||||
_micSvgaView = [[QXEffectSvgaView alloc] initWithFrame:CGRectZero isAutoPlay:NO];
|
||||
_micSvgaView.hidden = YES;
|
||||
[_micSvgaView loadSVGAPlayerWith:@"mic" inBundle:[NSBundle mainBundle] loop:10000000];
|
||||
__weak typeof(self)weakSelf = self;
|
||||
_micSvgaView.didFinishedDisplay = ^(QXEffectSvgaView * _Nonnull svgaView) {
|
||||
weakSelf.isSeatSpeaking = NO;
|
||||
};
|
||||
}
|
||||
return _micSvgaView;
|
||||
}
|
||||
- (VAPView *)micMp4View {
|
||||
if (!_micMp4View) {
|
||||
_micMp4View = [[VAPView alloc] initWithFrame:CGRectZero];
|
||||
_micMp4View.hwd_enterBackgroundOP = HWDMP4EBOperationTypePauseAndResume;
|
||||
_micMp4View.contentMode = UIViewContentModeScaleAspectFit;
|
||||
_micMp4View.userInteractionEnabled = NO;
|
||||
_micMp4View.backgroundColor = [UIColor clearColor];
|
||||
_micMp4View.hidden = YES;
|
||||
}
|
||||
return _micMp4View;
|
||||
}
|
||||
-(void)destroyViews{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
[self.micMp4View stopHWDMP4];
|
||||
[self.micMp4View removeFromSuperview];
|
||||
self.micMp4View = nil;
|
||||
[self.micSvgaView destroySvga];
|
||||
}
|
||||
@end
|
||||
Reference in New Issue
Block a user