提交
This commit is contained in:
47
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.h
Normal file
47
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.h
Normal 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
|
||||
454
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m
Normal file
454
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m
Normal 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
|
||||
30
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatDelegate.h
Normal file
30
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatDelegate.h
Normal 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
|
||||
65
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatPKView.h
Normal file
65
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatPKView.h
Normal 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
|
||||
611
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatPKView.m
Normal file
611
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatPKView.m
Normal 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
|
||||
64
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeAuctionView.h
Normal file
64
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeAuctionView.h
Normal 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
|
||||
1182
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeAuctionView.m
Normal file
1182
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeAuctionView.m
Normal file
File diff suppressed because it is too large
Load Diff
20
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.h
Normal file
20
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.h
Normal 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
|
||||
286
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.m
Normal file
286
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.m
Normal 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
|
||||
42
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeNormalView.h
Normal file
42
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeNormalView.h
Normal 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
|
||||
378
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeNormalView.m
Normal file
378
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeNormalView.m
Normal 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
|
||||
40
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeSongView.h
Normal file
40
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeSongView.h
Normal 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
|
||||
851
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeSongView.m
Normal file
851
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeSongView.m
Normal 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
|
||||
87
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatView.h
Normal file
87
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatView.h
Normal 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
|
||||
874
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatView.m
Normal file
874
QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatView.m
Normal 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
|
||||
17
QXLive/HomePage(声播)/View/房间/麦位视图/QXSongSeatCell.h
Normal file
17
QXLive/HomePage(声播)/View/房间/麦位视图/QXSongSeatCell.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// QXSongSeatCell.h
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/18.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "QXRoomSeatContentView.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface QXSongSeatCell : UICollectionViewCell
|
||||
@property (nonatomic,strong)QXRoomSeatContentView *seatContentView;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
35
QXLive/HomePage(声播)/View/房间/麦位视图/QXSongSeatCell.m
Normal file
35
QXLive/HomePage(声播)/View/房间/麦位视图/QXSongSeatCell.m
Normal file
@@ -0,0 +1,35 @@
|
||||
//
|
||||
// QXSongSeatCell.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/6/18.
|
||||
//
|
||||
|
||||
#import "QXSongSeatCell.h"
|
||||
|
||||
@implementation QXSongSeatCell
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self initSubviews];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)initSubviews{
|
||||
self.seatContentView = [[QXRoomSeatContentView alloc] init];
|
||||
self.seatContentView.onlyShowHeader = NO;
|
||||
[self.contentView addSubview: self.seatContentView];
|
||||
[self.seatContentView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.top.bottom.equalTo(self.contentView);
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
- (void)awakeFromNib {
|
||||
[super awakeFromNib];
|
||||
// Initialization code
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user