This commit is contained in:
启星
2025-08-08 10:49:36 +08:00
parent 6400cf78bb
commit b5ce3d580a
8780 changed files with 978183 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
//
// QXRoomSeatContentView.h
// QXLive
//
// Created by 启星 on 2025/6/7.
//
#import <UIKit/UIKit.h>
#import "QXRoomModel.h"
#import "QXSongListModel.h"
typedef NS_ENUM(NSInteger) {
/// 名称名称在下显示魅力
QXRoomSeatContentViewTypeNormal = 0,
/// 名称在右
QXRoomSeatContentViewTypeAuction
}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,assign)QXRoomSeatContentViewType type;
//@property (nonatomic,strong)QXRoomOwnerModel *userModel ;
- (void)startAudioAnimation ;
/// 暂停麦位动画
- (void)stopAudioAnimation ;
-(void)hideCharm;
-(void)destroyViews;
@end
NS_ASSUME_NONNULL_END

View File

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

View File

@@ -0,0 +1,30 @@
//
// QXRoomSeatDelegate.h
// QXLive
//
// Created by 启星 on 2025/6/24.
//
#import "QXRoomModel.h"
@protocol QXRoomSeatDelegate <NSObject>
@optional
//-(void)didClickUserHeaderWithPitModel:(QXRoomPitModel*)pitModel userModel:(id)userModel;
-(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;
@end

View File

@@ -0,0 +1,65 @@
//
// 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)setSeatCharmWithUser:(QXUserHomeModel *)model;
/// 设置麦位锁麦状态
-(void)setSeatIsLock:(NSString*)isLock pitNumber:(NSString*)pitNumber;
/// 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)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

View File

@@ -0,0 +1,611 @@
//
// 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)roomUserInfoDidChanged:(QXUserHomeModel *)user{
[self.leftSeatView roomUserInfoDidChanged:user];
}
-(void)clearCharm{
[self.leftSeatView clearCharm];
}
-(void)setSeatIsLock:(NSString *)isLock pitNumber:(NSString *)pitNumber{
[self.leftSeatView setSeatIsLock:isLock pitNumber:pitNumber];
}
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model{
[self.leftSeatView setSeatCharmWithUser:model];
}
-(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

View File

@@ -0,0 +1,64 @@
//
// QXRoomSeatTypeAuctionView.h
// QXLive
//
// Created by 启星 on 2025/6/23.
//
#import <UIKit/UIKit.h>
#import "QXRoomSeatContentView.h"
#import "QXRoomSeatDelegate.h"
#import "QXUserModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXRoomSeatTypeAuctionView : UIView
@property (nonatomic,weak)id<QXRoomSeatDelegate>delegate;
@property (nonatomic,strong)QXRoomModel *roomModel;
@property (nonatomic,assign)NSInteger myPitNumber;
-(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)roomUserInfoDidChanged:(QXUserHomeModel *)user;
-(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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,20 @@
//
// 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;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,286 @@
//
// 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 *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.timeDownBgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_cabin_timedown_bg"]];
self.timeDownBgView.contentMode = UIViewContentModeScaleToFill;
[self addSubview:self.timeDownBgView];
[self.timeDownBgView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(96);
make.top.mas_equalTo(ScaleWidth(102));
make.width.mas_equalTo(SCREEN_WIDTH-96*2);
make.height.mas_equalTo(24);
}];
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.left.top.bottom.right.equalTo(self.timeDownBgView);
}];
self.leftSeatView = [[QXRoomSeatContentView alloc] init];
[self addSubview:self.leftSeatView];
[self.leftSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(36);
make.width.mas_equalTo(ScaleWidth(65));
make.height.mas_equalTo(ScaleWidth(65)+25);
make.top.equalTo(self.timeDownBgView.mas_bottom).offset(24);
}];
self.rightSeatView = [[QXRoomSeatContentView alloc] init];
[self addSubview:self.rightSeatView];
[self.rightSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.leftSeatView);
make.left.mas_equalTo(SCREEN_WIDTH-ScaleWidth(65)-36);
make.width.mas_equalTo(ScaleWidth(65));
make.height.mas_equalTo(ScaleWidth(65)+25);
}];
//
//
//
self.heartCenterImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_cabin_heart"]];
[self addSubview:self.heartCenterImageView];
[self.heartCenterImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.leftSeatView.mas_right);
make.right.equalTo(self.rightSeatView.mas_left);
make.height.mas_equalTo(ScaleWidth(76));
make.centerY.equalTo(self.leftSeatView).offset(-15);
}];
self.numberLabel = [[UILabel alloc] init];
self.numberLabel.text = @"0";
self.numberLabel.textAlignment = NSTextAlignmentCenter;
self.numberLabel.textColor = [UIColor colorWithHexString:@"#ffffff"];
self.numberLabel.font = [UIFont systemFontOfSize:12];
[self addSubview:self.numberLabel];
[self.numberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.heartCenterImageView).offset(15);
make.centerX.equalTo(self.heartCenterImageView);
}];
CGFloat margin = (SCREEN_WIDTH-77*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(77);
make.height.mas_equalTo(119);
}];
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(77);
make.height.mas_equalTo(119);
}];
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(77);
make.height.mas_equalTo(119);
}];
// [[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;
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-77*2)/3;
[self.micBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(0);
make.left.mas_equalTo(margin);
make.width.mas_equalTo(77);
make.height.mas_equalTo(119);
}];
[self.giftBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.micBtn);
make.left.equalTo(self.micBtn.mas_right).offset(margin);
make.width.mas_equalTo(77);
make.height.mas_equalTo(119);
}];
}
}
-(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)cabinRoomHotValueDidChanged:(NSString *)hot_value{
self.roomModel.room_info.hot_value = hot_value;
self.numberLabel.text = self.roomModel.room_info.hot_value;
}
-(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)miniRoom{
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
[self.navigationController popViewControllerAnimated:YES];
}
-(void)leaveRoom{
[[QXGlobal shareGlobal]quitRoomWithRoomId:self.roomModel.room_info.room_id];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
[self.navigationController popViewControllerAnimated:YES];
}
@end

