结构调整
This commit is contained in:
61
QXLive/Room(房间)/View/麦位视图/QXRoomSeatContentView.h
Normal file
61
QXLive/Room(房间)/View/麦位视图/QXRoomSeatContentView.h
Normal file
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// QXRoomSeatContentView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/7.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomModel.h"
|
||||
#import "QXSongListModel.h"
|
||||
#import "QXRoomSeatDelegate.h"
|
||||
|
||||
typedef NS_ENUM(NSInteger) {
|
||||
/// 名称名称在下显示魅力
|
||||
QXRoomSeatContentViewTypeNormal = 0,
|
||||
/// 名称在右
|
||||
QXRoomSeatContentViewTypeAuction = 1,
|
||||
/// 交友房
|
||||
QXRoomSeatContentViewTypeFriend
|
||||
}QXRoomSeatContentViewType;
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface QXRoomSeatContentView : UIView
|
||||
@property (nonatomic,strong)NSString *tagString;
|
||||
@property (nonatomic,assign)NSInteger number;
|
||||
@property (nonatomic,strong)QXRoomPitModel *pitModel;
|
||||
@property (nonatomic,assign)BOOL onlyShowHeader;
|
||||
@property (nonatomic,assign) BOOL isSeatSpeaking;
|
||||
|
||||
@property (nonatomic,strong)NSString *is_lock;
|
||||
@property (nonatomic,strong)UIImageView *noUserImageView;
|
||||
/// 是否为拍卖位
|
||||
@property (nonatomic,assign) BOOL isAutionSeat;
|
||||
@property (nonatomic,strong) NSString* numberString;
|
||||
|
||||
@property (nonatomic,assign) BOOL isPK;
|
||||
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
/// 麦位视图类型
|
||||
@property (nonatomic,assign)QXRoomSeatContentViewType type;
|
||||
|
||||
/// 是否展示离线状态 需求暂定二卡八不展示离线状态
|
||||
@property (nonatomic,assign)BOOL noOffLine;
|
||||
|
||||
//@property (nonatomic,strong)QXRoomOwnerModel *userModel ;
|
||||
|
||||
-(void)updateUserCharm:(NSString*)charm;
|
||||
|
||||
- (void)startAudioAnimation ;
|
||||
/// 暂停麦位动画
|
||||
- (void)stopAudioAnimation ;
|
||||
|
||||
-(void)hideCharm;
|
||||
|
||||
-(void)destroyViews;
|
||||
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
537
QXLive/Room(房间)/View/麦位视图/QXRoomSeatContentView.m
Normal file
537
QXLive/Room(房间)/View/麦位视图/QXRoomSeatContentView.m
Normal file
@@ -0,0 +1,537 @@
|
||||
//
|
||||
// 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;
|
||||
|
||||
@property (nonatomic,strong)UIButton *headerBtn;
|
||||
@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 insertSubview:self.micSvgaView belowSubview:self.headerView];
|
||||
[self.micSvgaView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.top.equalTo(self.headerView).offset(-10);
|
||||
make.right.bottom.equalTo(self.headerView).offset(10);
|
||||
}];
|
||||
|
||||
[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);
|
||||
}];
|
||||
|
||||
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);
|
||||
}];
|
||||
|
||||
MJWeakSelf
|
||||
self.charmBgView = [[UIView alloc] init];
|
||||
[self.charmBgView addTapBlock:^(id _Nonnull obj) {
|
||||
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(previewRoomUserCharmListWithUserId:)]) {
|
||||
[weakSelf.delegate previewRoomUserCharmListWithUserId:weakSelf.pitModel.user_id];
|
||||
}
|
||||
}];
|
||||
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.headerBtn = [[UIButton alloc] init];
|
||||
[self.headerBtn addTarget:self action:@selector(headerAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
[self addSubview:self.headerBtn];
|
||||
[self.headerBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.edges.equalTo(self.noUserImageView);
|
||||
}];
|
||||
}
|
||||
|
||||
-(void)headerAction{
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickUserHeaderWithPitModel:seatView:)]) {
|
||||
[self.delegate didClickUserHeaderWithPitModel:self.pitModel seatView:self];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)onlineStatusDidChanged:(NSNotification*)notice{
|
||||
if (self.noOffLine) {
|
||||
return;
|
||||
}
|
||||
NSDictionary *parm = notice.object;
|
||||
NSString *uid = [NSString stringWithFormat:@"%@",[parm objectForKey:@"user_id"]];
|
||||
BOOL isOnline = [[parm objectForKey:@"is_online"] boolValue];
|
||||
[QXGlobal.shareGlobal.offLineDict setObject:[NSNumber numberWithBool:!isOnline] forKey:uid];
|
||||
if ([uid isEqualToString:self.pitModel.user_id]) {
|
||||
if (isOnline) {
|
||||
self.offlineImageView.hidden = YES;
|
||||
}else{
|
||||
self.offlineImageView.hidden = NO;
|
||||
[self stopAudioAnimation];
|
||||
}
|
||||
}
|
||||
QXLOG(@"在线状态%@",QXGlobal.shareGlobal.offLineDict);
|
||||
}
|
||||
-(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.offlineImageView.hidden = YES;
|
||||
[QXGlobal.shareGlobal.offLineDict setObject:[NSNumber numberWithBool:NO] forKey:[NSString stringWithFormat:@"%ld",info.uid]];
|
||||
[self startAudioAnimation];
|
||||
}else{
|
||||
[self stopAudioAnimation];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (self.pitModel.user_id.longLongValue <= 0) {
|
||||
[self stopAudioAnimation];
|
||||
}
|
||||
}
|
||||
-(void)setNoOffLine:(BOOL)noOffLine{
|
||||
_noOffLine = noOffLine;
|
||||
}
|
||||
-(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;
|
||||
case QXRoomSeatContentViewTypeFriend:{
|
||||
self.charmBgView.backgroundColor = RGB16A(0x000000,0.65);
|
||||
// self.charmBgView.hidden = NO;
|
||||
[self.charmBgView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.equalTo(self);
|
||||
make.top.equalTo(self.noUserImageView.mas_bottom).offset(-8);
|
||||
make.height.mas_equalTo(ScaleWidth(15));
|
||||
}];
|
||||
[self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.charmBgView.mas_bottom).offset(0);
|
||||
// make.centerX.equalTo(self.noUserImageView);
|
||||
make.height.mas_equalTo(18);
|
||||
make.left.right.equalTo(self);
|
||||
}];
|
||||
self.nameLabel.textColor = RGB16(0xEFEAFF);
|
||||
self.numberLabel.textColor = RGB16(0xEFEAFF);
|
||||
[self.numberLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.charmBgView.mas_bottom).offset(0);
|
||||
make.centerX.equalTo(self.noUserImageView);
|
||||
make.height.mas_equalTo(18);
|
||||
}];
|
||||
}
|
||||
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) {
|
||||
BOOL is_offline = [[[QXGlobal shareGlobal].offLineDict objectForKey:pitModel.user_id?pitModel.user_id:@"0"] boolValue];
|
||||
if (is_offline) {
|
||||
if (self.noOffLine) {
|
||||
self.offlineImageView.hidden = YES;
|
||||
}else{
|
||||
self.offlineImageView.hidden = NO;
|
||||
}
|
||||
}else{
|
||||
self.offlineImageView.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)updateUserCharm:(NSString *)charm{
|
||||
self.pitModel.charm = charm;
|
||||
self.charmLabel.text = [NSString qx_showHotCountNum:self.pitModel.charm.longLongValue];
|
||||
}
|
||||
-(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];
|
||||
}
|
||||
-(void)stopHWDMP4{
|
||||
[self.headerView stopHWDMP4];
|
||||
}
|
||||
-(void)playHWDMP4{
|
||||
[self.headerView playHWDMP4];
|
||||
}
|
||||
@end
|
||||
40
QXLive/Room(房间)/View/麦位视图/QXRoomSeatDelegate.h
Normal file
40
QXLive/Room(房间)/View/麦位视图/QXRoomSeatDelegate.h
Normal file
@@ -0,0 +1,40 @@
|
||||
//
|
||||
// QXRoomSeatDelegate.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/24.
|
||||
//
|
||||
|
||||
|
||||
#import "QXRoomModel.h"
|
||||
//#import "QXRoomSeatContentView.h"
|
||||
@class QXRoomSeatContentView;
|
||||
@protocol QXRoomSeatDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
//-(void)didClickUserHeaderWithPitModel:(QXRoomPitModel*)pitModel userModel:(id)userModel;
|
||||
|
||||
/// 麦位视图
|
||||
-(void)didClickUserHeaderWithPitModel:(QXRoomPitModel*)pitModel seatView:(QXRoomSeatContentView*)seatView;
|
||||
|
||||
-(void)didClickUserHeaderWithPitModel:(QXRoomPitModel*)pitModel userModel:(id)userModel isPkRoom:(BOOL)isPkRoom pkRoomId:(NSString*)pkRoomId isNoTakeOff:(BOOL)isNoTakeOff;
|
||||
|
||||
-(void)didHugSeatWithPitNumber:(NSString*)pitNumber;
|
||||
|
||||
/// 点击立即竞拍
|
||||
-(void)auctionGiftAction:(QXRoomPitModel *)user auctionId:(NSString*)auctionId;
|
||||
|
||||
/// 送礼
|
||||
-(void)sendGiftWithUser:(QXRoomPitModel *)user;
|
||||
|
||||
|
||||
/// 查看个人信息
|
||||
-(void)previewUserInfoWithUserId:(NSString*)userId;
|
||||
|
||||
/// 助力
|
||||
-(void)friendPowerSendGiftWithUser:(QXRoomPitModel *)user heartId:(NSString*)heartId;
|
||||
|
||||
/// 查看房间内用户魅力
|
||||
-(void)previewRoomUserCharmListWithUserId:(NSString *)userId;
|
||||
|
||||
@end
|
||||
72
QXLive/Room(房间)/View/麦位视图/QXRoomSeatPKView.h
Normal file
72
QXLive/Room(房间)/View/麦位视图/QXRoomSeatPKView.h
Normal file
@@ -0,0 +1,72 @@
|
||||
//
|
||||
// QXRoomSeatPKView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/7/2.
|
||||
//
|
||||
|
||||
#import <UIKit//UIKit.h>
|
||||
#import "QXRoomSeatContentView.h"
|
||||
#import "QXRoomSeatTypeNormalView.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
@class QXPKIconView;
|
||||
@interface QXRoomSeatPKView : UIView
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
@property (nonatomic,strong)QXRoomModel *roomModel;
|
||||
@property (nonatomic,strong)QXRoomModel *pkRoomModel;
|
||||
@property (nonatomic,assign)NSInteger myPitNumber;
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number;
|
||||
/// 清除魅力
|
||||
-(void)clearCharm;
|
||||
/// 清除个人魅力
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId;
|
||||
/// 设置魅力
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model;
|
||||
/// 设置多人魅力
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel*>*)users;
|
||||
/// 设置麦位锁麦状态
|
||||
-(void)setSeatIsLock:(NSString*)isLock pitNumber:(NSString*)pitNumber;
|
||||
/// 房间内换麦
|
||||
-(void)roomSeatExchangedWithFromPitNumber:(NSInteger)fromPitNumber toPitNumber:(NSInteger)toPitNumber userInfo:(QXUserHomeModel*)userInfo;
|
||||
|
||||
/// pk开始
|
||||
-(void)pkStartWithPkEndTimes:(NSString *)pk_end_times pk_id:(NSString*)pk_id;
|
||||
|
||||
-(void)roomPKValueDidChangedWithRoomIdA:(NSString*)room_id_a create_value_a:(NSString*)create_value_a room_id_b:(NSString*)room_id_b receive_value_b:(NSString*)receive_value_b;
|
||||
/// pk结果
|
||||
-(void)pkResultWithIsVictory:(NSInteger)isVictory
|
||||
end_time:(NSString*)end_time
|
||||
victory_name:(NSString*)victory_name
|
||||
victory_cover:(NSString*)victory_cover
|
||||
defeated_name:(NSString*)defeated_name
|
||||
defeated_cover:(NSString*)defeated_cover;
|
||||
/// 房间内用户信息发生变化
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
-(void)destroyViews;
|
||||
@end
|
||||
/// 穿透视图
|
||||
@interface QXPKIconView : UIView
|
||||
@property (nonatomic,strong)UIImageView *pkImageView;
|
||||
@end
|
||||
|
||||
@interface QXRoomSeatPKSubView : UIView
|
||||
@property (nonatomic,strong)UIImageView *bgImageView;
|
||||
@property (nonatomic,strong)UILabel *titleLabel;
|
||||
@property (nonatomic,assign)BOOL isMyRoom;
|
||||
-(instancetype)initWithMyRoom:(BOOL)isMyRoom;
|
||||
|
||||
@end
|
||||
|
||||
@interface QXRoomSeatPKProgress : UIView
|
||||
@property (nonatomic,strong)UILabel* leftTitleLabel;
|
||||
@property (nonatomic,strong)UIView* leftView;
|
||||
|
||||
@property (nonatomic,strong)UILabel* rightTitleLabel;
|
||||
@property (nonatomic,strong)UIView* rightView;
|
||||
|
||||
|
||||
-(void)setLeftProgressWithLeftValue:(NSString*)leftValue rightValue:(NSString*)rightValue;
|
||||
@end
|
||||
NS_ASSUME_NONNULL_END
|
||||
625
QXLive/Room(房间)/View/麦位视图/QXRoomSeatPKView.m
Normal file
625
QXLive/Room(房间)/View/麦位视图/QXRoomSeatPKView.m
Normal file
@@ -0,0 +1,625 @@
|
||||
//
|
||||
// QXRoomSeatPKView.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/7/2.
|
||||
//
|
||||
|
||||
#import "QXRoomSeatPKView.h"
|
||||
#import "UIColor+QX.h"
|
||||
#import "QXRoomPKTimeSetView.h"
|
||||
#import "QXTimer.h"
|
||||
#import "QXMineNetwork.h"
|
||||
#import "QXRoomPKResultView.h"
|
||||
#import "QXRoomMessageManager.h"
|
||||
#import "QXAgoraEngineEx.h"
|
||||
#import "QXAgoraEngine.h"
|
||||
#import "QXAlertView.h"
|
||||
|
||||
@interface QXRoomSeatPKView()<QXRoomSeatDelegate>
|
||||
@property (nonatomic,strong)UIButton *startBtn;
|
||||
@property (nonatomic,strong)UIButton *endBtn;
|
||||
|
||||
@property (nonatomic,strong)UIImageView *topImageView;
|
||||
@property (nonatomic,strong)UIButton *pkTimeBtn;
|
||||
|
||||
@property (nonatomic,strong)UIImageView *leftResult;
|
||||
@property (nonatomic,strong)UIImageView *rightResult;
|
||||
|
||||
@property (nonatomic,strong)UIImageView *bgImageView;
|
||||
@property (nonatomic,strong)UILabel *titleLabel;
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatPKProgress *progressView;
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatPKSubView *leftRoomView;
|
||||
|
||||
@property (nonatomic,strong)QXPKIconView *pkIconView;
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatPKSubView *rightRoomView;
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatTypeNormalView *leftSeatView;
|
||||
@property (nonatomic,strong)QXRoomSeatTypeNormalView *rightSeatView;
|
||||
|
||||
@property (nonatomic,strong)QXRoomPKTimeSetView *timeSetView;
|
||||
@property (nonatomic,strong)QXTimer *timer;
|
||||
@property (nonatomic,assign)long startTime;
|
||||
|
||||
@property (nonatomic,strong)QXRoomPKResultView *resultView;
|
||||
|
||||
@property (nonatomic,strong)UIButton *muteRemoteBtn;
|
||||
|
||||
@property (nonatomic,strong)NSString *pk_userId;
|
||||
|
||||
@property (nonatomic,strong)QXAlertView *alertView;
|
||||
@property (nonatomic,assign)BOOL isDefeat;
|
||||
@end
|
||||
@implementation QXRoomSeatPKView
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
-(void)initSubviews{
|
||||
self.startBtn = [[UIButton alloc] init];
|
||||
self.startBtn.hidden = YES;
|
||||
self.startBtn.backgroundColor = QXConfig.themeColor;
|
||||
[self.startBtn addRoundedCornersWithRadius:12];
|
||||
[self.startBtn setTitle:@"开始" forState:(UIControlStateNormal)];
|
||||
[self.startBtn setTitleColor:QXConfig.btnTextColor forState:(UIControlStateNormal)];
|
||||
[self.startBtn addTarget:self action:@selector(startAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
self.startBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
[self addSubview:self.startBtn];
|
||||
[self.startBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(7);
|
||||
make.width.mas_equalTo(46);
|
||||
make.height.mas_equalTo(24);
|
||||
make.top.equalTo(self);
|
||||
}];
|
||||
|
||||
self.endBtn = [[UIButton alloc] init];
|
||||
self.endBtn.hidden = YES;
|
||||
self.endBtn.backgroundColor = RGB16(0x333333);
|
||||
[self.endBtn addRoundedCornersWithRadius:12];
|
||||
[self.endBtn setTitle:@"结束" forState:(UIControlStateNormal)];
|
||||
[self.endBtn setTitleColor:UIColor.whiteColor forState:(UIControlStateNormal)];
|
||||
self.endBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
[self.endBtn addTarget:self action:@selector(endAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
[self addSubview:self.endBtn];
|
||||
[self.endBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
// [make.left.equalTo(self.startBtn.mas_right).offset(10) priorityHigh];
|
||||
// [make.left.mas_equalTo(7) priorityLow];
|
||||
make.left.equalTo(self.startBtn.mas_right).offset(10);
|
||||
make.width.mas_equalTo(46);
|
||||
make.height.mas_equalTo(24);
|
||||
make.top.equalTo(self);
|
||||
}];
|
||||
|
||||
self.topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_pk_top_bg"]];
|
||||
[self addSubview:self.topImageView];
|
||||
[self.topImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.startBtn.mas_bottom);
|
||||
make.size.mas_equalTo(CGSizeMake(ScaleWidth(122), ScaleWidth(26)));
|
||||
make.centerX.equalTo(self);
|
||||
}];
|
||||
|
||||
self.pkTimeBtn = [[UIButton alloc] init];
|
||||
[self.pkTimeBtn setTitle:@"未开始" forState:(UIControlStateNormal)];
|
||||
self.pkTimeBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
[self.pkTimeBtn setTitleColor:UIColor.whiteColor forState:(UIControlStateNormal)];
|
||||
[self addSubview:self.pkTimeBtn];
|
||||
[self.pkTimeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.top.bottom.equalTo(self.topImageView);
|
||||
}];
|
||||
|
||||
self.leftResult.hidden = YES;
|
||||
[self addSubview:self.leftResult];
|
||||
[self.leftResult mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.equalTo(self.topImageView.mas_left);
|
||||
make.width.mas_equalTo(ScaleWidth(15));
|
||||
make.height.mas_equalTo(ScaleWidth(17));
|
||||
make.centerY.equalTo(self.topImageView);
|
||||
}];
|
||||
|
||||
self.rightResult.hidden = YES;
|
||||
[self addSubview:self.rightResult];
|
||||
[self.rightResult mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.topImageView.mas_right);
|
||||
make.width.mas_equalTo(ScaleWidth(15));
|
||||
make.height.mas_equalTo(ScaleWidth(17));
|
||||
make.centerY.equalTo(self.topImageView);
|
||||
}];
|
||||
|
||||
|
||||
|
||||
self.leftRoomView = [[QXRoomSeatPKSubView alloc] initWithMyRoom:YES];
|
||||
[self addSubview:self.leftRoomView];
|
||||
[self.leftRoomView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self).offset(7);
|
||||
make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2);
|
||||
make.bottom.equalTo(self);
|
||||
make.top.equalTo(self.startBtn.mas_bottom).offset(8);
|
||||
}];
|
||||
|
||||
self.rightRoomView = [[QXRoomSeatPKSubView alloc] initWithMyRoom:NO];
|
||||
[self addSubview:self.rightRoomView];
|
||||
[self.rightRoomView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.equalTo(self).offset(-7);
|
||||
make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2);
|
||||
make.bottom.equalTo(self);
|
||||
make.top.equalTo(self.leftRoomView);
|
||||
}];
|
||||
|
||||
self.progressView = [[QXRoomSeatPKProgress alloc] init];
|
||||
[self.progressView addRoundedCornersWithRadius:ScaleWidth(8)];
|
||||
[self addSubview:self.progressView];
|
||||
[self.progressView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.leftRoomView);
|
||||
make.right.equalTo(self.rightRoomView);
|
||||
make.top.equalTo(self.leftRoomView).offset(18);
|
||||
make.height.mas_equalTo(ScaleWidth(16));
|
||||
}];
|
||||
|
||||
self.pkIconView = [[QXPKIconView alloc] init];
|
||||
[self addSubview:self.pkIconView];
|
||||
[self.pkIconView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(ScaleWidth(72), ScaleWidth(72)));
|
||||
make.centerX.centerY.equalTo(self);
|
||||
}];
|
||||
|
||||
self.leftSeatView = [[QXRoomSeatTypeNormalView alloc] init];
|
||||
self.leftSeatView.isPKMyRoom = YES;
|
||||
self.leftSeatView.delegate = self;
|
||||
[self addSubview:self.leftSeatView];
|
||||
[self.leftSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self).offset(7);
|
||||
make.top.equalTo(self.progressView.mas_bottom);
|
||||
make.bottom.equalTo(self);
|
||||
make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2);
|
||||
}];
|
||||
|
||||
self.rightSeatView = [[QXRoomSeatTypeNormalView alloc] init];
|
||||
self.rightSeatView.isPKOtherRoom = YES;
|
||||
self.rightSeatView.delegate = self;
|
||||
[self addSubview:self.rightSeatView];
|
||||
[self.rightSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.equalTo(self).offset(-7);
|
||||
make.top.equalTo(self.progressView.mas_bottom);
|
||||
make.bottom.equalTo(self);
|
||||
make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2);
|
||||
}];
|
||||
|
||||
self.muteRemoteBtn = [[UIButton alloc] init];
|
||||
[self.muteRemoteBtn setImage:[UIImage imageNamed:@"room_event_mute_audio_sel"] forState:(UIControlStateNormal)];
|
||||
[self.muteRemoteBtn setImage:[UIImage imageNamed:@"room_event_mute_audio_nor"] forState:(UIControlStateSelected)];
|
||||
[self.muteRemoteBtn addTarget:self action:@selector(muteRemoteAction:) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
self.muteRemoteBtn.hidden = YES;
|
||||
[self addSubview:self.muteRemoteBtn];
|
||||
[self.muteRemoteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self.rightRoomView).offset(20+ScaleWidth(50));
|
||||
make.top.equalTo(self.progressView.mas_bottom);
|
||||
make.size.mas_equalTo(CGSizeMake(30, 30));
|
||||
}];
|
||||
}
|
||||
-(void)setRoomModel:(QXRoomModel *)roomModel{
|
||||
_roomModel = roomModel;
|
||||
[self.progressView setLeftProgressWithLeftValue:self.roomModel.pk_info.my_room_value rightValue:self.roomModel.pk_info.pk_room_value];
|
||||
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
|
||||
long long milliseconds = (long long)(timeInterval);
|
||||
self.startTime = self.roomModel.pk_info.pk_end_times.longLongValue - milliseconds;
|
||||
[self startTimerWithPart:roomModel.pk_info.pk_part];;
|
||||
self.leftSeatView.roomModel = roomModel;
|
||||
[self configBtn];
|
||||
if (roomModel.pk_info.my_room_value.longLongValue > roomModel.pk_info.pk_room_value.longLongValue) {
|
||||
self.leftResult.image = [UIImage imageNamed:@"room_pk_victory"];
|
||||
self.rightResult.image = [UIImage imageNamed:@"room_pk_defeated"];
|
||||
}else if (roomModel.pk_info.my_room_value.longLongValue < roomModel.pk_info.pk_room_value.longLongValue) {
|
||||
// 失败
|
||||
self.resultView.type = QXRoomPKResulttTypeDefeated;
|
||||
self.leftResult.image = [UIImage imageNamed:@"room_pk_defeated"];
|
||||
}else{
|
||||
self.leftResult.image = [UIImage imageNamed:@"room_pk_tie"];
|
||||
self.rightResult.image = [UIImage imageNamed:@"room_pk_tie"];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)configBtn{
|
||||
if (self.roomModel.pk_info.pk_part.intValue == 2) {
|
||||
if ([self.roomModel.pk_info.invite_pk_user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id] && self.leftSeatView.myPitNumber == 9) {
|
||||
self.startBtn.hidden = NO;
|
||||
}else{
|
||||
self.startBtn.hidden = YES;
|
||||
}
|
||||
if (self.leftSeatView.myPitNumber == 9) {
|
||||
self.endBtn.hidden = NO;
|
||||
}else{
|
||||
self.endBtn.hidden = YES;
|
||||
}
|
||||
|
||||
}else if (self.roomModel.pk_info.pk_part.intValue == 3) {
|
||||
if (self.leftSeatView.myPitNumber == 9) {
|
||||
self.endBtn.hidden = NO;
|
||||
}else{
|
||||
self.endBtn.hidden = YES;
|
||||
}
|
||||
self.startBtn.hidden = YES;
|
||||
}else if (self.roomModel.pk_info.pk_part.intValue == 4) {
|
||||
if (self.leftSeatView.myPitNumber == 9) {
|
||||
self.endBtn.hidden = NO;
|
||||
}else{
|
||||
self.endBtn.hidden = YES;
|
||||
}
|
||||
self.startBtn.hidden = YES;
|
||||
}
|
||||
if (self.leftSeatView.myPitNumber == 9) {
|
||||
self.muteRemoteBtn.hidden = NO;
|
||||
}else{
|
||||
self.muteRemoteBtn.hidden = YES;
|
||||
}
|
||||
}
|
||||
-(void)setPkRoomModel:(QXRoomModel *)pkRoomModel{
|
||||
_pkRoomModel = pkRoomModel;
|
||||
for (QXRoomPitModel*model in pkRoomModel.room_info.pit_list) {
|
||||
if (model.pit_number.intValue == 9) {
|
||||
self.pk_userId = model.user_id;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
self.rightSeatView.roomModel = pkRoomModel;
|
||||
}
|
||||
-(void)setMyPitNumber:(NSInteger)myPitNumber{
|
||||
_myPitNumber = myPitNumber;
|
||||
self.leftSeatView.myPitNumber = myPitNumber;
|
||||
}
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number{
|
||||
if ([user.user_id isEqualToString:[QXGlobal shareGlobal].loginModel.user_id]) {
|
||||
if (isUpSeat) {
|
||||
self.myPitNumber = pit_number;
|
||||
if (self.myPitNumber == 9) {
|
||||
self.muteRemoteBtn.hidden = NO;
|
||||
}
|
||||
}else{
|
||||
self.myPitNumber = -1;
|
||||
self.muteRemoteBtn.hidden = YES;
|
||||
}
|
||||
}
|
||||
[self.leftSeatView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number];
|
||||
}
|
||||
-(void)roomSeatExchangedWithFromPitNumber:(NSInteger)fromPitNumber toPitNumber:(NSInteger)toPitNumber userInfo:(QXUserHomeModel*)userInfo{
|
||||
[self.leftSeatView roomSeatExchangedWithFromPitNumber:fromPitNumber toPitNumber:toPitNumber userInfo:userInfo];
|
||||
}
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user{
|
||||
[self.leftSeatView roomUserInfoDidChanged:user];
|
||||
}
|
||||
-(void)clearCharm{
|
||||
[self.leftSeatView clearCharm];
|
||||
}
|
||||
-(void)playHWDMP4{
|
||||
[self.leftSeatView playHWDMP4];
|
||||
}
|
||||
-(void)stopHWDMP4{
|
||||
[self.leftSeatView stopHWDMP4];
|
||||
}
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId{
|
||||
[self.leftSeatView roomClearUserCharmWithUserId:userId];
|
||||
}
|
||||
-(void)setSeatIsLock:(NSString *)isLock pitNumber:(NSString *)pitNumber{
|
||||
[self.leftSeatView setSeatIsLock:isLock pitNumber:pitNumber];
|
||||
}
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model{
|
||||
[self.leftSeatView setSeatCharmWithUser:model];
|
||||
}
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel *> *)users{
|
||||
[self.leftSeatView setSeatCharmWithUsers:users];
|
||||
}
|
||||
|
||||
-(void)startAction{
|
||||
self.timeSetView.pkId = self.roomModel.pk_info.pk_id;
|
||||
[self.timeSetView showInView:self.viewController.view];
|
||||
}
|
||||
-(void)endAction{
|
||||
MJWeakSelf
|
||||
if (self.roomModel.pk_info.pk_part.intValue == 4 && self.isDefeat) {
|
||||
self.alertView.message = @"惩罚阶段结束PK需对方主持同意,是否发起结束";
|
||||
}else{
|
||||
self.alertView.message = @"是否提前结束本场PK";
|
||||
}
|
||||
self.alertView.commitBlock = ^{
|
||||
[QXMineNetwork roomPkEndWithPk_id:weakSelf.roomModel.pk_info.pk_id type:@"3" user_id:[QXGlobal shareGlobal].loginModel.user_id successBlock:^(NSDictionary * _Nonnull dict) {
|
||||
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
showToast(msg);
|
||||
}];
|
||||
};
|
||||
[[QXGlobal shareGlobal] showView:self.alertView controller:self.viewController.navigationController popType:(PopViewTypePopFromCenter) tapDismiss:NO finishBlock:^{
|
||||
|
||||
}];
|
||||
}
|
||||
-(void)muteRemoteAction:(UIButton*)sender{
|
||||
// [[QXAgoraEngineEx sharedEngine] muteRemoteEXAudioStream:sender.selected];
|
||||
// return;
|
||||
sender.selected = !sender.selected;
|
||||
NSDictionary *dict = @{
|
||||
@"is_mute":[NSNumber numberWithInteger:sender.selected?1:0],
|
||||
};
|
||||
NSString *jsonStr = [dict jsonStringEncoded];
|
||||
[[QXRoomMessageManager shared] sendC2CMessage:jsonStr messageType:QXRoomMessageTypeMuteRemoteAudio userId:self.pk_userId];
|
||||
[[QXAgoraEngineEx sharedEngine] muteRemoteEXAudioStream:sender.selected];
|
||||
}
|
||||
|
||||
-(void)didClickUserHeaderWithPitModel:(QXRoomPitModel *)pitModel userModel:(id)userModel isPkRoom:(BOOL)isPkRoom pkRoomId:(NSString *)pkRoomId isNoTakeOff:(BOOL)isNoTakeOff{
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickUserHeaderWithPitModel:userModel:isPkRoom:pkRoomId:isNoTakeOff:)]) {
|
||||
[self.delegate didClickUserHeaderWithPitModel:pitModel userModel:nil isPkRoom:isPkRoom pkRoomId:pkRoomId isNoTakeOff:isNoTakeOff];
|
||||
}
|
||||
}
|
||||
-(void)didHugSeatWithPitNumber:(NSString *)pitNumber{
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didHugSeatWithPitNumber:)]) {
|
||||
[self.delegate didHugSeatWithPitNumber:pitNumber];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)pkStartWithPkEndTimes:(NSString *)pk_end_times pk_id:(nonnull NSString *)pk_id{
|
||||
self.roomModel.pk_info.pk_id = pk_id;
|
||||
self.roomModel.pk_info.pk_part = @"3";
|
||||
// [self.pkTimeBtn setTitle:@"未开始" forState:(UIControlStateNormal)];
|
||||
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
|
||||
long long milliseconds = (long long)(timeInterval);
|
||||
self.startTime = pk_end_times.longLongValue - milliseconds;
|
||||
[self startTimerWithPart:@"3"];
|
||||
[self configBtn];
|
||||
}
|
||||
-(void)roomPKValueDidChangedWithRoomIdA:(NSString *)room_id_a create_value_a:(NSString *)create_value_a room_id_b:(NSString *)room_id_b receive_value_b:(NSString *)receive_value_b{
|
||||
if ([room_id_a isEqualToString:self.roomModel.room_info.room_id]) {
|
||||
self.roomModel.pk_info.my_room_value = create_value_a;
|
||||
self.roomModel.pk_info.pk_room_value = receive_value_b;
|
||||
[self.progressView setLeftProgressWithLeftValue:self.roomModel.pk_info.my_room_value rightValue:self.roomModel.pk_info.pk_room_value];
|
||||
}else{
|
||||
self.roomModel.pk_info.my_room_value = receive_value_b;
|
||||
self.roomModel.pk_info.pk_room_value = create_value_a;
|
||||
[self.progressView setLeftProgressWithLeftValue:self.roomModel.pk_info.my_room_value rightValue:self.roomModel.pk_info.pk_room_value];
|
||||
}
|
||||
}
|
||||
/// pk结果
|
||||
-(void)pkResultWithIsVictory:(NSInteger)isVictory
|
||||
end_time:(NSString*)end_time
|
||||
victory_name:(NSString*)victory_name
|
||||
victory_cover:(NSString*)victory_cover
|
||||
defeated_name:(NSString*)defeated_name
|
||||
defeated_cover:(NSString*)defeated_cover{
|
||||
self.leftResult.hidden = NO;
|
||||
self.rightResult.hidden = NO;
|
||||
if (isVictory == 1) {
|
||||
// 胜利
|
||||
self.resultView.type = QXRoomPKResulttTypeVictory;
|
||||
self.leftResult.image = [UIImage imageNamed:@"room_pk_victory"];
|
||||
self.rightResult.image = [UIImage imageNamed:@"room_pk_defeated"];
|
||||
}else if (isVictory == 0){
|
||||
// 失败
|
||||
self.resultView.type = QXRoomPKResulttTypeDefeated;
|
||||
self.leftResult.image = [UIImage imageNamed:@"room_pk_defeated"];
|
||||
self.rightResult.image = [UIImage imageNamed:@"room_pk_victory"];
|
||||
self.isDefeat = YES;
|
||||
}else{
|
||||
self.leftResult.image = [UIImage imageNamed:@"room_pk_tie"];
|
||||
self.rightResult.image = [UIImage imageNamed:@"room_pk_tie"];
|
||||
self.resultView.type = QXRoomPKResulttTypeTie;
|
||||
}
|
||||
[self.resultView setResultWithVictory_name:victory_name victory_cover:victory_cover defeated_name:defeated_name defeated_cover:defeated_cover];
|
||||
[self.resultView showInView:self.viewController.view];
|
||||
self.roomModel.pk_info.pk_part = @"4";
|
||||
self.roomModel.pk_info.pk_end_times = end_time;
|
||||
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
|
||||
long long milliseconds = (long long)(timeInterval);
|
||||
self.startTime = end_time.longLongValue - milliseconds;
|
||||
[self startTimerWithPart:@"4"];
|
||||
}
|
||||
|
||||
-(void)startTimerWithPart:(NSString*)part{
|
||||
__block NSString *str = @"";
|
||||
if (part.intValue == 2) {
|
||||
str = @"等待开始";
|
||||
}else if (part.intValue == 3){
|
||||
str = @"进行中";
|
||||
}else if (part.intValue == 4){
|
||||
str = @"惩罚时间";
|
||||
}
|
||||
if (_timer) {
|
||||
[_timer invalidate];
|
||||
_timer = nil;
|
||||
}
|
||||
MJWeakSelf
|
||||
_timer = [QXTimer scheduledTimerWithTimeInterval:1 repeats:YES queue:dispatch_get_main_queue() block:^{
|
||||
weakSelf.startTime--;
|
||||
if (weakSelf.startTime <= 0) {
|
||||
[weakSelf endTimer];
|
||||
}else{
|
||||
[self.pkTimeBtn setTitle:[NSString stringWithFormat:@"%@ %02ld:%02ld",str,weakSelf.startTime/60,weakSelf.startTime%60] forState:(UIControlStateNormal)];
|
||||
}
|
||||
}];
|
||||
}
|
||||
-(void)endTimer{
|
||||
if (_timer) {
|
||||
[self->_timer invalidate];
|
||||
self->_timer = nil;
|
||||
[self.pkTimeBtn setTitle:@"00:00" forState:(UIControlStateNormal)];
|
||||
}
|
||||
}
|
||||
-(void)destroyViews{
|
||||
[self.leftSeatView destroyViews];
|
||||
[self.rightSeatView destroyViews];
|
||||
}
|
||||
-(QXRoomPKTimeSetView *)timeSetView{
|
||||
if (!_timeSetView) {
|
||||
_timeSetView = [[QXRoomPKTimeSetView alloc] init];
|
||||
}
|
||||
return _timeSetView;
|
||||
}
|
||||
-(QXRoomPKResultView *)resultView{
|
||||
if (!_resultView ) {
|
||||
_resultView = [[QXRoomPKResultView alloc] initWithType:(QXRoomPKResulttTypeTie)];
|
||||
}
|
||||
return _resultView;
|
||||
}
|
||||
-(UIImageView *)leftResult{
|
||||
if (!_leftResult) {
|
||||
_leftResult = [[UIImageView alloc] init];
|
||||
}
|
||||
return _leftResult;
|
||||
}
|
||||
-(UIImageView *)rightResult{
|
||||
if (!_rightResult) {
|
||||
_rightResult = [[UIImageView alloc] init];
|
||||
}
|
||||
return _rightResult;
|
||||
}
|
||||
-(QXAlertView *)alertView{
|
||||
if (!_alertView) {
|
||||
_alertView = [[QXAlertView alloc] initWithFrame:CGRectMake(0, 0, ScaleWidth(300), ScaleWidth(175))];
|
||||
}
|
||||
return _alertView;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation QXPKIconView
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
-(void)initSubviews{
|
||||
self.pkImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_pk_icon"]];
|
||||
[self addSubview:self.pkImageView];
|
||||
[self.pkImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.bottom.right.left.equalTo(self);
|
||||
}];
|
||||
}
|
||||
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
|
||||
UIView *hitView= [super hitTest:point withEvent:event];
|
||||
if (hitView== self)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
return hitView;
|
||||
}
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
@implementation QXRoomSeatPKSubView
|
||||
-(instancetype)initWithMyRoom:(BOOL)isMyRoom{
|
||||
if (self = [super init]) {
|
||||
_isMyRoom = isMyRoom;
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
-(void)initSubviews{
|
||||
self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.isMyRoom?@"room_pk_left_bg":@"room_pk_right_bg"]];
|
||||
self.bgImageView.contentMode = UIViewContentModeScaleToFill;
|
||||
[self addSubview:self.bgImageView];
|
||||
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.bottom.left.right.equalTo(self);
|
||||
}];
|
||||
|
||||
self.titleLabel = [[UILabel alloc] init];
|
||||
self.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
self.titleLabel.textColor = UIColor.whiteColor;
|
||||
|
||||
[self addSubview:self.titleLabel];
|
||||
|
||||
|
||||
if (self.isMyRoom) {
|
||||
self.titleLabel.text = @"我方";
|
||||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self).offset(6);
|
||||
make.top.equalTo(self).offset(2);
|
||||
}];
|
||||
}else{
|
||||
|
||||
self.titleLabel.text = @"对方";
|
||||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.equalTo(self).offset(-6);
|
||||
make.top.equalTo(self).offset(2);
|
||||
}];
|
||||
}
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
@implementation QXRoomSeatPKProgress
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
-(void)initSubviews{
|
||||
self.leftView = [[UIView alloc] init];
|
||||
self.leftView.backgroundColor = [UIColor sh_getColorOfPercent:0.5 between:RGB16(0x72C1F8) and:RGB16(0x6785F6)];
|
||||
[self addSubview:self.leftView];
|
||||
[self.leftView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self);
|
||||
make.top.bottom.equalTo(self);
|
||||
make.width.equalTo(self.mas_width).multipliedBy(0.5);
|
||||
}];
|
||||
|
||||
|
||||
self.rightView = [[UIView alloc] init];
|
||||
self.rightView.backgroundColor = [UIColor sh_getColorOfPercent:0.5 between:RGB16(0x3F1D71) and:RGB16(0x3F1D73)];
|
||||
[self addSubview:self.rightView];
|
||||
[self.rightView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.leftView.mas_right);
|
||||
make.top.bottom.equalTo(self);
|
||||
make.right.equalTo(self);
|
||||
}];
|
||||
|
||||
|
||||
self.leftTitleLabel = [[UILabel alloc] init];
|
||||
self.leftTitleLabel.font = [UIFont systemFontOfSize:12];
|
||||
self.leftTitleLabel.textColor = UIColor.whiteColor;
|
||||
self.leftTitleLabel.text = @"0";
|
||||
[self addSubview:self.leftTitleLabel];
|
||||
[self.leftTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self).offset(6);
|
||||
make.top.bottom.equalTo(self);
|
||||
}];
|
||||
|
||||
self.rightTitleLabel = [[UILabel alloc] init];
|
||||
self.rightTitleLabel.font = [UIFont systemFontOfSize:12];
|
||||
self.rightTitleLabel.textColor = UIColor.whiteColor;
|
||||
self.rightTitleLabel.text = @"0";
|
||||
[self addSubview:self.rightTitleLabel];
|
||||
[self.rightTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.equalTo(self).offset(-6);
|
||||
make.top.bottom.equalTo(self);
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
-(void)setLeftProgressWithLeftValue:(NSString *)leftValue rightValue:(NSString *)rightValue{
|
||||
self.leftTitleLabel.text = leftValue;
|
||||
self.rightTitleLabel.text = rightValue;
|
||||
if (leftValue.longLongValue==0 && rightValue.longLongValue==0) {
|
||||
return;
|
||||
}
|
||||
CGFloat ratio = (double)leftValue.longLongValue/(leftValue.longLongValue + rightValue.longLongValue);
|
||||
[UIView animateWithDuration:0.2 animations:^{
|
||||
[self.leftView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self);
|
||||
make.top.bottom.equalTo(self);
|
||||
make.width.equalTo(self.mas_width).multipliedBy(ratio);
|
||||
}];
|
||||
}];
|
||||
}
|
||||
@end
|
||||
72
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeAuctionView.h
Normal file
72
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeAuctionView.h
Normal file
@@ -0,0 +1,72 @@
|
||||
//
|
||||
// QXRoomSeatTypeAuctionView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/23.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomSeatContentView.h"
|
||||
#import "QXRoomSeatDelegate.h"
|
||||
#import "QXUserModel.h"
|
||||
#import "QXSelectAuctionInfoView.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
@interface QXRoomSeatTypeAuctionView : UIView
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
@property (nonatomic,strong)QXRoomModel *roomModel;
|
||||
@property (nonatomic,assign)NSInteger myPitNumber;
|
||||
@property (nonatomic,strong)QXSelectAuctionInfoView *auctionInfoView;
|
||||
|
||||
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number;
|
||||
/// 拍卖者上麦
|
||||
-(void)didAuctiontUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat;
|
||||
/// 开始
|
||||
-(void)auctionStartOrEndIsStart:(BOOL)isStart user:(QXRoomAuctionUser *)user getUser:(QXRoomAuctionUser *)getUser;
|
||||
/// 竞拍列表发生变化
|
||||
-(void)auctionListDidChanged:(NSArray<QXRoomPitModel*> *)list;
|
||||
/// 拍卖时间发生延时
|
||||
-(void)auctionDelayTimeWithEndTime:(NSString *)endTime;
|
||||
|
||||
/// 拍卖类型发生变化
|
||||
-(void)auctionTypeDidChanged:(NSString *)type;
|
||||
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model;
|
||||
/// 设置多人魅力
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel*>*)users;
|
||||
/// 清除魅力
|
||||
-(void)clearCharm;
|
||||
/// 清除个人魅力
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId;
|
||||
/// 房间内用户信息发生变化
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
-(void)destroyViews;
|
||||
@end
|
||||
|
||||
|
||||
@interface QXRoomAuctionSeatView : UIView
|
||||
@property (nonatomic,strong)UIView* bgView;
|
||||
@property (nonatomic,strong)UIImageView* bgImageView;
|
||||
@property (nonatomic,strong)UIImageView* rankView;
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *seatView;
|
||||
/// 人气
|
||||
@property (nonatomic,strong)UIView *auctionCharmView;
|
||||
@property (nonatomic,strong)UIImageView *auctionCharmBgImageView;
|
||||
@property (nonatomic,strong)UILabel *charmLabel;
|
||||
|
||||
@property (nonatomic,strong)QXRoomPitModel *pitModel;
|
||||
-(void)resetViews;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface QXRoomAuctionPriceView : UIView
|
||||
|
||||
@property (nonatomic,strong)UIImageView* imageView;
|
||||
@property (nonatomic,strong)UILabel* titleLabel;
|
||||
|
||||
@end
|
||||
NS_ASSUME_NONNULL_END
|
||||
1327
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeAuctionView.m
Normal file
1327
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeAuctionView.m
Normal file
File diff suppressed because it is too large
Load Diff
25
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeCabinView.h
Normal file
25
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeCabinView.h
Normal file
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// QXRoomSeatTypeCabinView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/7/1.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomModel.h"
|
||||
#import "QXRoomSeatDelegate.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface QXRoomSeatTypeCabinView : UIView
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
@property (nonatomic,strong)QXRoomModel *roomModel;
|
||||
|
||||
-(void)cabinRoomHotValueDidChanged:(NSString*)hot_value;
|
||||
-(void)friendCabinRoomTimeDelayWithTime:(NSString*)end_time;
|
||||
-(void)friendCabinRoomIsQuit;
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
-(void)destroyViews;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
373
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeCabinView.m
Normal file
373
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeCabinView.m
Normal file
@@ -0,0 +1,373 @@
|
||||
//
|
||||
// QXRoomSeatTypeCabinView.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/7/1.
|
||||
//
|
||||
|
||||
#import "QXRoomSeatTypeCabinView.h"
|
||||
#import "QXRoomSeatContentView.h"
|
||||
#import "QXTimer.h"
|
||||
#import "QXAgoraEngine.h"
|
||||
|
||||
@interface QXRoomSeatTypeCabinView()
|
||||
//倒计时
|
||||
@property (nonatomic,strong)UIImageView *timeDownBgView;
|
||||
@property (nonatomic,strong)UILabel *timeDownLabel;
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *leftSeatView;
|
||||
|
||||
@property (nonatomic,strong)UIImageView *bgImageView;
|
||||
|
||||
@property (nonatomic,strong)UIImageView *heartCenterImageView;
|
||||
@property (nonatomic,strong)UILabel *numberLabel;
|
||||
|
||||
@property (nonatomic,strong)UIButton *giftBtn;
|
||||
@property (nonatomic,strong)UIButton *micBtn;
|
||||
@property (nonatomic,strong)UIButton *movieBtn;
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *rightSeatView;
|
||||
|
||||
|
||||
|
||||
@property (nonatomic,strong)QXTimer *timer;
|
||||
@property (nonatomic,assign)long startTime;
|
||||
|
||||
/// 退出房间按钮
|
||||
@property (nonatomic,strong) UIButton *closeBtn;
|
||||
///
|
||||
@property (nonatomic,strong) UILabel *titleLabel;
|
||||
|
||||
@end
|
||||
|
||||
@implementation QXRoomSeatTypeCabinView
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
-(void)initSubviews{
|
||||
self.titleLabel = [[UILabel alloc] init];
|
||||
self.titleLabel.text = @"房间名称";
|
||||
self.titleLabel.font = [UIFont systemFontOfSize:14];
|
||||
self.titleLabel.textColor = [UIColor whiteColor];
|
||||
[self addSubview:self.titleLabel];
|
||||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(2);
|
||||
make.left.mas_equalTo(16);
|
||||
make.height.mas_equalTo(ScaleWidth(30));
|
||||
}];
|
||||
|
||||
self.closeBtn = [[UIButton alloc] init];
|
||||
[self.closeBtn addTarget:self action:@selector(closeAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
[self.closeBtn setImage:[UIImage imageNamed:@"room_close"] forState:(UIControlStateNormal)];
|
||||
[self addSubview:self.closeBtn];
|
||||
[self.closeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.width.height.mas_equalTo(ScaleWidth(40));
|
||||
make.right.mas_equalTo(-5);
|
||||
make.centerY.equalTo(self.titleLabel);
|
||||
}];
|
||||
|
||||
self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_friend_cabin_bg"]];
|
||||
self.bgImageView.contentMode = UIViewContentModeScaleToFill;
|
||||
[self addSubview:self.bgImageView];
|
||||
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.top.equalTo(self);
|
||||
make.height.mas_equalTo(ScaleWidth(330));
|
||||
}];
|
||||
|
||||
self.heartCenterImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_cabin_heart"]];
|
||||
[self addSubview:self.heartCenterImageView];
|
||||
[self.heartCenterImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.equalTo(self.bgImageView);
|
||||
make.centerY.equalTo(self.bgImageView);
|
||||
make.height.mas_equalTo(ScaleWidth(80));
|
||||
make.width.mas_equalTo(ScaleWidth(160));
|
||||
}];
|
||||
|
||||
self.numberLabel = [[UILabel alloc] init];
|
||||
self.numberLabel.text = @"0";
|
||||
self.numberLabel.textAlignment = NSTextAlignmentCenter;
|
||||
self.numberLabel.textColor = [UIColor colorWithHexString:@"#ffffff"];
|
||||
self.numberLabel.font = [UIFont fontWithName:@"DIN Alternate" size:18];
|
||||
[self addSubview:self.numberLabel];
|
||||
[self.numberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.equalTo(self.heartCenterImageView).offset(-5);
|
||||
make.centerX.equalTo(self.heartCenterImageView);
|
||||
}];
|
||||
|
||||
self.leftSeatView = [[QXRoomSeatContentView alloc] init];
|
||||
[self addSubview:self.leftSeatView];
|
||||
[self.leftSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.equalTo(self.heartCenterImageView.mas_left);
|
||||
make.width.mas_equalTo(ScaleWidth(75));
|
||||
make.height.mas_equalTo(ScaleWidth(75)+25);
|
||||
make.top.equalTo(self.heartCenterImageView).offset(-7);
|
||||
}];
|
||||
|
||||
self.rightSeatView = [[QXRoomSeatContentView alloc] init];
|
||||
[self addSubview:self.rightSeatView];
|
||||
[self.rightSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.heartCenterImageView.mas_right);
|
||||
make.width.mas_equalTo(ScaleWidth(75));
|
||||
make.height.mas_equalTo(ScaleWidth(75)+25);
|
||||
make.top.equalTo(self.leftSeatView);
|
||||
}];
|
||||
|
||||
self.timeDownLabel = [[UILabel alloc] initWithFrame:self.timeDownBgView.frame];
|
||||
self.timeDownLabel.textColor = [UIColor colorWithHexString:@"#ffffff"];
|
||||
self.timeDownLabel.font = [UIFont systemFontOfSize:12];
|
||||
self.timeDownLabel.text = @"到期时间:00:00:00";
|
||||
self.timeDownLabel.textAlignment = NSTextAlignmentCenter;
|
||||
[self addSubview:self.timeDownLabel];
|
||||
[self.timeDownLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.equalTo(self);
|
||||
make.top.equalTo(self.heartCenterImageView.mas_bottom).offset(21);
|
||||
make.height.mas_equalTo(24);
|
||||
}];
|
||||
|
||||
self.timeDownBgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_cabin_timedown_bg"]];
|
||||
self.timeDownBgView.contentMode = UIViewContentModeScaleToFill;
|
||||
[self insertSubview:self.timeDownBgView belowSubview:self.timeDownLabel];
|
||||
[self.timeDownBgView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.edges.equalTo(self.timeDownLabel);
|
||||
}];
|
||||
|
||||
|
||||
|
||||
|
||||
CGFloat margin = (SCREEN_WIDTH-88*3)/4;
|
||||
self.micBtn = [[UIButton alloc] init];
|
||||
[self.micBtn setImage:[UIImage imageNamed:@"room_cabin_open"] forState:(UIControlStateNormal)];
|
||||
[self.micBtn setImage:[UIImage imageNamed:@"room_cabin_close"] forState:(UIControlStateSelected)];
|
||||
[self.micBtn addTarget:self action:@selector(micAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
[self addSubview:self.micBtn];
|
||||
[self.micBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.mas_equalTo(0);
|
||||
make.left.mas_equalTo(margin);
|
||||
make.width.mas_equalTo(88);
|
||||
make.height.mas_equalTo(108);
|
||||
}];
|
||||
|
||||
|
||||
self.giftBtn = [[UIButton alloc] init];
|
||||
[self.giftBtn setImage:[UIImage imageNamed:@"room_cabin_gift"] forState:(UIControlStateNormal)];
|
||||
[self.giftBtn addTarget:self action:@selector(giftAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
[self addSubview:self.giftBtn];
|
||||
[self.giftBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.equalTo(self.micBtn);
|
||||
make.left.equalTo(self.micBtn.mas_right).offset(margin);
|
||||
make.width.mas_equalTo(88);
|
||||
make.height.mas_equalTo(108);
|
||||
}];
|
||||
|
||||
|
||||
self.movieBtn = [[UIButton alloc] init];
|
||||
[self.movieBtn setImage:[UIImage imageNamed:@"room_cabin_movie"] forState:(UIControlStateNormal)];
|
||||
[self.movieBtn addTarget:self action:@selector(movieAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
[self addSubview:self.movieBtn];
|
||||
[self.movieBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.equalTo(self.giftBtn.mas_right).offset(margin);
|
||||
make.bottom.equalTo(self.micBtn);
|
||||
make.width.mas_equalTo(88);
|
||||
make.height.mas_equalTo(108);
|
||||
}];
|
||||
// [[QXAgoraEngine sharedEngine].agoraKit muteAllRemoteVideoStreams:NO];
|
||||
// [[QXAgoraEngine sharedEngine] startPreViewWithUid:54 view:self];
|
||||
}
|
||||
-(void)setRoomModel:(QXRoomModel *)roomModel{
|
||||
_roomModel = roomModel;
|
||||
QXRoomPitModel *pit1 = [[QXRoomPitModel alloc] init];
|
||||
QXRoomPitModel *pit2 = [[QXRoomPitModel alloc] init];;
|
||||
if ([roomModel.cp_user.user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) {
|
||||
pit1.user_id = roomModel.cp_user.user_id;
|
||||
pit1.nickname = roomModel.cp_user.nickname;
|
||||
pit1.dress = roomModel.cp_user.dress;
|
||||
pit1.avatar = roomModel.cp_user.avatar;
|
||||
|
||||
pit2.user_id = roomModel.cp_user.user_id1;
|
||||
pit2.nickname = roomModel.cp_user.nickname1;
|
||||
pit2.dress = roomModel.cp_user.dress1;
|
||||
pit2.avatar = roomModel.cp_user.avatar1;
|
||||
}else{
|
||||
pit2.user_id = roomModel.cp_user.user_id;
|
||||
pit2.nickname = roomModel.cp_user.nickname;
|
||||
pit2.dress = roomModel.cp_user.dress;
|
||||
pit2.avatar = roomModel.cp_user.avatar;
|
||||
|
||||
pit1.user_id = roomModel.cp_user.user_id1;
|
||||
pit1.nickname = roomModel.cp_user.nickname1;
|
||||
pit1.dress = roomModel.cp_user.dress1;
|
||||
pit1.avatar = roomModel.cp_user.avatar1;
|
||||
}
|
||||
self.leftSeatView.pitModel = pit1;
|
||||
self.rightSeatView.pitModel = pit2;
|
||||
|
||||
[self.leftSeatView hideCharm];
|
||||
[self.rightSeatView hideCharm];
|
||||
|
||||
self.titleLabel.text = self.roomModel.room_info.room_name;
|
||||
self.numberLabel.text = self.roomModel.room_info.hot_value;
|
||||
|
||||
if ([self.roomModel.room_info.label_id isEqualToString:@"5"]) {
|
||||
/// 交友房私密小屋
|
||||
[self startTimer];
|
||||
}else{
|
||||
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
|
||||
long long milliseconds = (long long)(timeInterval);
|
||||
long long time = roomModel.cp_user.time_day.longLongValue - milliseconds;
|
||||
self.timeDownLabel.text = [NSString stringWithFormat:@"到期时间:%@",[NSString getTimeWithSecond:time]];
|
||||
}
|
||||
if (![roomModel.room_owner.user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) {
|
||||
self.movieBtn.hidden = YES;
|
||||
CGFloat margin = (SCREEN_WIDTH-88*2)/3;
|
||||
[self.micBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.mas_equalTo(0);
|
||||
make.left.mas_equalTo(margin);
|
||||
make.width.mas_equalTo(88);
|
||||
make.height.mas_equalTo(108);
|
||||
}];
|
||||
|
||||
|
||||
[self.giftBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.equalTo(self.micBtn);
|
||||
make.left.equalTo(self.micBtn.mas_right).offset(margin);
|
||||
make.width.mas_equalTo(88);
|
||||
make.height.mas_equalTo(108);
|
||||
}];
|
||||
}
|
||||
|
||||
}
|
||||
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
|
||||
[self.viewController.view endEditing:YES];
|
||||
}
|
||||
-(void)giftAction{
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(sendGiftWithUser:)]) {
|
||||
[self.delegate sendGiftWithUser:self.rightSeatView.pitModel];
|
||||
}
|
||||
}
|
||||
-(void)micAction{
|
||||
self.micBtn.selected = !self.micBtn.selected;
|
||||
[[QXAgoraEngine sharedEngine] enableAudio:self.micBtn.selected];
|
||||
if (self.micBtn.isSelected) {
|
||||
[[QXAgoraEngine sharedEngine] setClientRoleBroadcaster:YES];
|
||||
[[QXAgoraEngine sharedEngine] muteLocalAudioStream:NO];
|
||||
}else{
|
||||
|
||||
}
|
||||
}
|
||||
-(void)movieAction{
|
||||
// 开启屏幕采集
|
||||
[[QXAgoraEngine sharedEngine] startScreenCapture];
|
||||
}
|
||||
-(void)startTimer{
|
||||
MJWeakSelf
|
||||
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
|
||||
// 将秒转换为毫秒
|
||||
long long milliseconds = (long long)(timeInterval);
|
||||
self.startTime = self.roomModel.cp_user.time_day.longLongValue - milliseconds;
|
||||
if (self.startTime <= 0) {
|
||||
//时间错误不进行倒计时
|
||||
self.timeDownLabel.text = @"倒计时:00:00:00";
|
||||
return;
|
||||
}
|
||||
[self stopTimer];
|
||||
_timer = [QXTimer scheduledTimerWithTimeInterval:1 repeats:YES queue:dispatch_get_main_queue() block:^{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
weakSelf.startTime--;
|
||||
NSInteger hour = self.startTime/60/60;
|
||||
NSInteger min = (self.startTime % 3600) / 60;
|
||||
NSInteger second = self.startTime % 60;
|
||||
weakSelf.timeDownLabel.text = [NSString stringWithFormat:@"倒计时:%02ld:%02ld:%02ld",hour,min,(long)second];
|
||||
if (weakSelf.startTime<=0) {
|
||||
[weakSelf stopTimer];
|
||||
weakSelf.timeDownLabel.text = @"00:00:00";
|
||||
}
|
||||
});
|
||||
}];
|
||||
}
|
||||
-(void)stopTimer{
|
||||
if (_timer) {
|
||||
[self->_timer invalidate];
|
||||
self->_timer= nil;
|
||||
}
|
||||
}
|
||||
-(void)cabinRoomHotValueDidChanged:(NSString *)hot_value{
|
||||
self.roomModel.room_info.hot_value = hot_value;
|
||||
self.numberLabel.text = self.roomModel.room_info.hot_value;
|
||||
}
|
||||
-(void)friendCabinRoomTimeDelayWithTime:(NSString*)end_time{
|
||||
self.roomModel.cp_user.time_day = end_time;
|
||||
[self startTimer];
|
||||
}
|
||||
-(void)closeAction{
|
||||
MJWeakSelf
|
||||
UIAlertController *al = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:(UIAlertControllerStyleActionSheet)];
|
||||
// [al addAction:[UIAlertAction actionWithTitle:@"最小化房间" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
|
||||
// [weakSelf miniRoom];
|
||||
// [[QXGlobal shareGlobal] miniRoomWithRoomId:weakSelf.roomModel.room_info.room_id roomCover:weakSelf.roomModel.room_info.room_cover];
|
||||
// }]];
|
||||
[al addAction:[UIAlertAction actionWithTitle:@"退出房间" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
|
||||
[weakSelf leaveRoom];
|
||||
}]];
|
||||
[al addAction:[UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) {
|
||||
|
||||
}]];
|
||||
[self.viewController presentViewController:al animated:YES completion:nil];
|
||||
|
||||
}
|
||||
-(void)friendCabinRoomIsQuit{
|
||||
|
||||
}
|
||||
-(void)miniRoom{
|
||||
// self.navigationController.interactivePopGestureRecognizer.enabled = YES;
|
||||
[self.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
-(void)leaveRoom{
|
||||
UINavigationController *na = (UINavigationController *)KEYWINDOW.rootViewController;
|
||||
if ([self.roomModel.room_info.type_id isEqualToString:@"6"] && [self.roomModel.room_info.label_id isEqualToString:@"5"]) {
|
||||
[[QXGlobal shareGlobal]quitRoomWithRoomId:self.roomModel.room_info.room_id];
|
||||
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:na.viewControllers];
|
||||
for (int i = 0; i < viewControllers.count; i++) {
|
||||
UIViewController *vc = [viewControllers objectAtIndex:i];
|
||||
if ([vc isEqual:self.viewController]) {
|
||||
QXRoomViewController *roomVc = [[QXRoomViewController alloc] init];
|
||||
roomVc.roomId = QXGlobal.shareGlobal.superRoomId;
|
||||
[viewControllers insertObject:roomVc atIndex:i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
[UIApplication sharedApplication].idleTimerDisabled = YES;
|
||||
na.viewControllers = viewControllers;
|
||||
[na popViewControllerAnimated:YES];
|
||||
QXGlobal.shareGlobal.superRoomId = @"";
|
||||
}else{
|
||||
[[QXGlobal shareGlobal]quitRoomWithRoomId:self.roomModel.room_info.room_id];
|
||||
// self.navigationController.interactivePopGestureRecognizer.enabled = YES;
|
||||
[na popViewControllerAnimated:YES];
|
||||
}
|
||||
}
|
||||
-(void)stopHWDMP4{
|
||||
[self.leftSeatView stopHWDMP4];
|
||||
[self.rightSeatView stopHWDMP4];
|
||||
}
|
||||
-(void)playHWDMP4{
|
||||
[self.leftSeatView playHWDMP4];
|
||||
[self.rightSeatView playHWDMP4];
|
||||
}
|
||||
-(void)destroyViews{
|
||||
if (_leftSeatView) {
|
||||
[_leftSeatView destroyViews];
|
||||
_leftSeatView = nil;
|
||||
}
|
||||
if (_rightSeatView) {
|
||||
[_rightSeatView destroyViews];
|
||||
_rightSeatView = nil;
|
||||
}
|
||||
[self stopTimer];
|
||||
}
|
||||
@end
|
||||
73
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeFrientView.h
Normal file
73
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeFrientView.h
Normal file
@@ -0,0 +1,73 @@
|
||||
//
|
||||
// QXRoomSeatTypeFrientView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/8/18.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXUserModel.h"
|
||||
#import "QXRoomModel.h"
|
||||
#import "QXRoomSeatDelegate.h"
|
||||
#import "QXRoomSeatContentView.h"
|
||||
|
||||
typedef NS_ENUM(NSInteger) {
|
||||
/// 等待
|
||||
QXSeatTypeFrientPartTypeWait = 1,
|
||||
/// 心动
|
||||
QXSeatTypeFrientPartTypeHeart = 2,
|
||||
/// 牵手
|
||||
QXSeatTypeFrientPartTypeHand = 3,
|
||||
}QXSeatTypeFrientPartType;
|
||||
|
||||
|
||||
@interface QXRoomSeatTypeFrientView : UIView
|
||||
/// 房间数据
|
||||
@property (nonatomic,strong)QXRoomModel *roomModel;
|
||||
/// 我自己的麦位
|
||||
@property (nonatomic,assign)NSInteger myPitNumber;
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
|
||||
/// 上下麦
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number;
|
||||
/// 交友房阶段发生变化 step 阶段 1等待 2心动 3牵手 friend_id 场次id
|
||||
-(void)friendPartDidChangedWithType:(NSString*)step friend_id:(NSString*)friend_id end_time:(NSString*)end_time relationModel:(QXRoomFriendRelationModel*)relationModel;
|
||||
/// 交友房时间发生延时 end_time 截止时间
|
||||
-(void)friendTimeDelayWithTime:(NSString*)end_time;
|
||||
/// 交友房麦位发生变化
|
||||
-(void)friendSeatDidChanged:(NSArray<QXRoomPitModel*>*)pitArray;
|
||||
/// 交友心动发生变化 [1000,100,50] 三组数据
|
||||
-(void)friendHeartNumberDidChanged:(NSArray<QXRoomFriendHeartListModel *> *)heartArray;
|
||||
/// 关系创建完成
|
||||
-(void)friendRelationIsCreatedWithrelationModel:(QXRoomFriendRelationModel*)relationModel;
|
||||
|
||||
|
||||
|
||||
/// 清除魅力
|
||||
-(void)clearCharm;
|
||||
/// 清除个人魅力
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId;
|
||||
/// 设置魅力
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel*)model;
|
||||
/// 设置多人魅力
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel*>*)users;
|
||||
/// 用户信息发生改变
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
|
||||
/// 房间内换麦
|
||||
-(void)roomSeatExchangedWithFromPitNumber:(NSInteger)fromPitNumber toPitNumber:(NSInteger)toPitNumber userInfo:(QXUserHomeModel*)userInfo;
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
/// 销毁视图
|
||||
-(void)destroyViews;
|
||||
@end
|
||||
|
||||
|
||||
@interface QXFrientSeatView : UIView
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *contentView;
|
||||
@property (nonatomic,strong)UIButton *powerBtn;
|
||||
@property (nonatomic,assign)BOOL isLeft;
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
@property (nonatomic,strong)QXRoomFriendHeartListModel *heartModel;
|
||||
@end
|
||||
|
||||
1450
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeFrientView.m
Normal file
1450
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeFrientView.m
Normal file
File diff suppressed because it is too large
Load Diff
52
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeNormalView.h
Normal file
52
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeNormalView.h
Normal file
@@ -0,0 +1,52 @@
|
||||
//
|
||||
// QXRoomSeatTypeNormalView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/7.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomModel.h"
|
||||
#import "QXUserModel.h"
|
||||
#import "QXRoomSeatContentView.h"
|
||||
#import "QXRoomSeatDelegate.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
||||
@interface QXRoomSeatTypeNormalView : UIView
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
@property (nonatomic,assign)BOOL isPKMyRoom;
|
||||
@property (nonatomic,assign)BOOL isPKOtherRoom;
|
||||
@property (nonatomic,strong)QXRoomModel *roomModel;
|
||||
|
||||
|
||||
/// seatArray
|
||||
@property (nonatomic,strong)NSMutableArray *seatArray;
|
||||
@property (nonatomic,assign)NSInteger myPitNumber;
|
||||
@property (nonatomic,strong)QXRoomSeatContentView* mySeatView;
|
||||
/// 上下麦
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number;
|
||||
/// 清除魅力
|
||||
-(void)clearCharm;
|
||||
/// 清除个人魅力
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId;
|
||||
/// 设置魅力
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model;
|
||||
/// 设置多人魅力
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel*>*)users;
|
||||
/// 设置麦位锁麦状态
|
||||
-(void)setSeatIsLock:(NSString*)isLock pitNumber:(NSString*)pitNumber;
|
||||
|
||||
/// 房间内用户信息发生变化
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
|
||||
|
||||
/// 房间内换麦
|
||||
-(void)roomSeatExchangedWithFromPitNumber:(NSInteger)fromPitNumber toPitNumber:(NSInteger)toPitNumber userInfo:(QXUserHomeModel*)userInfo;
|
||||
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
|
||||
-(void)destroyViews;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
460
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeNormalView.m
Normal file
460
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeNormalView.m
Normal file
@@ -0,0 +1,460 @@
|
||||
//
|
||||
// QXRoomSeatTypeNormalView.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/7.
|
||||
//
|
||||
|
||||
#import "QXRoomSeatTypeNormalView.h"
|
||||
#import "QXRoomSeatContentView.h"
|
||||
#import "QXMineNetwork.h"
|
||||
#import "QXRoomSeatSettingView.h"
|
||||
|
||||
static NSInteger maxSeat = 8;
|
||||
@interface QXRoomSeatTypeNormalView()<QXRoomSeatDelegate>
|
||||
/// 主持
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *compereView;
|
||||
/// 嘉宾
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *guestView;
|
||||
|
||||
@property (nonatomic,strong)UIScrollView *scrollView;
|
||||
|
||||
@property (nonatomic,strong)QXRoomSeatSettingView *settingView;
|
||||
|
||||
@end
|
||||
@implementation QXRoomSeatTypeNormalView
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
-(void)initSubviews{
|
||||
MJWeakSelf
|
||||
self.compereView = [[QXRoomSeatContentView alloc] init];
|
||||
// [self.compereView addTapBlock:^(id _Nonnull obj) {
|
||||
// [weakSelf didClickSeatView:obj];
|
||||
// }];
|
||||
self.compereView.delegate = self;
|
||||
self.compereView.tagString = QXText(@"主持");
|
||||
self.compereView.number = 9;
|
||||
[self addSubview:self.compereView];
|
||||
CGFloat margin = (SCREEN_WIDTH/2-ScaleWidth(70))/2;
|
||||
[self.compereView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self);
|
||||
make.width.mas_equalTo(ScaleWidth(70));
|
||||
make.height.mas_equalTo(ScaleWidth(70-10)+51);
|
||||
make.left.mas_equalTo(margin);
|
||||
}];
|
||||
|
||||
|
||||
self.guestView = [[QXRoomSeatContentView alloc] init];
|
||||
self.guestView.tagString = QXText(@"嘉宾");
|
||||
self.guestView.number = 10;
|
||||
// [self.guestView addTapBlock:^(id _Nonnull obj) {
|
||||
// [weakSelf didClickSeatView:obj];
|
||||
// }];
|
||||
self.guestView.delegate = self;
|
||||
[self addSubview:self.guestView];
|
||||
[self.guestView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self);
|
||||
make.width.mas_equalTo(ScaleWidth(70));
|
||||
make.height.mas_equalTo(ScaleWidth(70-10)+51);
|
||||
make.right.mas_equalTo(-margin);
|
||||
}];
|
||||
NSInteger lineItemCount = 4;
|
||||
CGFloat leftMargin = 20;
|
||||
CGFloat topSpace = 0;
|
||||
CGFloat seatWidth = ScaleWidth(60);
|
||||
CGFloat seatHeight = ScaleWidth(60-10)+51;
|
||||
CGFloat itemSpace = (SCREEN_WIDTH-leftMargin*2-seatWidth*lineItemCount)/(lineItemCount-1);
|
||||
for (int i = 0 ; i < maxSeat ; i++) {
|
||||
QXRoomSeatContentView *contentView = [[QXRoomSeatContentView alloc] init];
|
||||
contentView.number = i+1;
|
||||
contentView.noOffLine = YES;
|
||||
// [contentView addTapBlock:^(id _Nonnull obj) {
|
||||
// [weakSelf didClickSeatView:obj];
|
||||
// }];
|
||||
contentView.delegate = self;
|
||||
[self addSubview:contentView];
|
||||
[contentView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.compereView.mas_bottom).offset(1+(seatHeight+topSpace)*(i/4));
|
||||
make.left.equalTo(self).offset(leftMargin+(seatWidth+itemSpace)*(i%4));
|
||||
make.size.mas_equalTo(CGSizeMake(seatWidth, seatHeight));
|
||||
}];
|
||||
[self.seatArray addObject:contentView];
|
||||
}
|
||||
[self.seatArray addObject:self.compereView];
|
||||
[self.seatArray addObject:self.guestView];
|
||||
self.compereView.noOffLine = YES;
|
||||
self.guestView.noOffLine = YES;
|
||||
}
|
||||
|
||||
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
|
||||
[self.viewController.view endEditing:YES];
|
||||
}
|
||||
-(void)didClickUserHeaderWithPitModel:(QXRoomPitModel *)pitModel seatView:(QXRoomSeatContentView *)seatView{
|
||||
NSString *pit_number = [NSString stringWithFormat:@"%ld",seatView.number] ;
|
||||
QXLOG(@"点击了%ld麦位",seatView.number);
|
||||
if (seatView.pitModel.user_id.longLongValue > 0) {
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickUserHeaderWithPitModel:userModel:isPkRoom:pkRoomId:isNoTakeOff:)]) {
|
||||
if (self.isPKOtherRoom) {
|
||||
[self.delegate didClickUserHeaderWithPitModel:seatView.pitModel userModel:nil isPkRoom:YES pkRoomId:self.roomModel.room_info.room_id isNoTakeOff:NO];
|
||||
}else{
|
||||
[self.delegate didClickUserHeaderWithPitModel:seatView.pitModel userModel:nil isPkRoom:NO pkRoomId:@"" isNoTakeOff:NO];
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (self.isPKOtherRoom) {
|
||||
return;
|
||||
}
|
||||
if (seatView.number == 9) {
|
||||
/// 麦位没人时点9号麦直接请求上麦
|
||||
[QXMineNetwork roomUpSeatWithRoomId:self.roomModel.room_info.room_id pit_number:pit_number isUpSeat:YES successBlock:^(NSDictionary * _Nonnull dict) {
|
||||
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
showToast(msg);
|
||||
}];
|
||||
return;
|
||||
}else if (seatView.number == 10) {
|
||||
if (self.myPitNumber == 9 || self.roomModel.user_info.is_room_owner.intValue == 1 || self.roomModel.user_info.is_management.intValue == 1) {
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didHugSeatWithPitNumber:)]) {
|
||||
[self.delegate didHugSeatWithPitNumber:@"10"];
|
||||
}
|
||||
}else{
|
||||
showToast(@"请等待主持抱麦");
|
||||
}
|
||||
return;
|
||||
}else{
|
||||
if (self.myPitNumber == 9) {
|
||||
MJWeakSelf
|
||||
/// 自己在9号麦 管理麦位
|
||||
QXRoomPitModel *pitModel = seatView.pitModel;
|
||||
self.settingView.roomId = self.roomModel.room_info.room_id;
|
||||
self.settingView.pitModel = pitModel;
|
||||
self.settingView.setSuccessBlock = ^(QXRoomPitModel * _Nonnull pitModel) {
|
||||
seatView.pitModel = pitModel;
|
||||
// if (self.isPKMyRoom || self.isPKOtherRoom) {
|
||||
// [seatView hideCharm];
|
||||
// }
|
||||
};
|
||||
self.settingView.clickHugBlock = ^(QXRoomPitModel * _Nonnull pitModel) {
|
||||
// [weakSelf showOnlineListWithPitNumber:pitModel.pit_number];
|
||||
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(didHugSeatWithPitNumber:)]) {
|
||||
[weakSelf.delegate didHugSeatWithPitNumber:pitModel.pit_number];
|
||||
}
|
||||
};
|
||||
[self.settingView showInView:self.viewController.view];
|
||||
}else{
|
||||
if (self.roomModel.room_info.room_up_pit_type.intValue == 2) {
|
||||
/// 自由麦请求
|
||||
[QXMineNetwork roomUpSeatWithRoomId:self.roomModel.room_info.room_id pit_number:pit_number isUpSeat:YES successBlock:^(NSDictionary * _Nonnull dict) {
|
||||
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
showToast(msg);
|
||||
}];
|
||||
}else{
|
||||
// 排麦模式 弹出上麦
|
||||
if (self.myPitNumber == 9 || self.roomModel.user_info.is_room_owner.intValue == 1 || self.roomModel.user_info.is_management.intValue == 1 || self.roomModel.user_info.is_host.intValue == 1) {
|
||||
MJWeakSelf
|
||||
/// 自己在9号麦 管理麦位
|
||||
QXRoomPitModel *pitModel = seatView.pitModel;
|
||||
self.settingView.roomId = self.roomModel.room_info.room_id;
|
||||
self.settingView.pitModel = pitModel;
|
||||
self.settingView.setSuccessBlock = ^(QXRoomPitModel * _Nonnull pitModel) {
|
||||
seatView.pitModel = pitModel;
|
||||
// if (self.isPKMyRoom || self.isPKOtherRoom) {
|
||||
// [seatView hideCharm];
|
||||
// }
|
||||
};
|
||||
self.settingView.clickHugBlock = ^(QXRoomPitModel * _Nonnull pitModel) {
|
||||
// [weakSelf showOnlineListWithPitNumber:pitModel.pit_number];
|
||||
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(didHugSeatWithPitNumber:)]) {
|
||||
[weakSelf.delegate didHugSeatWithPitNumber:pitModel.pit_number];
|
||||
}
|
||||
};
|
||||
[self.settingView showInView:self.viewController.view];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
-(void)previewRoomUserCharmListWithUserId:(NSString *)userId{
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(previewRoomUserCharmListWithUserId:)]) {
|
||||
[self.delegate previewRoomUserCharmListWithUserId:userId];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number{
|
||||
if (pit_number > 10) {
|
||||
return;
|
||||
}
|
||||
QXRoomSeatContentView *contentView = self.seatArray[pit_number-1];
|
||||
QXRoomPitModel *model = contentView.pitModel;
|
||||
if (isUpSeat) {
|
||||
model.user_id = user.user_id;
|
||||
model.avatar = user.avatar;
|
||||
model.dress = user.dress;
|
||||
model.sex = user.sex;
|
||||
model.nickname = user.nickname;
|
||||
model.user_code = user.user_code;
|
||||
model.charm = user.charm;
|
||||
}else{
|
||||
model.user_id = @"0";
|
||||
model.avatar = @"";
|
||||
model.dress = @"";
|
||||
model.sex = @"";
|
||||
model.nickname = @"";
|
||||
model.user_code = @"";
|
||||
model.charm = @"";
|
||||
if (contentView.isSeatSpeaking) {
|
||||
[contentView stopAudioAnimation];
|
||||
}
|
||||
}
|
||||
if ([user.user_id isEqualToString:[QXGlobal shareGlobal].loginModel.user_id]) {
|
||||
if (isUpSeat) {
|
||||
self.myPitNumber = pit_number;
|
||||
}else{
|
||||
self.myPitNumber = -1;
|
||||
}
|
||||
}
|
||||
contentView.pitModel = model;
|
||||
// if (self.isPKMyRoom || self.isPKOtherRoom) {
|
||||
// [contentView hideCharm];
|
||||
// }
|
||||
}
|
||||
- (QXRoomSeatContentView *)mySeatView{
|
||||
if (self.myPitNumber > 0) {
|
||||
return self.seatArray[self.myPitNumber-1];;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
-(void)setIsPKMyRoom:(BOOL)isPKMyRoom{
|
||||
_isPKMyRoom = isPKMyRoom;
|
||||
self.compereView.isPK = YES;
|
||||
[self.compereView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self).offset(0);
|
||||
make.width.mas_equalTo(ScaleWidth(60));
|
||||
make.height.mas_equalTo(ScaleWidth(60-10)+51-8);
|
||||
make.right.mas_equalTo(-15);
|
||||
}];
|
||||
|
||||
self.guestView.isPK = YES;
|
||||
[self.guestView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.compereView).offset(15);
|
||||
make.width.mas_equalTo(ScaleWidth(55));
|
||||
make.height.mas_equalTo(ScaleWidth(55-10)+51-8);
|
||||
make.left.mas_equalTo(15);
|
||||
}];
|
||||
CGFloat leftMargin = 7;
|
||||
CGFloat topSpace = -4;
|
||||
CGFloat seatWidth = ((SCREEN_WIDTH-7*2-4)/2 - 8*2)/4;
|
||||
// CGFloat seatHeight = seatWidth-10+51;
|
||||
CGFloat seatHeight = seatWidth-10+51-8;
|
||||
CGFloat itemSpace = 0;
|
||||
for (int i = 0 ; i < self.seatArray.count ; i++) {
|
||||
if (i < 8) {
|
||||
QXRoomSeatContentView *contentView = self.seatArray[i];
|
||||
contentView.isPK = YES;
|
||||
[contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.guestView.mas_bottom).offset(topSpace+(seatHeight+topSpace)*(i/4));
|
||||
make.left.equalTo(self).offset(leftMargin+(seatWidth+itemSpace)*(i%4));
|
||||
make.size.mas_equalTo(CGSizeMake(seatWidth, seatHeight));
|
||||
}];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setIsPKOtherRoom:(BOOL)isPKOtherRoom{
|
||||
_isPKOtherRoom = isPKOtherRoom;
|
||||
self.compereView.isPK = YES;
|
||||
[self.compereView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self).offset(0);
|
||||
make.width.mas_equalTo(ScaleWidth(60));
|
||||
make.height.mas_equalTo(ScaleWidth(60-10)+51-8);
|
||||
make.left.mas_equalTo(15);
|
||||
}];
|
||||
self.guestView.isPK = YES;
|
||||
[self.guestView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.compereView).offset(15);
|
||||
make.width.mas_equalTo(ScaleWidth(55));
|
||||
make.height.mas_equalTo(ScaleWidth(55-10)+51-8);
|
||||
make.right.mas_equalTo(-15);
|
||||
}];
|
||||
CGFloat leftMargin = 7;
|
||||
CGFloat topSpace = -4;
|
||||
CGFloat seatWidth = ((SCREEN_WIDTH-7*2-4)/2 - 8*2)/4;
|
||||
// CGFloat seatHeight = seatWidth+21;
|
||||
// CGFloat seatHeight = seatWidth-10+51;
|
||||
CGFloat seatHeight = seatWidth-10+51-8;
|
||||
CGFloat itemSpace = 0;
|
||||
for (int i = 0 ; i < self.seatArray.count ; i++) {
|
||||
if (i < 8) {
|
||||
QXRoomSeatContentView *contentView = self.seatArray[i];
|
||||
contentView.isPK = YES;
|
||||
[contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.equalTo(self.guestView.mas_bottom).offset(topSpace+(seatHeight+topSpace)*(i/4));
|
||||
make.left.equalTo(self).offset(leftMargin+(seatWidth+itemSpace)*(i%4));
|
||||
make.size.mas_equalTo(CGSizeMake(seatWidth, seatHeight));
|
||||
}];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setRoomModel:(QXRoomModel *)roomModel{
|
||||
_roomModel = roomModel;
|
||||
for (int i = 0 ; i < roomModel.room_info.pit_list.count;i++) {
|
||||
QXRoomPitModel *pitModel = roomModel.room_info.pit_list[i];
|
||||
QXRoomSeatContentView *contentView = self.seatArray[i];
|
||||
contentView.pitModel = pitModel;
|
||||
// if (self.isPKMyRoom || self.isPKOtherRoom) {
|
||||
// [contentView hideCharm];
|
||||
// }
|
||||
}
|
||||
self.myPitNumber = roomModel.user_info.pit_number.integerValue;
|
||||
}
|
||||
|
||||
-(void)clearCharm{
|
||||
for (QXRoomSeatContentView *seatView in self.seatArray) {
|
||||
QXRoomPitModel *model = seatView.pitModel;
|
||||
model.charm = @"0";
|
||||
seatView.pitModel = model;
|
||||
// if (self.isPKMyRoom || self.isPKOtherRoom) {
|
||||
// [seatView hideCharm];
|
||||
// }
|
||||
}
|
||||
}
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId{
|
||||
for (QXRoomSeatContentView *seatView in self.seatArray) {
|
||||
QXRoomPitModel *model = seatView.pitModel;
|
||||
if ([model.user_id isEqualToString:userId]) {
|
||||
model.charm = @"0";
|
||||
seatView.pitModel = model;
|
||||
break;
|
||||
}
|
||||
// if (self.isPKMyRoom || self.isPKOtherRoom) {
|
||||
// [seatView hideCharm];
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model{
|
||||
for (QXRoomSeatContentView *seatView in self.seatArray) {
|
||||
QXRoomPitModel *md = seatView.pitModel;
|
||||
if ([model.user_id isEqualToString:md.user_id]) {
|
||||
// md.charm = model.charm;
|
||||
// seatView.pitModel = md;
|
||||
[seatView updateUserCharm:model.charm];
|
||||
// if (self.isPKMyRoom || self.isPKOtherRoom) {
|
||||
// [seatView hideCharm];
|
||||
// }
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel *> *)users{
|
||||
for (QXUserHomeModel*model in users) {
|
||||
[self setSeatCharmWithUser:model];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)roomSeatExchangedWithFromPitNumber:(NSInteger)fromPitNumber toPitNumber:(NSInteger)toPitNumber userInfo:(QXUserHomeModel*)userInfo{
|
||||
if (fromPitNumber == 0 || toPitNumber == 0) {
|
||||
return;
|
||||
}
|
||||
QXRoomSeatContentView *fromSeatView = self.seatArray[fromPitNumber-1];
|
||||
QXRoomSeatContentView *toSeatView = self.seatArray[toPitNumber-1];
|
||||
QXRoomPitModel *fromPitModel = fromSeatView.pitModel;
|
||||
QXRoomPitModel *totModel = toSeatView.pitModel;
|
||||
|
||||
NSString* tmpPitNum = [NSString stringWithFormat:@"%@",fromPitModel.pit_number];
|
||||
fromPitModel.pit_number = totModel.pit_number;
|
||||
totModel.pit_number = tmpPitNum;
|
||||
|
||||
toSeatView.pitModel = fromPitModel;
|
||||
fromSeatView.pitModel = totModel;
|
||||
if ([userInfo.user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) {
|
||||
self.myPitNumber = toPitNumber;
|
||||
}
|
||||
/// 循环麦位视图数组
|
||||
for (UIView *view in self.seatArray) {
|
||||
/// 如果当前视图的类型为麦位视图
|
||||
if ([view isKindOfClass:[QXRoomSeatContentView class]]) {
|
||||
QXRoomSeatContentView *seatView = (QXRoomSeatContentView*)view;
|
||||
/// 如果换麦的用户id等于视图上当前绑定的用户id
|
||||
if ([userInfo.user_id isEqualToString:seatView.pitModel.user_id]) {
|
||||
/// 如果视图的麦位号不是目标麦位号 (为了处理后端推送异常是产生多个同一个用户)
|
||||
if (seatView.pitModel.pit_number.intValue != toPitNumber) {
|
||||
/// 置空麦位用户
|
||||
QXRoomPitModel *model = seatView.pitModel;
|
||||
model.user_id = @"0";
|
||||
model.avatar = @"";
|
||||
model.dress = @"";
|
||||
model.sex = @"";
|
||||
model.nickname = @"";
|
||||
model.user_code = @"";
|
||||
model.charm = @"";
|
||||
seatView.pitModel = model;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setSeatIsLock:(NSString *)isLock pitNumber:(NSString *)pitNumber{
|
||||
NSInteger pit_number = pitNumber.integerValue;
|
||||
QXRoomSeatContentView *contentView = self.seatArray[pit_number-1];
|
||||
contentView.is_lock = isLock;
|
||||
}
|
||||
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user{
|
||||
for (QXRoomSeatContentView *seatView in self.seatArray) {
|
||||
QXRoomPitModel *md = seatView.pitModel;
|
||||
if ([user.user_id isEqualToString:md.user_id]) {
|
||||
md.dress = user.dress;
|
||||
md.nickname = user.nickname;
|
||||
md.sex = user.sex;
|
||||
md.avatar = user.avatar;
|
||||
seatView.pitModel = md;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
-(void)stopHWDMP4{
|
||||
for (QXRoomSeatContentView *seatView in self.seatArray) {
|
||||
[seatView stopHWDMP4];
|
||||
}
|
||||
}
|
||||
-(void)playHWDMP4{
|
||||
for (QXRoomSeatContentView *seatView in self.seatArray) {
|
||||
[seatView playHWDMP4];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)destroyViews{
|
||||
for (QXRoomSeatContentView *seatView in self.seatArray) {
|
||||
[seatView destroyViews];
|
||||
}
|
||||
}
|
||||
|
||||
-(NSMutableArray *)seatArray{
|
||||
if (!_seatArray) {
|
||||
_seatArray = [NSMutableArray array];
|
||||
}
|
||||
return _seatArray;
|
||||
}
|
||||
|
||||
-(QXRoomSeatSettingView *)settingView{
|
||||
if (!_settingView) {
|
||||
_settingView = [[QXRoomSeatSettingView alloc] init];
|
||||
}
|
||||
return _settingView;
|
||||
}
|
||||
|
||||
@end
|
||||
45
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeSongView.h
Normal file
45
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeSongView.h
Normal file
@@ -0,0 +1,45 @@
|
||||
//
|
||||
// QXRoomSeatTypeSongView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/18.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomModel.h"
|
||||
#import "QXRoomSeatDelegate.h"
|
||||
#import "QXUserModel.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface QXRoomSeatTypeSongView : UIView
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
@property (nonatomic,strong)QXRoomModel *roomModel;
|
||||
@property (nonatomic,strong)NSString *lrcUrl;
|
||||
@property (nonatomic,assign)NSUInteger progress;
|
||||
@property (nonatomic,assign)double speakerPitch;
|
||||
|
||||
@property (nonatomic,assign)NSInteger myPitNumber;
|
||||
|
||||
@property (nonatomic,strong)QXSongListModel *songInfo;
|
||||
@property (nonatomic,strong)QXSongListModel *nextInfo;
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
-(void)destroyViews;
|
||||
|
||||
/// 清除魅力
|
||||
-(void)clearCharm;
|
||||
/// 清除个人魅力
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId;
|
||||
/// 设置魅力
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model;
|
||||
/// 设置多人魅力
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel*>*)users;
|
||||
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number;
|
||||
/// 榜单发生变化
|
||||
-(void)songRoomCharmRankListDidChanged:(NSArray<QXRoomPitModel *>*)list;
|
||||
/// 房间内用户信息发生变化
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
899
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeSongView.m
Normal file
899
QXLive/Room(房间)/View/麦位视图/QXRoomSeatTypeSongView.m
Normal file
@@ -0,0 +1,899 @@
|
||||
//
|
||||
// QXRoomSeatTypeSongView.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/18.
|
||||
//
|
||||
|
||||
#import "QXRoomSeatTypeSongView.h"
|
||||
#import "QXFileManager.h"
|
||||
#import "UIButton+QX.h"
|
||||
#import "QXAgoraEngine.h"
|
||||
#import "QXRoomSeatContentView.h"
|
||||
#import "MarqueeLabel.h"
|
||||
#import "QXSongSeatCell.h"
|
||||
#import "QXMineNetwork.h"
|
||||
#import "QXRoomUserInfoView.h"
|
||||
|
||||
|
||||
@import AgoraLyricsScore;
|
||||
@interface QXRoomSeatTypeSongView()<KaraokeDelegate
|
||||
,UICollectionViewDelegate,UICollectionViewDataSource,
|
||||
QXRoomSeatDelegate
|
||||
>
|
||||
/// 左侧背景
|
||||
@property (nonatomic,strong)UIView *leftBgView;
|
||||
@property (nonatomic,strong)UIImageView *leftBgImageView;
|
||||
/// 占位
|
||||
@property (nonatomic,strong)UILabel *tipsLabel;
|
||||
/// 歌曲封面
|
||||
@property (nonatomic,strong)UIImageView *songCoverImageView;
|
||||
/// 歌曲背景图
|
||||
@property (nonatomic,strong)UIImageView *songCoverCycleImageView;
|
||||
/// 当前播放歌曲
|
||||
@property (nonatomic,strong)MarqueeLabel *currentInfoLabel;
|
||||
/// 歌词视图
|
||||
@property (nonatomic,strong)KaraokeView *karaokeView;
|
||||
/// 原唱 伴奏
|
||||
@property (nonatomic,strong)UIButton *originalBtn;
|
||||
/// 切歌
|
||||
@property (nonatomic,strong)UIButton *nextBtn;
|
||||
/// 结束
|
||||
@property (nonatomic,strong)UIButton *endBtn;
|
||||
/// 打赏
|
||||
@property (nonatomic,strong)UIButton *giveBtn;
|
||||
/// k歌设置
|
||||
//@property (nonatomic,strong)UIButton *ktvConifgBtn;
|
||||
/// 演唱者
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *singerSeatView;
|
||||
/// 当前播放歌曲
|
||||
@property (nonatomic,strong)MarqueeLabel *nextInfoLabel;
|
||||
|
||||
|
||||
/// 主持
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *compereView;
|
||||
/// 嘉宾
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *guestView;
|
||||
/// 消费排行列表
|
||||
@property (nonatomic,strong)UICollectionView *collectionView;
|
||||
///
|
||||
@property (nonatomic,strong)NSMutableArray *dataArray;
|
||||
|
||||
|
||||
@property (nonatomic,strong)QXRoomUserInfoView *userInfoView;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@implementation QXRoomSeatTypeSongView
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
-(void)initSubviews{
|
||||
|
||||
self.leftBgView = [[UIView alloc] init];
|
||||
self.leftBgView.backgroundColor = RGB16A(0x000000,0.2);
|
||||
[self.leftBgView addRoundedCornersWithRadius:4];
|
||||
[self addSubview:self.leftBgView];
|
||||
self.leftBgImageView = [[UIImageView alloc] init];
|
||||
self.leftBgImageView.alpha = 0.3;
|
||||
self.leftBgImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
[self.leftBgImageView addRoundedCornersWithRadius:4];
|
||||
[self.leftBgView addSubview:self.leftBgImageView];
|
||||
|
||||
self.currentInfoLabel = [[MarqueeLabel alloc] initWithFrame:CGRectZero];
|
||||
self.currentInfoLabel.scrollDuration = 2;
|
||||
self.currentInfoLabel.marqueeType = MLLeftRight;
|
||||
self.currentInfoLabel.text = QXText(@"当前播放");
|
||||
self.currentInfoLabel.textColor = UIColor.whiteColor;
|
||||
self.currentInfoLabel.font = [UIFont systemFontOfSize:12];
|
||||
[self.leftBgView addSubview:self.currentInfoLabel];
|
||||
|
||||
|
||||
|
||||
|
||||
self.songCoverCycleImageView = [[UIImageView alloc] init];
|
||||
self.songCoverCycleImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
// self.songCoverImageView.backgroundColor = [UIColor redColor];
|
||||
self.songCoverCycleImageView.image = [UIImage imageNamed:@"room_music_cycle"];
|
||||
[self.songCoverCycleImageView addRoundedCornersWithRadius:27.5];
|
||||
[self.leftBgView addSubview:self.songCoverCycleImageView];
|
||||
|
||||
self.songCoverImageView = [[UIImageView alloc] init];
|
||||
self.songCoverImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
// self.songCoverImageView.backgroundColor = [UIColor redColor];
|
||||
self.songCoverImageView.image = [UIImage imageNamed:@"user_header_placehoulder"];
|
||||
[self.songCoverImageView addRoundedCornersWithRadius:12.5];
|
||||
CABasicAnimation* rotationAnimation;
|
||||
|
||||
//绕哪个轴,那么就改成什么:这里是绕y轴 ---> transform.rotation.y
|
||||
|
||||
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
|
||||
|
||||
//旋转角度
|
||||
|
||||
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI];
|
||||
|
||||
//每次旋转的时间(单位秒)
|
||||
|
||||
rotationAnimation.duration = 2;
|
||||
|
||||
rotationAnimation.cumulative = YES;
|
||||
rotationAnimation.removedOnCompletion = NO;
|
||||
|
||||
//重复旋转的次数,如果你想要无数次,那么设置成MAXFLOAT
|
||||
|
||||
rotationAnimation.repeatCount = MAXFLOAT;
|
||||
|
||||
[self.songCoverImageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
|
||||
|
||||
[self.songCoverCycleImageView addSubview:self.songCoverImageView];
|
||||
|
||||
|
||||
FileLogger *fileLogger = [[FileLogger alloc] init];
|
||||
KaraokeView *karaokeView = [[KaraokeView alloc] initWithFrame:CGRectZero
|
||||
loggers:@[[ConsoleLogger new],fileLogger]];
|
||||
karaokeView.backgroundImage = [UIImage imageNamed:@"ktv_top_bgIcon"];
|
||||
karaokeView.spacing = 0;
|
||||
karaokeView.scoringEnabled = NO;
|
||||
[self.leftBgView addSubview:karaokeView];
|
||||
karaokeView.delegate = self;
|
||||
self.karaokeView = karaokeView;
|
||||
|
||||
// ScoringView *sView = karaokeView.scoringView;
|
||||
LyricsView *lView= karaokeView.lyricsView;
|
||||
// sView.viewHeight = ScaleWidth(160);
|
||||
// sView.topSpaces = ScaleWidth(60);
|
||||
|
||||
karaokeView.lyricsView.waitingViewHidden = NO;
|
||||
karaokeView.lyricsView.firstToneHintViewStyle.size = 8;
|
||||
karaokeView.lyricsView.inactiveLineFontSize = [UIFont fontWithName:@"PingFangSC-Semibold" size:12];
|
||||
karaokeView.lyricsView.activeLineUpcomingFontSize = [UIFont fontWithName:@"PingFangSC-Semibold" size:14];
|
||||
karaokeView.lyricsView.lyricLineSpacing = 5;
|
||||
karaokeView.lyricsView.firstToneHintViewStyle.bottomMargin = 0;
|
||||
karaokeView.lyricsView.firstToneHintViewStyle.backgroundColor = QXConfig.themeColor;
|
||||
// karaokeView.lyricsView.activeLinePlayedTextColor = RGB16A(0xFFFFFF, 1);
|
||||
karaokeView.lyricsView.activeLinePlayedTextColor = QXConfig.themeColor;
|
||||
karaokeView.lyricsView.inactiveLineTextColor = RGB16A(0xFFFFFF, 0.5);
|
||||
|
||||
lView.draggable = NO;
|
||||
lView.noLyricTipsFont = [UIFont systemFontOfSize:15];
|
||||
lView.noLyricTipsText = @"没有歌词呢";
|
||||
lView.noLyricTipsColor = [UIColor whiteColor];
|
||||
|
||||
self.nextInfoLabel = [[MarqueeLabel alloc] initWithFrame:CGRectZero];
|
||||
self.nextInfoLabel.scrollDuration = 2;
|
||||
self.nextInfoLabel.marqueeType = MLLeftRight;
|
||||
self.nextInfoLabel.text = QXText(@"下一首");
|
||||
self.nextInfoLabel.textColor = UIColor.whiteColor;
|
||||
self.nextInfoLabel.font = [UIFont systemFontOfSize:12];
|
||||
[self.leftBgView addSubview:self.nextInfoLabel];
|
||||
|
||||
MJWeakSelf
|
||||
self.singerSeatView = [[QXRoomSeatContentView alloc] init];
|
||||
self.singerSeatView.tagString = QXText(@"演唱者");
|
||||
self.singerSeatView.delegate = self;
|
||||
[self.leftBgView addSubview:self.singerSeatView];
|
||||
|
||||
[self.leftBgView addSubview:self.originalBtn];
|
||||
[self.leftBgView addSubview:self.giveBtn];
|
||||
[self.leftBgView addSubview:self.nextBtn];
|
||||
[self.leftBgView addSubview:self.endBtn];
|
||||
// self.ktvConifgBtn.hidden = YES;
|
||||
// [self.leftBgView addSubview:self.ktvConifgBtn];
|
||||
[self.leftBgView addSubview:self.tipsLabel];
|
||||
|
||||
|
||||
|
||||
self.compereView = [[QXRoomSeatContentView alloc] init];
|
||||
self.compereView.delegate = self;
|
||||
self.compereView.tagString = QXText(@"主持");
|
||||
self.compereView.number = 9;
|
||||
[self addSubview:self.compereView];
|
||||
|
||||
|
||||
self.guestView = [[QXRoomSeatContentView alloc] init];
|
||||
self.guestView.tagString = QXText(@"嘉宾");
|
||||
self.guestView.number = 10;
|
||||
self.guestView.delegate = self;
|
||||
[self addSubview:self.guestView];
|
||||
|
||||
|
||||
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
|
||||
layout.itemSize = CGSizeMake(ScaleWidth(52), 51+ScaleWidth(52-10));
|
||||
layout.minimumLineSpacing = 0;
|
||||
layout.minimumInteritemSpacing = 0;
|
||||
layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
|
||||
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
|
||||
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, ScaleWidth(52), 51+ScaleWidth(52-10)) collectionViewLayout:layout];
|
||||
// [self.collectionView registerNib:[ forCellWithReuseIdentifier:@"QXGiftCell"];
|
||||
[self.collectionView registerClass:[QXSongSeatCell class] forCellWithReuseIdentifier:@"QXSongSeatCell"];
|
||||
self.collectionView.delegate = self;
|
||||
self.collectionView.dataSource = self;
|
||||
self.collectionView.showsHorizontalScrollIndicator = NO;
|
||||
self.collectionView.showsVerticalScrollIndicator = NO;
|
||||
self.collectionView.bounces = NO;
|
||||
self.collectionView.backgroundColor = [UIColor clearColor];
|
||||
[self addSubview:self.collectionView];
|
||||
}
|
||||
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
|
||||
[self.viewController.view endEditing:YES];
|
||||
}
|
||||
-(void)didClickUserHeaderWithPitModel:(QXRoomPitModel *)pitModel seatView:(QXRoomSeatContentView *)seatView{
|
||||
|
||||
NSString *pit_number = [NSString stringWithFormat:@"%ld",seatView.number] ;
|
||||
QXLOG(@"点击了%ld麦位",seatView.number);
|
||||
if (seatView.pitModel.user_id.longLongValue > 0) {
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickUserHeaderWithPitModel:userModel:isPkRoom:pkRoomId:isNoTakeOff:)]) {
|
||||
[self.delegate didClickUserHeaderWithPitModel:seatView.pitModel userModel:nil isPkRoom:NO pkRoomId:@"" isNoTakeOff:NO];
|
||||
}
|
||||
}else{
|
||||
if (seatView.number == 9) {
|
||||
[QXMineNetwork roomUpSeatWithRoomId:self.roomModel.room_info.room_id pit_number:pit_number isUpSeat:YES successBlock:^(NSDictionary * _Nonnull dict) {
|
||||
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
showToast(msg);
|
||||
}];
|
||||
}else if (seatView.number == 10) {
|
||||
if (self.myPitNumber == 9) {
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(didHugSeatWithPitNumber:)]) {
|
||||
[self.delegate didHugSeatWithPitNumber:@"10"];
|
||||
}
|
||||
}else{
|
||||
showToast(@"请等待主持抱麦");
|
||||
}
|
||||
return;
|
||||
}else{
|
||||
// if (self.roomModel.room_info.room_up_pit_type.intValue == 2) {
|
||||
// /// 自由麦请求
|
||||
// [QXMineNetwork roomUpSeatWithRoomId:self.roomModel.room_info.room_id pit_number:pit_number isUpSeat:YES successBlock:^(NSDictionary * _Nonnull dict) {
|
||||
//
|
||||
// } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
//
|
||||
// }];
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
-(void)previewRoomUserCharmListWithUserId:(NSString *)userId{
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(previewRoomUserCharmListWithUserId:)]) {
|
||||
[self.delegate previewRoomUserCharmListWithUserId:userId];
|
||||
}
|
||||
}
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number{
|
||||
// if (pit_number==9999) {
|
||||
// for (<#type *object#> in <#collection#>) {
|
||||
// <#statements#>
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
QXRoomSeatContentView *contentView;
|
||||
if (pit_number == 9) {
|
||||
contentView = self.compereView;
|
||||
}else if (pit_number == 10) {
|
||||
contentView = self.guestView;
|
||||
}else{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
QXRoomPitModel *model = contentView.pitModel;
|
||||
if (isUpSeat) {
|
||||
if (model == nil) {
|
||||
model = [[QXRoomPitModel alloc] init];
|
||||
}
|
||||
model.user_id = user.user_id;
|
||||
model.avatar = user.avatar;
|
||||
model.dress = user.dress;
|
||||
model.sex = user.sex;
|
||||
model.nickname = user.nickname;
|
||||
model.user_code = user.user_code;
|
||||
model.charm = user.charm;
|
||||
// [self.dataArray removeAllObjects];
|
||||
// [self.dataArray addObjectsFromArray:self.roomModel.song_pit_list];
|
||||
if (contentView == nil) {
|
||||
[self.dataArray addObject:model];
|
||||
}
|
||||
}else{
|
||||
model.user_id = @"0";
|
||||
model.avatar = @"";
|
||||
model.dress = @"";
|
||||
model.sex = @"";
|
||||
model.nickname = @"";
|
||||
model.user_code = @"";
|
||||
model.charm = @"";
|
||||
if (contentView) {
|
||||
if (contentView.isSeatSpeaking) {
|
||||
[contentView stopAudioAnimation];
|
||||
}
|
||||
}
|
||||
for (QXRoomPitModel *md in self.dataArray) {
|
||||
if ([md.user_id isEqualToString:user.user_id]) {
|
||||
[self.dataArray removeObject:md];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ([user.user_id isEqualToString:[QXGlobal shareGlobal].loginModel.user_id]) {
|
||||
if (isUpSeat) {
|
||||
self.myPitNumber = pit_number;
|
||||
}else{
|
||||
self.myPitNumber = -1;
|
||||
}
|
||||
}
|
||||
if (contentView) {
|
||||
contentView.pitModel = model;
|
||||
}else{
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
[self resetBtnWithSongInfo:self.roomModel.song_user_info];
|
||||
}
|
||||
-(void)setLrcUrl:(NSString *)lrcUrl{
|
||||
_lrcUrl = lrcUrl;
|
||||
MJWeakSelf
|
||||
[[QXRequset shareInstance] downloadVideoPlayerWithUrl:lrcUrl completion:^(BOOL result, NSString * _Nonnull fileName) {
|
||||
weakSelf.tipsLabel.hidden = YES;
|
||||
NSString *path = [QXFileManager getGiftVideoPath:fileName];
|
||||
NSData *data = [NSData dataWithContentsOfFile:path];
|
||||
// [weakSelf.karaokeView reset];
|
||||
[weakSelf layoutSubviews];
|
||||
[weakSelf.karaokeView setProgressWithProgress:0];
|
||||
LyricModel *model = [KaraokeView parseLyricDataWithLyricFileData:data pitchFileData:nil lyricOffset:0 includeCopyrightSentence:YES];
|
||||
[weakSelf.karaokeView setLyricDataWithData:model usingInternalScoring:NO];
|
||||
}];
|
||||
|
||||
}
|
||||
-(void)setProgress:(NSUInteger)progress{
|
||||
_progress = progress;
|
||||
[self.karaokeView setProgressWithProgress:progress];
|
||||
if ([self.songInfo.user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) {
|
||||
double time = progress/1000.0+1;
|
||||
if (ceil(time) >= self.songInfo.duration) {
|
||||
[self nextAction];
|
||||
}
|
||||
}
|
||||
}
|
||||
-(void)setSpeakerPitch:(double)speakerPitch{
|
||||
_speakerPitch = speakerPitch;
|
||||
[self.karaokeView setPitchWithSpeakerPitch:speakerPitch progressInMs:1];
|
||||
}
|
||||
-(void)layoutSubviews{
|
||||
[super layoutSubviews];
|
||||
self.leftBgView.frame = CGRectMake(16, 44, ScaleWidth(263), ScaleWidth(277));
|
||||
self.leftBgImageView.frame = self.leftBgView.bounds;
|
||||
|
||||
self.currentInfoLabel.frame = CGRectMake(12, 12, ScaleWidth(134), 18);
|
||||
self.nextInfoLabel.frame = CGRectMake(12, self.leftBgView.height-18-12, ScaleWidth(134), 18);
|
||||
self.tipsLabel.frame = CGRectMake(12, (self.nextInfoLabel.top-self.currentInfoLabel.bottom-30)/2+18, ScaleWidth(183), 30);
|
||||
self.songCoverCycleImageView.frame = CGRectMake((ScaleWidth(183)-12-55)/2+12, self.currentInfoLabel.bottom+10, 55, 55);
|
||||
self.songCoverImageView.frame = CGRectMake(15, 15, 25, 25);
|
||||
|
||||
|
||||
self.karaokeView.frame = CGRectMake(12, self.songCoverCycleImageView.bottom+10, ScaleWidth(183), self.nextInfoLabel.top-self.songCoverCycleImageView.bottom-20);
|
||||
// self.songCoverImageView.centerX = self.karaokeView.centerX;
|
||||
// self.karaokeView.lyricsView.frame = self.karaokeView.bounds;
|
||||
self.singerSeatView.frame = CGRectMake(self.leftBgView.width-ScaleWidth(52)-12, 12, ScaleWidth(52), 51+ScaleWidth(52-10));
|
||||
|
||||
|
||||
self.originalBtn.frame = CGRectMake(self.leftBgView.width-12-35, self.singerSeatView.bottom+5, 50, 35);
|
||||
self.giveBtn.frame = CGRectMake(self.originalBtn.left, self.originalBtn.bottom+5, 50, 35);
|
||||
self.nextBtn.frame = CGRectMake(self.originalBtn.left, self.giveBtn.bottom+5, 50, 35);
|
||||
self.endBtn.frame = CGRectMake(self.originalBtn.left, self.nextBtn.bottom+5, 50, 35);
|
||||
// self.ktvConifgBtn.frame = CGRectMake(self.originalBtn.left, self.nextBtn.bottom+5, 50, 35);
|
||||
|
||||
self.originalBtn.centerX = self.singerSeatView.centerX;
|
||||
self.giveBtn.centerX = self.singerSeatView.centerX;
|
||||
self.nextBtn.centerX = self.singerSeatView.centerX;
|
||||
self.endBtn.centerX = self.singerSeatView.centerX;
|
||||
// self.ktvConifgBtn.centerX = self.singerSeatView.centerX;
|
||||
|
||||
[self.originalBtn qx_layoutButtonNOSizeToFitWithEdgeInsetsStyle:(QXButtonEdgeInsetsStyleTop) imageTitleSpace:2];
|
||||
[self.giveBtn qx_layoutButtonNOSizeToFitWithEdgeInsetsStyle:(QXButtonEdgeInsetsStyleTop) imageTitleSpace:2];
|
||||
[self.nextBtn qx_layoutButtonNOSizeToFitWithEdgeInsetsStyle:(QXButtonEdgeInsetsStyleTop) imageTitleSpace:2];
|
||||
[self.endBtn qx_layoutButtonNOSizeToFitWithEdgeInsetsStyle:(QXButtonEdgeInsetsStyleTop) imageTitleSpace:2];
|
||||
// [self.ktvConifgBtn qx_layoutButtonNOSizeToFitWithEdgeInsetsStyle:(QXButtonEdgeInsetsStyleTop) imageTitleSpace:2];
|
||||
|
||||
self.compereView.frame = CGRectMake(self.width-10-ScaleWidth(52), 0, ScaleWidth(52), 51+ScaleWidth(52-10));
|
||||
self.guestView.frame = CGRectMake(self.width-10-ScaleWidth(52), self.compereView.bottom, ScaleWidth(52), 51+ScaleWidth(52-10));
|
||||
|
||||
self.collectionView.frame = CGRectMake(self.width-10-ScaleWidth(52), self.guestView.bottom, ScaleWidth(52), self.height-self.guestView.bottom);
|
||||
[self resetBtnWithSongInfo:self.songInfo];
|
||||
}
|
||||
-(void)onKaraokeViewWithView:(KaraokeView *)view didDragTo:(NSUInteger)position{
|
||||
|
||||
}
|
||||
|
||||
- (void)onKaraokeViewWithView:(KaraokeView *)view
|
||||
didFinishLineWith:(LyricLineModel *)model
|
||||
score:(NSInteger)score
|
||||
cumulativeScore:(NSInteger)cumulativeScore
|
||||
lineIndex:(NSInteger)lineIndex lineCount:(NSInteger)lineCount {}
|
||||
|
||||
- (void)onLogWithContent:(NSString *)content tag:(NSString *)tag time:(NSString *)time level:(enum LoggerLevel)level {
|
||||
|
||||
}
|
||||
-(void)originalAction:(UIButton*)sender{
|
||||
sender.selected = !sender.selected;
|
||||
[[QXAgoraEngine sharedEngine] ktv_OriginalSingSetting:sender.selected];
|
||||
}
|
||||
-(void)setRoomModel:(QXRoomModel *)roomModel{
|
||||
_roomModel = roomModel;
|
||||
QXRoomPitModel *singer = self.singerSeatView.pitModel;
|
||||
if (singer == nil) {
|
||||
singer = [[QXRoomPitModel alloc] init];
|
||||
}
|
||||
singer.user_id = self.roomModel.song_user_info.user_id;
|
||||
singer.avatar = self.roomModel.song_user_info.avatar;
|
||||
singer.nickname = self.roomModel.song_user_info.nickname;
|
||||
singer.charm = self.roomModel.song_user_info.charm;
|
||||
singer.dress = self.roomModel.song_user_info.dress;
|
||||
[self.dataArray removeAllObjects];
|
||||
self.singerSeatView.pitModel = singer;
|
||||
for (QXRoomPitModel *model in roomModel.room_info.pit_list) {
|
||||
if (model.pit_number.intValue == 9) {
|
||||
self.compereView.pitModel = model;
|
||||
continue;
|
||||
}
|
||||
if (model.pit_number.intValue == 10) {
|
||||
self.guestView.pitModel = model;
|
||||
continue;
|
||||
}
|
||||
// if (model.user_id.longLongValue > 0) {
|
||||
// [self.dataArray addObject:model];
|
||||
// }
|
||||
|
||||
}
|
||||
if (self.roomModel.user_info.pit_number.intValue > 0) {
|
||||
self.myPitNumber = self.roomModel.user_info.pit_number.intValue;
|
||||
}else{
|
||||
self.myPitNumber = -1;
|
||||
}
|
||||
self.songInfo = self.roomModel.song_user_info;
|
||||
self.dataArray= [NSMutableArray arrayWithArray:self.roomModel.song_pit_list];
|
||||
self.roomModel.song_pit_list = self.dataArray;
|
||||
// [self getRoomRankList];
|
||||
[self.collectionView reloadData];
|
||||
if (self.songInfo == nil) {
|
||||
[self resetBtnWithSongInfo:nil];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
-(void)songRoomCharmRankListDidChanged:(NSArray<QXRoomPitModel *> *)list{
|
||||
// [self.dataArray removeAllObjects];
|
||||
// [self.dataArray addObjectsFromArray:list];
|
||||
// [self.collectionView reloadData];
|
||||
}
|
||||
-(void)getRoomRankList{
|
||||
// MJWeakSelf
|
||||
// [QXMineNetwork roomCharmRankListWithRoomId:self.roomModel.room_info.room_id successBlock:^(NSArray<QXRoomPitModel *> * _Nonnull list) {
|
||||
// [weakSelf.dataArray removeAllObjects];
|
||||
// [weakSelf.dataArray addObjectsFromArray:list];
|
||||
// [weakSelf.collectionView reloadData];
|
||||
// } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
//
|
||||
// }];
|
||||
}
|
||||
|
||||
-(void)clearCharm{
|
||||
QXRoomPitModel *singerModel = self.singerSeatView.pitModel;
|
||||
singerModel.charm = @"0";
|
||||
self.singerSeatView.pitModel = singerModel;
|
||||
|
||||
QXRoomPitModel *compereModel = self.compereView.pitModel;
|
||||
compereModel.charm = @"0";
|
||||
self.compereView.pitModel = compereModel;
|
||||
|
||||
QXRoomPitModel *guestModel = self.guestView.pitModel;
|
||||
guestModel.charm = @"0";
|
||||
self.guestView.pitModel = guestModel;
|
||||
|
||||
for (QXRoomPitModel *md in self.dataArray) {
|
||||
md.charm = @"0";
|
||||
}
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId{
|
||||
QXRoomPitModel *singerModel = self.singerSeatView.pitModel;
|
||||
if ([singerModel.user_id isEqualToString:userId]) {
|
||||
singerModel.charm = @"0";
|
||||
self.singerSeatView.pitModel = singerModel;
|
||||
}
|
||||
|
||||
QXRoomPitModel *compereModel = self.compereView.pitModel;
|
||||
if ([compereModel.user_id isEqualToString:userId]) {
|
||||
compereModel.charm = @"0";
|
||||
self.compereView.pitModel = compereModel;
|
||||
}
|
||||
|
||||
QXRoomPitModel *guestModel = self.guestView.pitModel;
|
||||
if ([guestModel.user_id isEqualToString:userId]) {
|
||||
guestModel.charm = @"0";
|
||||
self.guestView.pitModel = guestModel;
|
||||
}
|
||||
|
||||
for (QXRoomPitModel *md in self.dataArray) {
|
||||
if ([userId isEqualToString:md.user_id]) {
|
||||
md.charm = @"0";
|
||||
break;
|
||||
}
|
||||
}
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model{
|
||||
QXRoomPitModel *singerModel = self.singerSeatView.pitModel;
|
||||
if ([singerModel.user_id isEqualToString:model.user_id]) {
|
||||
// singerModel.charm = model.charm;
|
||||
// self.singerSeatView.pitModel = singerModel;
|
||||
[self.singerSeatView updateUserCharm:model.charm];
|
||||
}
|
||||
QXRoomPitModel *compereModel = self.compereView.pitModel;
|
||||
if ([compereModel.user_id isEqualToString:model.user_id]) {
|
||||
// compereModel.charm = model.charm;
|
||||
// self.compereView.pitModel = compereModel;
|
||||
[self.compereView updateUserCharm:model.charm];
|
||||
return;
|
||||
}
|
||||
QXRoomPitModel *guestModel = self.guestView.pitModel;
|
||||
if ([guestModel.user_id isEqualToString:model.user_id]) {
|
||||
// guestModel.charm = model.charm;
|
||||
// self.guestView.pitModel = guestModel;
|
||||
[self.guestView updateUserCharm:model.charm];
|
||||
return;
|
||||
}
|
||||
|
||||
for (QXRoomPitModel *md in self.dataArray) {
|
||||
if ([model.user_id isEqualToString:md.user_id]) {
|
||||
md.charm = model.charm;
|
||||
break;
|
||||
}
|
||||
}
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel *> *)users{
|
||||
for (QXUserHomeModel*model in users) {
|
||||
[self setSeatCharmWithUser:model];
|
||||
}
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user{
|
||||
QXRoomPitModel *singerModel = self.singerSeatView.pitModel;
|
||||
if ([singerModel.user_id isEqualToString:user.user_id]) {
|
||||
singerModel.dress = user.dress;
|
||||
singerModel.nickname = user.nickname;
|
||||
singerModel.sex = user.sex;
|
||||
singerModel.avatar = user.avatar;
|
||||
self.singerSeatView.pitModel = singerModel;
|
||||
}
|
||||
QXRoomPitModel *compereModel = self.compereView.pitModel;
|
||||
if ([compereModel.user_id isEqualToString:user.user_id]) {
|
||||
compereModel.dress = user.dress;
|
||||
compereModel.nickname = user.nickname;
|
||||
compereModel.sex = user.sex;
|
||||
compereModel.avatar = user.avatar;
|
||||
self.compereView.pitModel = compereModel;
|
||||
}
|
||||
QXRoomPitModel *guestModel = self.guestView.pitModel;
|
||||
if ([guestModel.user_id isEqualToString:user.user_id]) {
|
||||
guestModel.dress = user.dress;
|
||||
guestModel.nickname = user.nickname;
|
||||
guestModel.sex = user.sex;
|
||||
guestModel.avatar = user.avatar;
|
||||
self.guestView.pitModel = guestModel;
|
||||
}
|
||||
for (QXRoomPitModel *md in self.dataArray) {
|
||||
if ([user.user_id isEqualToString:md.user_id]) {
|
||||
md.dress = user.dress;
|
||||
md.nickname = user.nickname;
|
||||
md.sex = user.sex;
|
||||
md.avatar = user.avatar;
|
||||
break;
|
||||
}
|
||||
}
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
|
||||
|
||||
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
|
||||
return self.dataArray.count;
|
||||
}
|
||||
|
||||
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
|
||||
QXSongSeatCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXSongSeatCell" forIndexPath:indexPath];
|
||||
QXRoomPitModel *model = self.dataArray[indexPath.row];
|
||||
cell.seatContentView.pitModel = model;
|
||||
cell.seatContentView.delegate = self;
|
||||
return cell;
|
||||
}
|
||||
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
|
||||
// QXRoomPitModel *model = self.dataArray[indexPath.row];
|
||||
// self.userInfoView.isUpSeat = YES;
|
||||
// self.userInfoView.roomId = self.roomModel.room_info.room_id;
|
||||
//// self.userInfoView.pitNumber = [NSString stringWithFormat:@"%ld",seatView.number];
|
||||
// self.userInfoView.userId = model.user_id;
|
||||
// [self.userInfoView showInView:self.viewController.view];
|
||||
// if (self.delegate && [self.delegate respondsToSelector:@selector(didClickUserHeaderWithPitModel:userModel:isPkRoom:pkRoomId:isNoTakeOff:)]) {
|
||||
// [self.delegate didClickUserHeaderWithPitModel:model userModel:nil isPkRoom:NO pkRoomId:@"" isNoTakeOff:NO];
|
||||
// }
|
||||
}
|
||||
|
||||
-(void)nextAction{
|
||||
if (self.songInfo) {
|
||||
[QXMineNetwork nextSongWithRoomId:self.roomModel.room_info.room_id now_did:self.songInfo.did successBlock:^(NSDictionary * _Nonnull dict) {
|
||||
showToast(@"成功");
|
||||
// [[QXAgoraEngine sharedEngine] ktv_EndSing];
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
showToast(msg);
|
||||
}];
|
||||
}
|
||||
|
||||
}
|
||||
-(void)endAction{
|
||||
[QXMineNetwork endSongWithRoomId:self.roomModel.room_info.room_id successBlock:^(NSDictionary * _Nonnull dict) {
|
||||
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
-(void)setSongInfo:(QXSongListModel *)songInfo{
|
||||
[self.singerSeatView stopAudioAnimation];
|
||||
[self.karaokeView reset];
|
||||
_songInfo = songInfo;
|
||||
self.roomModel.song_user_info = songInfo;
|
||||
if ([songInfo.user_id isEqualToString:[QXGlobal shareGlobal].loginModel.user_id]) {
|
||||
if (self.myPitNumber > 0) {
|
||||
/// 我在麦上
|
||||
[[QXAgoraEngine sharedEngine] setClientRoleBroadcaster:YES];
|
||||
[[QXAgoraEngine sharedEngine] muteLocalAudioStream:NO];
|
||||
[[QXAgoraEngine sharedEngine] ktv_EndSing];
|
||||
[[QXAgoraEngine sharedEngine] ktv_StartSing:YES withSong:songInfo];
|
||||
}else{
|
||||
// 打开角色
|
||||
[[QXAgoraEngine sharedEngine] setClientRoleBroadcaster:YES];
|
||||
[[QXAgoraEngine sharedEngine] muteLocalAudioStream:NO];
|
||||
[[QXAgoraEngine sharedEngine] enableAudio:YES];
|
||||
[[QXAgoraEngine sharedEngine] ktv_EndSing];
|
||||
[[QXAgoraEngine sharedEngine] ktv_StartSing:YES withSong:songInfo];
|
||||
}
|
||||
self.originalBtn.selected = NO;
|
||||
}else{
|
||||
if (self.myPitNumber > 0) {
|
||||
|
||||
}else{
|
||||
[[QXAgoraEngine sharedEngine] setClientRoleBroadcaster:NO];
|
||||
[[QXAgoraEngine sharedEngine] enableAudio:NO];
|
||||
}
|
||||
[[QXAgoraEngine sharedEngine] ktv_EndSing];
|
||||
[[QXAgoraEngine sharedEngine] ktv_LoadLrcWithSong:songInfo];
|
||||
}
|
||||
if (songInfo) {
|
||||
self.currentInfoLabel.text = [NSString stringWithFormat:@"当前播放 %@",songInfo.song_name];
|
||||
[self.songCoverImageView sd_setImageWithURL:[NSURL URLWithString:songInfo.poster]];
|
||||
[self.leftBgImageView sd_setImageWithURL:[NSURL URLWithString:songInfo.poster]];
|
||||
}else{
|
||||
self.currentInfoLabel.text = @"当前播放 无";
|
||||
self.songCoverImageView.image = [UIImage imageNamed:@"user_header_placehoulder"];
|
||||
self.leftBgImageView.image = nil;
|
||||
[self.singerSeatView stopAudioAnimation];
|
||||
}
|
||||
|
||||
QXRoomPitModel *singer = self.singerSeatView.pitModel;
|
||||
if (singer == nil) {
|
||||
singer = [[QXRoomPitModel alloc] init];
|
||||
}
|
||||
singer.user_id = songInfo.user_id;
|
||||
singer.avatar = songInfo.avatar;
|
||||
singer.nickname = songInfo.nickname;
|
||||
singer.charm = songInfo.charm;
|
||||
singer.dress = songInfo.dress;
|
||||
self.singerSeatView.pitModel = singer;
|
||||
// if (singer.user_id.intValue > 0) {
|
||||
// [self.seatDict setObject:self.singerSeatView forKey:singer.user_id];
|
||||
// }
|
||||
// [self resetBtnWithSongInfo:songInfo];
|
||||
// if (self.songInfo == nil) {
|
||||
[self resetBtnWithSongInfo:songInfo];
|
||||
// }
|
||||
}
|
||||
|
||||
-(void)setNextInfo:(QXSongListModel *)nextInfo{
|
||||
_nextInfo = nextInfo;
|
||||
if (nextInfo) {
|
||||
self.nextInfoLabel.text = [NSString stringWithFormat:@"下一首 %@",nextInfo.song_name];
|
||||
}else{
|
||||
self.nextInfoLabel.text = [NSString stringWithFormat:@"下一首 %@",@"无"];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(void)resetBtnWithSongInfo:(QXSongListModel*)songInfo{
|
||||
|
||||
if ([songInfo.user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) {
|
||||
/// 自己是演唱者 展示 伴唱原唱 切歌 隐藏 打赏按钮
|
||||
self.originalBtn.hidden = NO;
|
||||
self.originalBtn.top = self.singerSeatView.bottom+5;
|
||||
self.giveBtn.hidden = YES;
|
||||
|
||||
self.nextBtn.hidden = NO;
|
||||
self.nextBtn.top = self.originalBtn.bottom+5;
|
||||
if (self.myPitNumber == 9) {
|
||||
/// 我是主持人 显示 结束和K歌设置
|
||||
self.endBtn.hidden = NO;
|
||||
self.endBtn.top = self.nextBtn.bottom+5;
|
||||
// self.ktvConifgBtn.hidden = NO;
|
||||
// self.ktvConifgBtn.top = self.endBtn.bottom+5;
|
||||
}else{
|
||||
self.endBtn.hidden = YES;
|
||||
// 不是主持人 显示K歌设置
|
||||
// self.ktvConifgBtn.hidden = NO;
|
||||
// self.ktvConifgBtn.top = self.nextBtn.bottom+5;
|
||||
}
|
||||
}else{
|
||||
if (songInfo == nil) {
|
||||
if (self.myPitNumber == 9) {
|
||||
/// 是主持
|
||||
self.originalBtn.hidden = YES;
|
||||
self.giveBtn.hidden = YES;
|
||||
self.nextBtn.hidden = YES;
|
||||
self.endBtn.hidden = NO;
|
||||
}else{
|
||||
self.originalBtn.hidden = YES;
|
||||
self.giveBtn.hidden = YES;
|
||||
self.nextBtn.hidden = YES;
|
||||
self.endBtn.hidden = YES;
|
||||
}
|
||||
|
||||
}else{
|
||||
/// 不是演唱者 显示 打赏
|
||||
self.originalBtn.hidden = YES;
|
||||
// self.ktvConifgBtn.hidden = YES;
|
||||
self.giveBtn.hidden = NO;
|
||||
self.giveBtn.top = self.singerSeatView.bottom+5;
|
||||
if (self.myPitNumber == 9) {
|
||||
/// 是主持
|
||||
self.nextBtn.hidden = NO;
|
||||
self.nextBtn.top = self.giveBtn.bottom+5;
|
||||
self.endBtn.hidden = NO;
|
||||
self.endBtn.top = self.nextBtn.bottom+5;
|
||||
}else{
|
||||
// self.ktvConifgBtn.hidden = YES;
|
||||
self.originalBtn.hidden = YES;
|
||||
self.nextBtn.hidden = YES;
|
||||
self.endBtn.hidden = YES;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setAction{
|
||||
|
||||
}
|
||||
-(void)giveAction{
|
||||
if (self.singerSeatView.pitModel.user_id.intValue <= 0) {
|
||||
return;
|
||||
}
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(sendGiftWithUser:)]) {
|
||||
[self.delegate sendGiftWithUser:self.singerSeatView.pitModel];
|
||||
}
|
||||
}
|
||||
-(void)stopHWDMP4{
|
||||
[self.singerSeatView stopHWDMP4];
|
||||
[self.guestView stopHWDMP4];
|
||||
[self.compereView stopHWDMP4];
|
||||
}
|
||||
-(void)playHWDMP4{
|
||||
[self.singerSeatView playHWDMP4];
|
||||
[self.guestView playHWDMP4];
|
||||
[self.compereView playHWDMP4];
|
||||
[self.collectionView reloadData];
|
||||
}
|
||||
-(void)destroyViews{
|
||||
[self.singerSeatView destroyViews];
|
||||
[self.guestView destroyViews];
|
||||
[self.compereView destroyViews];
|
||||
[self.karaokeView removeFromSuperview];
|
||||
self.karaokeView = nil;
|
||||
}
|
||||
|
||||
-(UIButton *)originalBtn{
|
||||
if (!_originalBtn) {
|
||||
_originalBtn = [[UIButton alloc] init];
|
||||
[_originalBtn setImage:[UIImage imageNamed:@"room_song_original_nor"] forState:(UIControlStateNormal)];
|
||||
[_originalBtn setImage:[UIImage imageNamed:@"room_song_original_sel"] forState:(UIControlStateSelected)];
|
||||
[_originalBtn setTitle:QXText(@"伴奏") forState:(UIControlStateNormal)];
|
||||
[_originalBtn setTitle:QXText(@"原唱") forState:(UIControlStateSelected)];
|
||||
[_originalBtn setTitleColor:UIColor.whiteColor forState:(UIControlStateNormal)];
|
||||
[_originalBtn setTitleColor:QXConfig.themeColor forState:(UIControlStateSelected)];
|
||||
_originalBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
[_originalBtn addTarget:self action:@selector(originalAction:) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
}
|
||||
return _originalBtn;
|
||||
}
|
||||
-(UIButton *)giveBtn{
|
||||
if (!_giveBtn) {
|
||||
_giveBtn = [[UIButton alloc] init];
|
||||
[_giveBtn setImage:[UIImage imageNamed:@"room_song_give"] forState:(UIControlStateNormal)];
|
||||
[_giveBtn setTitle:QXText(@"打赏") forState:(UIControlStateNormal)];
|
||||
[_giveBtn setTitleColor:QXConfig.themeColor forState:(UIControlStateNormal)];
|
||||
[_giveBtn addTarget:self action:@selector(giveAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
_giveBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
}
|
||||
return _giveBtn;
|
||||
}
|
||||
-(UIButton *)nextBtn{
|
||||
if (!_nextBtn) {
|
||||
_nextBtn = [[UIButton alloc] init];
|
||||
[_nextBtn setImage:[UIImage imageNamed:@"room_song_next"] forState:(UIControlStateNormal)];
|
||||
[_nextBtn setTitle:QXText(@"切歌") forState:(UIControlStateNormal)];
|
||||
[_nextBtn setTitleColor:QXConfig.themeColor forState:(UIControlStateNormal)];
|
||||
_nextBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
[_nextBtn addTarget:self action:@selector(nextAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
}
|
||||
return _nextBtn;
|
||||
}
|
||||
-(UIButton *)endBtn{
|
||||
if (!_endBtn) {
|
||||
_endBtn = [[UIButton alloc] init];
|
||||
[_endBtn setImage:[UIImage imageNamed:@"room_song_close"] forState:(UIControlStateNormal)];
|
||||
[_endBtn setTitle:QXText(@"结束") forState:(UIControlStateNormal)];
|
||||
[_endBtn setTitleColor:QXConfig.themeColor forState:(UIControlStateNormal)];
|
||||
_endBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
[_endBtn addTarget:self action:@selector(endAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
}
|
||||
return _endBtn;
|
||||
}
|
||||
//-(UIButton *)ktvConifgBtn{
|
||||
// if (!_ktvConifgBtn) {
|
||||
// _ktvConifgBtn = [[UIButton alloc] init];
|
||||
// [_ktvConifgBtn setImage:[UIImage imageNamed:@"room_sing_set"] forState:(UIControlStateNormal)];
|
||||
// [_ktvConifgBtn setTitle:QXText(@"设置") forState:(UIControlStateNormal)];
|
||||
// [_ktvConifgBtn setTitleColor:QXConfig.themeColor forState:(UIControlStateNormal)];
|
||||
// _ktvConifgBtn.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
// [_ktvConifgBtn addTarget:self action:@selector(setAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||||
// }
|
||||
// return _ktvConifgBtn;
|
||||
//}
|
||||
-(UILabel *)tipsLabel{
|
||||
if (!_tipsLabel) {
|
||||
_tipsLabel = [[UILabel alloc] init];
|
||||
_tipsLabel.text = QXText(@"暂无歌曲~");
|
||||
_tipsLabel.font = [UIFont systemFontOfSize:15];
|
||||
_tipsLabel.textColor = [UIColor whiteColor];
|
||||
_tipsLabel.textAlignment = NSTextAlignmentCenter;
|
||||
}
|
||||
return _tipsLabel;
|
||||
}
|
||||
-(NSMutableArray *)dataArray{
|
||||
if (!_dataArray) {
|
||||
_dataArray = [NSMutableArray array];
|
||||
}
|
||||
return _dataArray;
|
||||
}
|
||||
-(QXRoomUserInfoView *)userInfoView{
|
||||
if (!_userInfoView) {
|
||||
_userInfoView = [[QXRoomUserInfoView alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
||||
}
|
||||
return _userInfoView;
|
||||
}
|
||||
-(UIImageView *)leftBgImageView{
|
||||
if (!_leftBgImageView) {
|
||||
_leftBgImageView = [[UIImageView alloc] init];
|
||||
}
|
||||
return _leftBgImageView;
|
||||
}
|
||||
|
||||
@end
|
||||
121
QXLive/Room(房间)/View/麦位视图/QXRoomSeatView.h
Normal file
121
QXLive/Room(房间)/View/麦位视图/QXRoomSeatView.h
Normal file
@@ -0,0 +1,121 @@
|
||||
//
|
||||
// QXRoomSeatView.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/7.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomSeatTypeNormalView.h"
|
||||
#import "QXRoomModel.h"
|
||||
#import "QXRoomSeatDelegate.h"
|
||||
#import "QXRoomFriendRelationModel.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
typedef NS_ENUM(NSInteger) {
|
||||
QXRoomSeatViewTypeNone = 0,
|
||||
/// 二卡八麦
|
||||
QXRoomSeatViewTypeNormal ,
|
||||
/// 拍卖
|
||||
QXRoomSeatViewTypeAuction,
|
||||
/// 点唱
|
||||
QXRoomSeatViewTypeSing,
|
||||
/// 小黑屋
|
||||
QXRoomSeatViewTypeCabin,
|
||||
/// pk
|
||||
QXRoomSeatViewTypePK,
|
||||
/// 交友房
|
||||
QXRoomSeatViewTypeFriend,
|
||||
}QXRoomSeatViewType;
|
||||
|
||||
|
||||
@interface QXRoomSeatView : UIView
|
||||
-(instancetype)initWithType:(QXRoomSeatViewType)type;
|
||||
@property (nonatomic,assign) QXRoomSeatViewType type;
|
||||
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
|
||||
|
||||
@property (nonatomic,strong)QXRoomModel *roomModel;
|
||||
@property (nonatomic,strong)QXRoomModel *pkRoomModel;
|
||||
|
||||
@property (nonatomic,assign)NSInteger myPitNumber;
|
||||
|
||||
@property (nonatomic,strong)NSString *lrcUrl;
|
||||
@property (nonatomic,assign)NSUInteger progress;
|
||||
@property (nonatomic,assign)double speakerPitch;
|
||||
@property (nonatomic,strong)QXSongListModel *songInfo;
|
||||
@property (nonatomic,strong)QXSongListModel *nextInfo;
|
||||
|
||||
-(void)stopHWDMP4;
|
||||
-(void)playHWDMP4;
|
||||
/// 销毁视图
|
||||
-(void)destroyViews;
|
||||
|
||||
/// 清除魅力
|
||||
-(void)clearCharm;
|
||||
/// 清除个人魅力
|
||||
-(void)roomClearUserCharmWithUserId:(NSString *)userId;
|
||||
/// 设置魅力
|
||||
-(void)setSeatCharmWithUser:(QXUserHomeModel*)model;
|
||||
/// 设置魅力(多个用户)
|
||||
-(void)setSeatCharmWithUsers:(NSArray<QXUserHomeModel*>*)users;
|
||||
/// 设置麦位锁麦状态
|
||||
-(void)setSeatIsLock:(NSString*)isLock pitNumber:(NSString*)pitNumber;
|
||||
|
||||
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number;
|
||||
/// 房间内用户信息发生变化
|
||||
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
|
||||
/// 房间内换麦
|
||||
-(void)roomSeatExchangedWithFromPitNumber:(NSInteger)fromPitNumber toPitNumber:(NSInteger)toPitNumber userInfo:(QXUserHomeModel*)userInfo;
|
||||
|
||||
|
||||
|
||||
/// 拍卖位上下麦
|
||||
-(void)didAuctiontUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat;
|
||||
/// 开始拍卖
|
||||
-(void)auctionStartOrEndIsStart:(BOOL)isStart user:(QXRoomAuctionUser *)user getUser:(QXRoomAuctionUser *)getUser;
|
||||
/// 竞拍列表发生变化
|
||||
-(void)auctionListDidChanged:(NSArray<QXRoomPitModel*> *)list;
|
||||
/// 拍卖时间发生延时
|
||||
-(void)auctionDelayTimeWithEndTime:(NSString *)endTime;
|
||||
/// 拍卖类型发生变化
|
||||
-(void)auctionTypeDidChanged:(NSString *)type;
|
||||
|
||||
|
||||
|
||||
/// 私密小屋心动值发生变化
|
||||
-(void)cabinRoomHotValueDidChanged:(NSString*)hot_value;
|
||||
|
||||
/// k歌房魅力榜单发生变化
|
||||
-(void)songRoomCharmRankListDidChanged:(NSArray<QXRoomPitModel *>*)list;
|
||||
|
||||
/// pk开始
|
||||
-(void)pkStartWithPkEndTimes:(NSString *)pk_end_times pk_id:(NSString*)pk_id;
|
||||
/// pk值发生变化
|
||||
-(void)roomPKValueDidChangedWithRoomIdA:(NSString*)room_id_a create_value_a:(NSString*)create_value_a room_id_b:(NSString*)room_id_b receive_value_b:(NSString*)receive_value_b;
|
||||
/// pk结果
|
||||
-(void)pkResultWithIsVictory:(NSInteger)isVictory
|
||||
end_time:(NSString*)end_time
|
||||
victory_name:(NSString*)victory_name
|
||||
victory_cover:(NSString*)victory_cover
|
||||
defeated_name:(NSString*)defeated_name
|
||||
defeated_cover:(NSString*)defeated_cover;
|
||||
|
||||
|
||||
|
||||
/// 交友房阶段发生变化 step 阶段 1等待 2心动 3牵手 friend_id 场次id
|
||||
-(void)friendPartDidChangedWithType:(NSString*)step friend_id:(NSString*)friend_id end_time:(NSString*)end_time relationModel:(QXRoomFriendRelationModel*)relationModel;
|
||||
/// 交友房时间发生延时 end_time 截止时间
|
||||
-(void)friendTimeDelayWithTime:(NSString*)end_time;
|
||||
/// 交友房麦位发生变化
|
||||
-(void)friendSeatDidChanged:(NSArray<QXRoomPitModel*>*)pitArray;
|
||||
/// 心动值发生变化
|
||||
-(void)friendHeartNumberDidChanged:(NSArray<QXRoomFriendHeartListModel *> *)heartArray;
|
||||
/// 关系创建完成
|
||||
-(void)friendRelationIsCreatedWithrelationModel:(QXRoomFriendRelationModel*)relationModel;
|
||||
/// 有人退出交友房私密小屋
|
||||
-(void)friendCabinRoomIsQuit;
|
||||
/// 私密小屋时间发生延时
|
||||
-(void)friendCabinRoomTimeDelayWithTime:(NSString*)end_time;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
1415
QXLive/Room(房间)/View/麦位视图/QXRoomSeatView.m
Normal file
1415
QXLive/Room(房间)/View/麦位视图/QXRoomSeatView.m
Normal file
File diff suppressed because it is too large
Load Diff
17
QXLive/Room(房间)/View/麦位视图/QXSongSeatCell.h
Normal file
17
QXLive/Room(房间)/View/麦位视图/QXSongSeatCell.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// QXSongSeatCell.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/18.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomSeatContentView.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface QXSongSeatCell : UICollectionViewCell
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *seatContentView;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
35
QXLive/Room(房间)/View/麦位视图/QXSongSeatCell.m
Normal file
35
QXLive/Room(房间)/View/麦位视图/QXSongSeatCell.m
Normal file
@@ -0,0 +1,35 @@
|
||||
//
|
||||
// QXSongSeatCell.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/18.
|
||||
//
|
||||
|
||||
#import "QXSongSeatCell.h"
|
||||
|
||||
@implementation QXSongSeatCell
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)initSubviews{
|
||||
self.seatContentView = [[QXRoomSeatContentView alloc] init];
|
||||
self.seatContentView.onlyShowHeader = NO;
|
||||
[self.contentView addSubview: self.seatContentView];
|
||||
[self.seatContentView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.top.bottom.equalTo(self.contentView);
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
- (void)awakeFromNib {
|
||||
[super awakeFromNib];
|
||||
// Initialization code
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user