View File

@@ -0,0 +1,42 @@
//
// 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)setSeatCharmWithUser:(QXUserHomeModel *)model;
/// 设置麦位锁麦状态
-(void)setSeatIsLock:(NSString*)isLock pitNumber:(NSString*)pitNumber;
/// 房间内用户信息发生变化
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
-(void)destroyViews;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,378 @@
//
// 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()
///
@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.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 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 addTapBlock:^(id _Nonnull obj) {
[weakSelf didClickSeatView:obj];
}];
[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];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self.viewController.view endEditing:YES];
}
-(void)didClickSeatView:(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)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)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;
// if (self.isPKMyRoom || self.isPKOtherRoom) {
// [seatView hideCharm];
// }
break;
}
}
}
-(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)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

View File

@@ -0,0 +1,40 @@
//
// 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)destroyViews;
/// 清除魅力
-(void)clearCharm;
/// 设置魅力
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model;
-(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

View File

@@ -0,0 +1,851 @@
//
// 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
>
///
@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 addTapBlock:^(id _Nonnull obj) {
[weakSelf didClickSeatView:obj];
}];
[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 addTapBlock:^(id _Nonnull obj) {
[weakSelf didClickSeatView:obj];
}];
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 addTapBlock:^(id _Nonnull obj) {
[weakSelf didClickSeatView:obj];
}];
[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)didClickSeatView:(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)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)setSeatCharmWithUser:(QXUserHomeModel *)model{
QXRoomPitModel *singerModel = self.singerSeatView.pitModel;
if ([singerModel.user_id isEqualToString:model.user_id]) {
singerModel.charm = model.charm;
self.singerSeatView.pitModel = singerModel;
}
QXRoomPitModel *compereModel = self.compereView.pitModel;
if ([compereModel.user_id isEqualToString:model.user_id]) {
compereModel.charm = model.charm;
self.compereView.pitModel = compereModel;
return;
}
QXRoomPitModel *guestModel = self.guestView.pitModel;
if ([guestModel.user_id isEqualToString:model.user_id]) {
guestModel.charm = model.charm;
self.guestView.pitModel = guestModel;
return;
}
for (QXRoomPitModel *md in self.dataArray) {
if ([model.user_id isEqualToString:md.user_id]) {
md.charm = model.charm;
break;
}
}
[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;
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)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

View File

@@ -0,0 +1,87 @@
//
// QXRoomSeatView.h
// QXLive
//
// Created by 启星 on 2025/6/7.
//
#import <UIKit/UIKit.h>
#import "QXRoomSeatTypeNormalView.h"
#import "QXRoomModel.h"
#import "QXRoomSeatDelegate.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger) {
QXRoomSeatViewTypeNone = 0,
/// 二卡八麦
QXRoomSeatViewTypeNormal ,
/// 拍卖
QXRoomSeatViewTypeAuction,
/// 点唱
QXRoomSeatViewTypeSing,
/// 小黑屋
QXRoomSeatViewTypeCabin,
/// pk
QXRoomSeatViewTypePK,
}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)destroyViews;
/// 清除魅力
-(void)clearCharm;
/// 设置魅力
-(void)setSeatCharmWithUser:(QXUserHomeModel*)model;
/// 设置麦位锁麦状态
-(void)setSeatIsLock:(NSString*)isLock pitNumber:(NSString*)pitNumber;
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number;
/// 房间内用户信息发生变化
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user;
/// 拍卖位上下麦
-(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;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,874 @@
//
// QXRoomSeatView.m
// QXLive
//
// Created by on 2025/6/7.
//
#import "QXRoomSeatView.h"
#import "QXRoomSeatTypeSongView.h"
#import "QXRoomSeatTypeAuctionView.h"
#import "QXAgoraEngine.h"
#import "QXRoomOnlineUserListView.h"
#import "QXRoomSeatTypeCabinView.h"
#import "QXRoomSeatPKView.h"
@interface QXRoomSeatView()<QXRoomSeatDelegate>
@property (nonatomic,strong)QXRoomSeatTypeNormalView *normalSeatView;
@property (nonatomic,strong)QXRoomSeatTypeSongView *songView;
@property (nonatomic,strong)QXRoomSeatTypeAuctionView *auctionView;
@property (nonatomic,strong) QXRoomOnlineUserListView *onlineListView;
@property (nonatomic,strong)QXRoomSeatTypeCabinView *cabinView;
@property (nonatomic,strong)QXRoomSeatPKView *roomPkView;
@end
@implementation QXRoomSeatView
- (instancetype)initWithType:(QXRoomSeatViewType)type
{
self = [super init];
if (self) {
_type = type;
[self setType:type];
}
return self;
}
//
-(void)initNomarlView{
// if (_songView) {
// [_songView removeFromSuperview];
// _songView = nil;
// }
//
if (_songView) {
// [_normalSeatView removeFromSuperview];
// _normalSeatView = nil;
[[QXAgoraEngine sharedEngine] ktv_EndSing];
_songView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_songView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_songView destroyViews];
[self->_songView removeFromSuperview];
self->_songView = nil;
[self addSubview:self.normalSeatView];
[self.normalSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.normalSeatView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.normalSeatView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
if (_auctionView) {
// [_normalSeatView removeFromSuperview];
// _normalSeatView = nil;
[[QXAgoraEngine sharedEngine] ktv_EndSing];
_auctionView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_auctionView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_auctionView destroyViews];
[self->_auctionView removeFromSuperview];
self->_auctionView = nil;
[self addSubview:self.normalSeatView];
[self.normalSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.normalSeatView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.normalSeatView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
if (_roomPkView) {
_roomPkView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_roomPkView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_roomPkView destroyViews];
[self->_roomPkView removeFromSuperview];
self->_roomPkView = nil;
[self addSubview:self.normalSeatView];
[self.normalSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.normalSeatView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.normalSeatView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
[self addSubview:self.normalSeatView];
[self.normalSeatView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
}
//
-(void)initAuctionView{
if (_normalSeatView) {
// [_normalSeatView removeFromSuperview];
// _normalSeatView = nil;
_normalSeatView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_normalSeatView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_normalSeatView destroyViews];
[self->_normalSeatView removeFromSuperview];
self->_normalSeatView = nil;
[self addSubview:self.auctionView];
[self.auctionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.auctionView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.auctionView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
if (_songView) {
// [_normalSeatView removeFromSuperview];
// _normalSeatView = nil;
[[QXAgoraEngine sharedEngine] ktv_EndSing];
_songView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_songView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_songView destroyViews];
[self->_songView removeFromSuperview];
self->_songView = nil;
[self addSubview:self.auctionView];
[self.auctionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.auctionView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.auctionView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
if (_roomPkView) {
_roomPkView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_roomPkView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_roomPkView destroyViews];
[self->_roomPkView removeFromSuperview];
self->_roomPkView = nil;
[self addSubview:self.auctionView];
[self.auctionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.auctionView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.auctionView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
[self addSubview:self.auctionView];
[self.auctionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
}
//
-(void)initSingView{
if (_normalSeatView) {
// [_normalSeatView removeFromSuperview];
// _normalSeatView = nil;
_normalSeatView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_normalSeatView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_normalSeatView destroyViews];
[self->_normalSeatView removeFromSuperview];
self->_normalSeatView = nil;
[self addSubview:self.songView];
[self.songView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.songView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.songView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
if (_auctionView) {
_auctionView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_auctionView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_auctionView destroyViews];
[self->_auctionView removeFromSuperview];
self->_auctionView = nil;
[self addSubview:self.songView];
[self.songView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.songView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.songView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
if (_roomPkView) {
_roomPkView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_roomPkView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_roomPkView destroyViews];
[self->_roomPkView removeFromSuperview];
self->_roomPkView = nil;
[self addSubview:self.songView];
[self.songView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.songView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.songView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
[self addSubview:self.songView];
[self.songView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
}
- (void)initRoomPKView{
if (_normalSeatView) {
// [_normalSeatView removeFromSuperview];
// _normalSeatView = nil;
_normalSeatView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_normalSeatView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_normalSeatView destroyViews];
[self->_normalSeatView removeFromSuperview];
self->_normalSeatView = nil;
[self addSubview:self.roomPkView];
[self.roomPkView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.roomPkView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.roomPkView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
if (_songView) {
// [_normalSeatView removeFromSuperview];
// _normalSeatView = nil;
[[QXAgoraEngine sharedEngine] ktv_EndSing];
_songView.transform = CGAffineTransformIdentity;
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self->_songView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[self->_songView destroyViews];
[self->_songView removeFromSuperview];
self->_songView = nil;
[self addSubview:self.roomPkView];
[self.roomPkView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
self.roomPkView.transform = CGAffineTransformMakeScale(0.01, 0.01);
//
[UIView animateWithDuration:0.5
delay:0
usingSpringWithDamping:0.9
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.roomPkView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
}];
}];
return;
}
[self addSubview:self.roomPkView];
[self.roomPkView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
}
- (void)initCabinView{
self.cabinView = [[QXRoomSeatTypeCabinView alloc] init];
self.cabinView.delegate = self;
[self addSubview:self.cabinView];
[self.cabinView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self);
}];
}
-(void)setMyPitNumber:(NSInteger)myPitNumber{
_myPitNumber = myPitNumber;
switch (self.type) {
case QXRoomSeatViewTypeNormal:
self.normalSeatView.myPitNumber = myPitNumber;
break;
case QXRoomSeatViewTypeSing:
self.songView.myPitNumber = myPitNumber;
break;
case QXRoomSeatViewTypeAuction:
self.auctionView.myPitNumber = myPitNumber;
break;
case QXRoomSeatViewTypePK:
self.roomPkView.myPitNumber = myPitNumber;
break;
default:
break;
}
}
-(void)setType:(QXRoomSeatViewType)type{
_type = type;
switch (type) {
case QXRoomSeatViewTypeNone:{
}
break;
case QXRoomSeatViewTypeNormal:{
[self initNomarlView];
}
break;
case QXRoomSeatViewTypeAuction:{
[self initAuctionView];
}
break;
case QXRoomSeatViewTypeSing:{
[self initSingView];
}
break;
case QXRoomSeatViewTypeCabin:{
[self initCabinView];
}
break;
case QXRoomSeatViewTypePK:{
[self initRoomPKView];
}
break;
default:
break;
}
}
-(void)setLrcUrl:(NSString *)lrcUrl{
if (_songView) {
_lrcUrl = lrcUrl;
self.songView.lrcUrl = lrcUrl;
}
}
-(void)setProgress:(NSUInteger)progress{
if (_songView) {
_progress = progress;
self.songView.progress = progress;
}
}
-(void)setSpeakerPitch:(double)speakerPitch{
if (_songView) {
_speakerPitch = speakerPitch;
self.songView.speakerPitch = speakerPitch;
}
}
-(void)setSongInfo:(QXSongListModel *)songInfo{
if (_songView) {
_songInfo = songInfo;
self.songView.songInfo = songInfo;
}
}
-(void)setNextInfo:(QXSongListModel *)nextInfo{
if (_songView) {
_nextInfo = nextInfo;
self.songView.nextInfo = nextInfo;
}
}
-(void)setRoomModel:(QXRoomModel *)roomModel{
_roomModel = roomModel;
switch (self.type) {
case QXRoomSeatViewTypeNormal:
self.normalSeatView.roomModel = roomModel;
break;
case QXRoomSeatViewTypeSing:
self.songView.roomModel = roomModel;
break;
case QXRoomSeatViewTypeAuction:
self.auctionView.roomModel = roomModel;
break;
case QXRoomSeatViewTypeCabin:
self.cabinView.roomModel = roomModel;
break;
case QXRoomSeatViewTypePK:
self.roomPkView.roomModel = roomModel;
break;
default:
break;
}
}
-(void)setPkRoomModel:(QXRoomModel *)pkRoomModel{
_pkRoomModel = pkRoomModel;
if (_roomPkView) {
self.roomPkView.pkRoomModel = pkRoomModel;
}
}
-(void)previewUserInfoWithUserId:(NSString *)userId{
[self.onlineListView hide];
_onlineListView = nil;
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickUserHeaderWithPitModel:userModel:isPkRoom:pkRoomId:isNoTakeOff:)]) {
QXRoomOwnerModel *md = [QXRoomOwnerModel new];
md.user_id = userId;
[self.delegate didClickUserHeaderWithPitModel:nil userModel:md isPkRoom:NO pkRoomId:@"" isNoTakeOff:NO];
}
}
-(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:userModel isPkRoom:isPkRoom pkRoomId:pkRoomId isNoTakeOff:isNoTakeOff];
}
}
-(void)auctionGiftAction:(QXRoomPitModel *)user auctionId:(NSString *)auctionId{
if (self.delegate && [self.delegate respondsToSelector:@selector(auctionGiftAction:auctionId:)]) {
[self.delegate auctionGiftAction:user auctionId:auctionId];
}
}
-(void)sendGiftWithUser:(QXRoomPitModel *)user{
if (self.delegate && [self.delegate respondsToSelector:@selector(sendGiftWithUser:)]) {
[self.delegate sendGiftWithUser:user];
}
}
///
-(void)auctionTypeDidChanged:(NSString *)type{
if (_auctionView) {
[self.auctionView auctionTypeDidChanged:type];
return;
}
}
-(void)cabinRoomHotValueDidChanged:(NSString *)hot_value{
if (_cabinView) {
[self.cabinView cabinRoomHotValueDidChanged:hot_value];
}
}
-(void)clearCharm{
switch (self.type) {
case QXRoomSeatViewTypeNormal:
[self.normalSeatView clearCharm];
break;
case QXRoomSeatViewTypeSing:
[self.songView clearCharm];
break;
case QXRoomSeatViewTypeAuction:
break;
case QXRoomSeatViewTypeCabin:
break;
case QXRoomSeatViewTypePK:
[self.roomPkView clearCharm];
break;
default:
break;
}
}
-(void)setSeatCharmWithUser:(QXUserHomeModel *)model{
switch (self.type) {
case QXRoomSeatViewTypeNormal:
[self.normalSeatView setSeatCharmWithUser:model];
break;
case QXRoomSeatViewTypeSing:
[self.songView setSeatCharmWithUser:model];
break;
case QXRoomSeatViewTypeAuction:
[self.auctionView setSeatCharmWithUser:model];
break;
case QXRoomSeatViewTypeCabin:
// self.cabinView.roomModel = roomModel;
break;
case QXRoomSeatViewTypePK:
[self.roomPkView setSeatCharmWithUser:model];
break;
default:
break;
}
}
-(void)setSeatIsLock:(NSString *)isLock pitNumber:(NSString *)pitNumber{
switch (self.type) {
case QXRoomSeatViewTypeNormal:
[self.normalSeatView setSeatIsLock:isLock pitNumber:pitNumber];
break;
case QXRoomSeatViewTypeSing:
// [self.songView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number];
break;
case QXRoomSeatViewTypeAuction:
// [self.auctionView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number];
break;
case QXRoomSeatViewTypeCabin:
// self.cabinView.roomModel = roomModel;
break;
case QXRoomSeatViewTypePK:
[self.roomPkView setSeatIsLock:isLock pitNumber:pitNumber];
break;
default:
break;
}
}
-(void)pkStartWithPkEndTimes:(NSString *)pk_end_times pk_id:(NSString*)pk_id{
if (_roomPkView) {
[self.roomPkView pkStartWithPkEndTimes:pk_end_times pk_id: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{
if (_roomPkView) {
[self.roomPkView roomPKValueDidChangedWithRoomIdA:room_id_a create_value_a:create_value_a room_id_b:room_id_b receive_value_b: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{
if (_roomPkView) {
[self.roomPkView pkResultWithIsVictory:isVictory end_time:end_time victory_name:victory_name victory_cover:victory_cover defeated_name:defeated_name defeated_cover:defeated_cover];
}
}
-(QXRoomSeatTypeNormalView *)normalSeatView{
if (!_normalSeatView) {
_normalSeatView = [[QXRoomSeatTypeNormalView alloc] init];
_normalSeatView.delegate = self;
}
return _normalSeatView;
}
-(QXRoomSeatTypeSongView *)songView{
if (!_songView) {
_songView = [[QXRoomSeatTypeSongView alloc] init];
_songView.delegate = self;
}
return _songView;
}
-(UIView*)getCurrentSeatView{
if (_normalSeatView) {
return _normalSeatView;
}
if (_songView) {
return _songView;
}
if (_auctionView) {
return _auctionView;
}
return nil;
}
-(void)didHugSeatWithPitNumber:(NSString *)pitNumber{
[self showOnlineListWithPitNumber:pitNumber];
}
-(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number{
switch (self.type) {
case QXRoomSeatViewTypeNormal:
[self.normalSeatView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number];
break;
case QXRoomSeatViewTypeSing:
[self.songView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number];
break;
case QXRoomSeatViewTypeAuction:
[self.auctionView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number];
break;
case QXRoomSeatViewTypeCabin:
// self.cabinView.roomModel = roomModel;
break;
case QXRoomSeatViewTypePK:
[self.roomPkView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number];
break;
default:
break;
}
}
-(void)didAuctiontUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat{
if (_auctionView) {
[self.auctionView didAuctiontUpDownSeatWithUser:user isUpSeat:isUpSeat];
}
}
-(void)auctionStartOrEndIsStart:(BOOL)isStart user:(QXRoomAuctionUser *)user getUser:(QXRoomAuctionUser *)getUser{
if (_auctionView) {
[self.auctionView auctionStartOrEndIsStart:isStart user:user getUser:getUser];
}
}
-(void)auctionListDidChanged:(NSArray<QXRoomPitModel *> *)list{
if (_auctionView) {
[self.auctionView auctionListDidChanged:list];
}
}
-(void)auctionDelayTimeWithEndTime:(NSString *)endTime{
if (_auctionView) {
[self.auctionView auctionDelayTimeWithEndTime:endTime];
}
}
-(void)songRoomCharmRankListDidChanged:(NSArray<QXRoomPitModel *> *)list{
if (_songView) {
[self.songView songRoomCharmRankListDidChanged:list];
}
}
-(void)showOnlineListWithPitNumber:(NSString*)pitNumber{
self.onlineListView.isHugSeat = YES;
self.onlineListView.pitNumber = pitNumber;
self.onlineListView.roomId = self.roomModel.room_info.room_id;
[self.onlineListView showInView:self.viewController.view];
}
-(void)roomUserInfoDidChanged:(QXUserHomeModel *)user{
// if (_normalSeatView) {
// [self.normalSeatView roomUserInfoDidChanged:user];
// return;
// }
// if (_songView) {
// [self.songView roomUserInfoDidChanged:user];
// return;
// }
// if (_auctionView) {
// [self.auctionView roomUserInfoDidChanged:user];
// return;
// }
// if (_roomPkView) {
// [self.roomPkView roomUserInfoDidChanged:user];
// return;
// }
switch (self.type) {
case QXRoomSeatViewTypeNormal:
[self.normalSeatView roomUserInfoDidChanged:user];
break;
case QXRoomSeatViewTypeSing:
[self.songView roomUserInfoDidChanged:user];
break;
case QXRoomSeatViewTypeAuction:
[self.auctionView roomUserInfoDidChanged:user];
break;
case QXRoomSeatViewTypeCabin:
// self.cabinView.roomModel = roomModel;
break;
case QXRoomSeatViewTypePK:
[self.roomPkView roomUserInfoDidChanged:user];
break;
default:
break;
}
}
-(void)destroyViews{
if (_normalSeatView) {
[self.normalSeatView destroyViews];
}
if (_songView) {
[self.songView destroyViews];
}
if (_auctionView) {
[self.auctionView destroyViews];
}
if (_roomPkView) {
[self.roomPkView destroyViews];
}
}
-(QXRoomOnlineUserListView *)onlineListView{
if (!_onlineListView) {
_onlineListView = [[QXRoomOnlineUserListView alloc] initWithFrame:[UIScreen mainScreen].bounds];
_onlineListView.delegate = self;
}
return _onlineListView;
}
-(QXRoomSeatTypeAuctionView *)auctionView{
if (!_auctionView) {
_auctionView = [[QXRoomSeatTypeAuctionView alloc] init];
_auctionView.delegate = self;
}
return _auctionView;
}
-(QXRoomSeatPKView *)roomPkView{
if (!_roomPkView) {
_roomPkView = [[QXRoomSeatPKView alloc] init];
_roomPkView.delegate = self;
}
return _roomPkView;
}
@end

View 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

View 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