新增 StageViewManager 类以管理 stageView 的创建和更新逻辑,集成至 XPRoomViewController 中,优化现有的 stageView 更新流程,提升代码可维护性和用户体验。
This commit is contained in:
@@ -574,6 +574,7 @@
|
|||||||
4CD15D912D7E902800D9279F /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD15D902D7E902800D9279F /* LoginViewController.m */; };
|
4CD15D912D7E902800D9279F /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD15D902D7E902800D9279F /* LoginViewController.m */; };
|
||||||
4CD15D922D7EC2AC00D9279F /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23E56B3B2B03564B00C8DAC9 /* CoreTelephony.framework */; };
|
4CD15D922D7EC2AC00D9279F /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23E56B3B2B03564B00C8DAC9 /* CoreTelephony.framework */; };
|
||||||
4CD15D952D7FE9E400D9279F /* LoginTypesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD15D942D7FE9E400D9279F /* LoginTypesViewController.m */; };
|
4CD15D952D7FE9E400D9279F /* LoginTypesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD15D942D7FE9E400D9279F /* LoginTypesViewController.m */; };
|
||||||
|
4CD47BB52E61514900BCDA46 /* StageViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD47BB42E61514900BCDA46 /* StageViewManager.m */; };
|
||||||
4CD6FF662D673A5C00262AB7 /* AgentMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6FF652D673A5C00262AB7 /* AgentMessageModel.m */; };
|
4CD6FF662D673A5C00262AB7 /* AgentMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6FF652D673A5C00262AB7 /* AgentMessageModel.m */; };
|
||||||
4CD6FF692D673F7F00262AB7 /* AgentMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6FF682D673F7F00262AB7 /* AgentMessageTableViewCell.m */; };
|
4CD6FF692D673F7F00262AB7 /* AgentMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6FF682D673F7F00262AB7 /* AgentMessageTableViewCell.m */; };
|
||||||
4CE3A9462D22754C003F0796 /* RechargeUserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE3A9452D22754C003F0796 /* RechargeUserModel.m */; };
|
4CE3A9462D22754C003F0796 /* RechargeUserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE3A9452D22754C003F0796 /* RechargeUserModel.m */; };
|
||||||
@@ -2809,6 +2810,8 @@
|
|||||||
4CD15D902D7E902800D9279F /* LoginViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = "<group>"; };
|
4CD15D902D7E902800D9279F /* LoginViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = "<group>"; };
|
||||||
4CD15D932D7FE9E400D9279F /* LoginTypesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginTypesViewController.h; sourceTree = "<group>"; };
|
4CD15D932D7FE9E400D9279F /* LoginTypesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginTypesViewController.h; sourceTree = "<group>"; };
|
||||||
4CD15D942D7FE9E400D9279F /* LoginTypesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginTypesViewController.m; sourceTree = "<group>"; };
|
4CD15D942D7FE9E400D9279F /* LoginTypesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginTypesViewController.m; sourceTree = "<group>"; };
|
||||||
|
4CD47BB32E61514900BCDA46 /* StageViewManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StageViewManager.h; sourceTree = "<group>"; };
|
||||||
|
4CD47BB42E61514900BCDA46 /* StageViewManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StageViewManager.m; sourceTree = "<group>"; };
|
||||||
4CD6FF642D673A5C00262AB7 /* AgentMessageModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AgentMessageModel.h; sourceTree = "<group>"; };
|
4CD6FF642D673A5C00262AB7 /* AgentMessageModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AgentMessageModel.h; sourceTree = "<group>"; };
|
||||||
4CD6FF652D673A5C00262AB7 /* AgentMessageModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AgentMessageModel.m; sourceTree = "<group>"; };
|
4CD6FF652D673A5C00262AB7 /* AgentMessageModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AgentMessageModel.m; sourceTree = "<group>"; };
|
||||||
4CD6FF672D673F7F00262AB7 /* AgentMessageTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AgentMessageTableViewCell.h; sourceTree = "<group>"; };
|
4CD6FF672D673F7F00262AB7 /* AgentMessageTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AgentMessageTableViewCell.h; sourceTree = "<group>"; };
|
||||||
@@ -10793,6 +10796,8 @@
|
|||||||
E8AEAED8271413530017FCE0 /* View */ = {
|
E8AEAED8271413530017FCE0 /* View */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
4CD47BB32E61514900BCDA46 /* StageViewManager.h */,
|
||||||
|
4CD47BB42E61514900BCDA46 /* StageViewManager.m */,
|
||||||
4CE746C92D929D500094E496 /* Common */,
|
4CE746C92D929D500094E496 /* Common */,
|
||||||
4CB753CF2D30F08E00B13DF5 /* LuckyPackage */,
|
4CB753CF2D30F08E00B13DF5 /* LuckyPackage */,
|
||||||
4CB753CE2D2FE80100B13DF5 /* RoomSideMenu */,
|
4CB753CE2D2FE80100B13DF5 /* RoomSideMenu */,
|
||||||
@@ -12104,6 +12109,7 @@
|
|||||||
E821077B2987D4AB00DE7040 /* MessageFindNewGreetModel.m in Sources */,
|
E821077B2987D4AB00DE7040 /* MessageFindNewGreetModel.m in Sources */,
|
||||||
4C886BF22E015D61006F0BA7 /* MedalsModel.m in Sources */,
|
4C886BF22E015D61006F0BA7 /* MedalsModel.m in Sources */,
|
||||||
E85E7BA32A4EC99300B6D00A /* XPMineGiveDiamondDetailsVC.m in Sources */,
|
E85E7BA32A4EC99300B6D00A /* XPMineGiveDiamondDetailsVC.m in Sources */,
|
||||||
|
4CD47BB52E61514900BCDA46 /* StageViewManager.m in Sources */,
|
||||||
238A90072BA9729200828123 /* PIUniversalBannerView.m in Sources */,
|
238A90072BA9729200828123 /* PIUniversalBannerView.m in Sources */,
|
||||||
E8B846D826FDE17300A777FE /* XPMineRechargeProtocol.h in Sources */,
|
E8B846D826FDE17300A777FE /* XPMineRechargeProtocol.h in Sources */,
|
||||||
E88C72A6282921D60047FB2B /* XPRoomBackMusicPlayerView.m in Sources */,
|
E88C72A6282921D60047FB2B /* XPRoomBackMusicPlayerView.m in Sources */,
|
||||||
|
60
YuMi/Modules/YMRoom/View/StageViewManager.h
Normal file
60
YuMi/Modules/YMRoom/View/StageViewManager.h
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
//
|
||||||
|
// StageViewManager.h
|
||||||
|
// YUMI
|
||||||
|
//
|
||||||
|
// Created by YUMI on 2024/12/19.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "RoomInfoModel.h"
|
||||||
|
#import "RoomHostDelegate.h"
|
||||||
|
|
||||||
|
@class StageView;
|
||||||
|
|
||||||
|
|
||||||
|
// 使用 RoomInfoModel 中已有的 RoomType 定义
|
||||||
|
// 避免重复定义,保持代码一致性
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface StageViewManager : NSObject
|
||||||
|
|
||||||
|
@property (nonatomic, strong, readonly) StageView *currentStageView;
|
||||||
|
@property (nonatomic,
|
||||||
|
assign,
|
||||||
|
readonly) RoomType currentRoomType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
更新 stageView 到指定房间类型
|
||||||
|
@param roomType 房间类型
|
||||||
|
@param roomInfo 房间信息
|
||||||
|
@param container 容器视图
|
||||||
|
@param delegate stageView 的代理对象
|
||||||
|
@return 是否更新成功
|
||||||
|
*/
|
||||||
|
- (BOOL)updateStageViewForRoomType:(RoomType)roomType
|
||||||
|
roomInfo:(RoomInfoModel *)roomInfo
|
||||||
|
container:(UIView *)container
|
||||||
|
delegate:(id<RoomHostDelegate>)delegate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
通知 stageView 更新
|
||||||
|
@param roomInfo 房间信息
|
||||||
|
*/
|
||||||
|
- (void)notifyStageViewUpdate:(RoomInfoModel *)roomInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
清理资源
|
||||||
|
*/
|
||||||
|
- (void)cleanup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
检查是否需要切换 stageView 类型
|
||||||
|
@param newType 新的房间类型
|
||||||
|
@return 是否需要切换
|
||||||
|
*/
|
||||||
|
- (BOOL)shouldChangeStageViewType:(RoomType)newType;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
145
YuMi/Modules/YMRoom/View/StageViewManager.m
Normal file
145
YuMi/Modules/YMRoom/View/StageViewManager.m
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
//
|
||||||
|
// StageViewManager.m
|
||||||
|
// YUMI
|
||||||
|
//
|
||||||
|
// Created by YUMI on 2024/12/19.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "StageViewManager.h"
|
||||||
|
#import "RoomInfoModel.h"
|
||||||
|
#import "SocialStageView.h"
|
||||||
|
#import "TenMicStageView.h"
|
||||||
|
#import "FifteenMicStageView.h"
|
||||||
|
#import "NineteenMicStageView.h"
|
||||||
|
#import "TwentyMicStageView.h"
|
||||||
|
#import "DatingStageView.h"
|
||||||
|
#import "AnchorStageView.h"
|
||||||
|
#import "AnchorPkStageView.h"
|
||||||
|
#import "LittleGameStageView.h"
|
||||||
|
#import "LittleGameScrollStageView.h"
|
||||||
|
|
||||||
|
|
||||||
|
@interface StageViewManager ()
|
||||||
|
|
||||||
|
@property (nonatomic, strong) StageView *currentStageView;
|
||||||
|
@property (nonatomic, assign) RoomType currentRoomType;
|
||||||
|
@property (nonatomic, weak) UIView *container;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation StageViewManager
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
_currentRoomType = RoomType_Game; // RoomType_Game 默认值
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)updateStageViewForRoomType:(RoomType)roomType
|
||||||
|
roomInfo:(id)roomInfo
|
||||||
|
container:(UIView *)container
|
||||||
|
delegate:(id<RoomHostDelegate>)delegate {
|
||||||
|
|
||||||
|
// 检查是否需要切换 stageView 类型
|
||||||
|
if ([self shouldChangeStageViewType:roomType]) {
|
||||||
|
NSLog(@"🔄 StageViewManager: 切换 stageView 类型 | 从 %ld 到 %ld",
|
||||||
|
(long)self.currentRoomType, (long)roomType);
|
||||||
|
|
||||||
|
// 清理旧的 stageView
|
||||||
|
[self cleanup];
|
||||||
|
|
||||||
|
// 创建新的 stageView
|
||||||
|
[self createStageViewForType:roomType withDelegate:delegate];
|
||||||
|
self.currentRoomType = roomType;
|
||||||
|
self.container = container;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保 stageView 已添加到容器
|
||||||
|
// if (self.currentStageView && !self.currentStageView.superview && container) {
|
||||||
|
// [container insertSubview:self.currentStageView atIndex:0];
|
||||||
|
// NSLog(@"✅ StageViewManager: stageView 已添加到容器");
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 返回是否成功创建了 stageView
|
||||||
|
return self.currentStageView != nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)notifyStageViewUpdate:(id)roomInfo {
|
||||||
|
if (self.currentStageView && [self.currentStageView respondsToSelector:@selector(onRoomUpdate)]) {
|
||||||
|
NSLog(@"🔄 StageViewManager: 通知 stageView 更新 | type=%ld", (long)self.currentRoomType);
|
||||||
|
[self.currentStageView onRoomUpdate];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cleanup {
|
||||||
|
if (self.currentStageView) {
|
||||||
|
[self.currentStageView removeFromSuperview];
|
||||||
|
self.currentStageView = nil;
|
||||||
|
NSLog(@"🧹 StageViewManager: 清理 stageView");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)shouldChangeStageViewType:(RoomType)newType {
|
||||||
|
return self.currentRoomType != newType || !self.currentStageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private Methods
|
||||||
|
|
||||||
|
- (void)createStageViewForType:(NSInteger)roomType withDelegate:(id<RoomHostDelegate>)delegate {
|
||||||
|
// 根据房间类型创建对应的 stageView
|
||||||
|
// 注意:所有 stageView 都需要 delegate 来正确初始化
|
||||||
|
|
||||||
|
switch (roomType) {
|
||||||
|
case RoomType_Anchor: { // RoomType_Anchor
|
||||||
|
// 检查是否为 PK 模式
|
||||||
|
// 这里需要根据 roomInfo 来判断,暂时使用默认的 AnchorStageView
|
||||||
|
if ([delegate respondsToSelector:@selector(getRoomInfo)]) {
|
||||||
|
RoomInfoModel *roomInfo = [delegate getRoomInfo];
|
||||||
|
if (roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode) {
|
||||||
|
self.currentStageView = [[AnchorPKStageView alloc] initWithDelegate:delegate];
|
||||||
|
} else {
|
||||||
|
self.currentStageView = [[AnchorStageView alloc] initWithDelegate:delegate];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.currentStageView = [[AnchorStageView alloc] initWithDelegate:delegate];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RoomType_MiniGame: { // RoomType_MiniGame
|
||||||
|
self.currentStageView = [[LittleGameScrollStageView alloc] initWithDelegate:delegate];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RoomType_20Mic: { // RoomType_20Mic
|
||||||
|
self.currentStageView = [[TwentyMicStageView alloc] initWithDelegate:delegate];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RoomType_19Mic: { // RoomType_19Mic
|
||||||
|
self.currentStageView = [[NineteenMicStageView alloc] initWithDelegate:delegate];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RoomType_15Mic: { // RoomType_15Mic
|
||||||
|
self.currentStageView = [[FifteenMicStageView alloc] initWithDelegate:delegate];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RoomType_10Mic: { // RoomType_10Mic
|
||||||
|
self.currentStageView = [[TenMicStageView alloc] initWithDelegate:delegate];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RoomType_Game: // RoomType_Game
|
||||||
|
default: {
|
||||||
|
self.currentStageView = [[SocialStageView alloc] initWithDelegate:delegate];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.currentStageView) {
|
||||||
|
NSLog(@"✅ StageViewManager: 创建 stageView 成功 | type=%ld | class=%@",
|
||||||
|
(long)roomType, NSStringFromClass([self.currentStageView class]));
|
||||||
|
} else {
|
||||||
|
NSLog(@"❌ StageViewManager: 创建 stageView 失败 | type=%ld", (long)roomType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@@ -76,6 +76,7 @@
|
|||||||
#import "LittleGameStageView.h"
|
#import "LittleGameStageView.h"
|
||||||
#import "LittleGameScrollStageView.h"
|
#import "LittleGameScrollStageView.h"
|
||||||
#import "XPRoomLittleGameContainerView.h"
|
#import "XPRoomLittleGameContainerView.h"
|
||||||
|
#import "StageViewManager.h"
|
||||||
#import "PIRoomEnterRedPacketView.h"
|
#import "PIRoomEnterRedPacketView.h"
|
||||||
#import "XPIAPRechargeViewController.h"
|
#import "XPIAPRechargeViewController.h"
|
||||||
#import "XPCandyTreeInsufficientBalanceView.h"
|
#import "XPCandyTreeInsufficientBalanceView.h"
|
||||||
@@ -127,6 +128,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
@property (nonatomic,strong) RoomHeaderView *roomHeaderView;
|
@property (nonatomic,strong) RoomHeaderView *roomHeaderView;
|
||||||
///坑位信息
|
///坑位信息
|
||||||
@property (nonatomic,strong) StageView *stageView;
|
@property (nonatomic,strong) StageView *stageView;
|
||||||
|
@property (nonatomic,strong) StageViewManager *stageViewManager;
|
||||||
@property (nonatomic,strong) TenMicStageView *tenMicStageView;
|
@property (nonatomic,strong) TenMicStageView *tenMicStageView;
|
||||||
@property (nonatomic,strong) FifteenMicStageView *fifteenMicStageView;
|
@property (nonatomic,strong) FifteenMicStageView *fifteenMicStageView;
|
||||||
@property (nonatomic,strong) TwentyMicStageView *twentyMicStageView;
|
@property (nonatomic,strong) TwentyMicStageView *twentyMicStageView;
|
||||||
@@ -375,6 +377,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
|
|
||||||
[self handleGiftComboCallBack];
|
[self handleGiftComboCallBack];
|
||||||
|
|
||||||
|
[self setupStageViewManager];
|
||||||
}
|
}
|
||||||
|
|
||||||
//- (void)test {
|
//- (void)test {
|
||||||
@@ -893,15 +896,42 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)updateStageView {
|
- (BOOL)updateStageView {
|
||||||
Class stageViewClass = [self stageViewClassForRoomInfo:self.roomInfo];
|
NSLog(@"🔄 updateStageView: 开始更新 stageView,当前 alpha = %.2f", self.stageView.alpha);
|
||||||
if (stageViewClass) { //&& ![self.stageView isKindOfClass:stageViewClass]) {
|
|
||||||
[self.stageView removeFromSuperview];
|
// 优先使用 StageViewManager 来管理 stageView
|
||||||
self.stageView = nil;
|
if (self.stageViewManager) {
|
||||||
self.stageView = [[stageViewClass alloc] initWithDelegate:self];
|
NSLog(@"🔧 updateStageView: 使用 StageViewManager");
|
||||||
|
BOOL success = [self.stageViewManager updateStageViewForRoomType:self.roomInfo.type
|
||||||
|
roomInfo:self.roomInfo
|
||||||
|
container:self.view
|
||||||
|
delegate:self];
|
||||||
|
if (success) {
|
||||||
|
self.stageView = self.stageViewManager.currentStageView;
|
||||||
|
if (self.stageView) {
|
||||||
|
NSLog(@"🔧 updateStageView: StageViewManager 设置 alpha = 0 (之前 = %.2f)", self.stageView.alpha);
|
||||||
self.stageView.alpha = 0;
|
self.stageView.alpha = 0;
|
||||||
|
NSLog(@"✅ StageViewManager 成功更新 stageView: %@", NSStringFromClass([self.stageView class]));
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
NSLog(@"⚠️ StageViewManager 更新失败,降级到原有逻辑");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 降级处理:原有逻辑
|
||||||
|
// NSLog(@"🔧 updateStageView: 使用降级逻辑");
|
||||||
|
// Class stageViewClass = [self stageViewClassForRoomInfo:self.roomInfo];
|
||||||
|
// if (stageViewClass) { //&& ![self.stageView isKindOfClass:stageViewClass]) {
|
||||||
|
// NSLog(@"🔧 updateStageView: 创建新的 stageView: %@", NSStringFromClass(stageViewClass));
|
||||||
|
// [self.stageView removeFromSuperview];
|
||||||
|
// self.stageView = nil;
|
||||||
|
// self.stageView = [[stageViewClass alloc] initWithDelegate:self];
|
||||||
|
// NSLog(@"🔧 updateStageView: 降级逻辑设置 alpha = 0 (之前 = %.2f)", self.stageView.alpha);
|
||||||
|
// self.stageView.alpha = 0;
|
||||||
|
// NSLog(@"✅ 降级逻辑成功更新 stageView: %@", NSStringFromClass([self.stageView class]));
|
||||||
|
// return YES;
|
||||||
|
// }
|
||||||
|
|
||||||
|
NSLog(@"❌ 所有 stageView 更新方法都失败了");
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -938,17 +968,22 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)changeStageViewOnRoomUpdate {
|
- (void)changeStageViewOnRoomUpdate {
|
||||||
|
NSLog(@"🔄 changeStageViewOnRoomUpdate: 开始更新 stageView");
|
||||||
|
|
||||||
if (![self updateStageView]) {
|
if (![self updateStageView]) {
|
||||||
|
NSLog(@"❌ changeStageViewOnRoomUpdate: updateStageView 失败");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSLog(@"✅ changeStageViewOnRoomUpdate: updateStageView 成功,当前 alpha = %.2f", self.stageView.alpha);
|
||||||
|
|
||||||
// 🔧 新增:发送房间类型变化通知
|
// 🔧 新增:发送房间类型变化通知
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:@"RoomTypeChanged"
|
[[NSNotificationCenter defaultCenter] postNotificationName:@"RoomTypeChanged"
|
||||||
object:nil
|
object:nil
|
||||||
userInfo:@{@"roomType": @(self.roomInfo.type)}];
|
userInfo:@{@"roomType": @(self.roomInfo.type)}];
|
||||||
|
|
||||||
if (!self.stageView.superview) {
|
if (!self.stageView.superview) {
|
||||||
|
NSLog(@"🔧 changeStageViewOnRoomUpdate: 添加 stageView 到视图层级");
|
||||||
[self.view insertSubview:self.stageView
|
[self.view insertSubview:self.stageView
|
||||||
belowSubview:self.roomHeaderView];
|
belowSubview:self.roomHeaderView];
|
||||||
|
|
||||||
@@ -970,7 +1005,12 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSLog(@"🔧 changeStageViewOnRoomUpdate: 设置 stageView.alpha = 1 (之前 = %.2f)", self.stageView.alpha);
|
||||||
self.stageView.alpha = 1;
|
self.stageView.alpha = 1;
|
||||||
|
NSLog(@"✅ changeStageViewOnRoomUpdate: stageView.alpha 已设置为 1");
|
||||||
|
|
||||||
|
// 调试:检查最终状态
|
||||||
|
[self debugStageViewStatus];
|
||||||
|
|
||||||
[self addExitGameButton];
|
[self addExitGameButton];
|
||||||
|
|
||||||
@@ -1450,11 +1490,15 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)handleRoomWithoutPasswordAfterInitRoom {
|
- (void)handleRoomWithoutPasswordAfterInitRoom {
|
||||||
|
NSLog(@"🔄 handleRoomWithoutPasswordAfterInitRoom: 开始处理无密码房间");
|
||||||
|
|
||||||
self.roomInfo.datingState = (self.roomInfo.roomModeType == RoomModeType_Open_Blind) ?
|
self.roomInfo.datingState = (self.roomInfo.roomModeType == RoomModeType_Open_Blind) ?
|
||||||
RoomDatingStateChangeType_Open :
|
RoomDatingStateChangeType_Open :
|
||||||
RoomDatingStateChangeType_Normal;
|
RoomDatingStateChangeType_Normal;
|
||||||
|
|
||||||
|
NSLog(@"🔧 handleRoomWithoutPasswordAfterInitRoom: 调用 changeStageViewOnRoomUpdate");
|
||||||
[self changeStageViewOnRoomUpdate];
|
[self changeStageViewOnRoomUpdate];
|
||||||
|
NSLog(@"✅ handleRoomWithoutPasswordAfterInitRoom: changeStageViewOnRoomUpdate 完成");
|
||||||
[self.roomHeaderView onRoomEntered];
|
[self.roomHeaderView onRoomEntered];
|
||||||
[self.sideMenu onRoomEntered];
|
[self.sideMenu onRoomEntered];
|
||||||
|
|
||||||
@@ -2096,6 +2140,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
//房间类型是否变更了(从个播->普通,个播->小游戏等)
|
//房间类型是否变更了(从个播->普通,个播->小游戏等)
|
||||||
newRoomInfo.hadChangeRoomType = self.roomInfo.type != newRoomInfo.type;
|
newRoomInfo.hadChangeRoomType = self.roomInfo.type != newRoomInfo.type;
|
||||||
BOOL anchorToOther = newRoomInfo.type != RoomType_Anchor && self.roomInfo.type == RoomType_Anchor;//个播变其他房
|
BOOL anchorToOther = newRoomInfo.type != RoomType_Anchor && self.roomInfo.type == RoomType_Anchor;//个播变其他房
|
||||||
|
RoomType currentType = self.roomInfo.type;
|
||||||
self.roomInfo = newRoomInfo;
|
self.roomInfo = newRoomInfo;
|
||||||
|
|
||||||
[self.backContainerView onRoomUpdate];
|
[self.backContainerView onRoomUpdate];
|
||||||
@@ -3279,4 +3324,31 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 新增:StageViewManager 懒加载
|
||||||
|
- (StageViewManager *)stageViewManager {
|
||||||
|
if (!_stageViewManager) {
|
||||||
|
_stageViewManager = [[StageViewManager alloc] init];
|
||||||
|
NSLog(@"✅ StageViewManager 懒加载初始化成功");
|
||||||
|
}
|
||||||
|
return _stageViewManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:设置 StageViewManager
|
||||||
|
- (void)setupStageViewManager {
|
||||||
|
// 触发懒加载
|
||||||
|
[self stageViewManager];
|
||||||
|
NSLog(@"✅ StageViewManager 设置完成");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调试方法:检查 stageView 状态
|
||||||
|
- (void)debugStageViewStatus {
|
||||||
|
NSLog(@"🔍 DEBUG: stageView 状态检查");
|
||||||
|
NSLog(@" - stageView: %@", self.stageView);
|
||||||
|
NSLog(@" - stageView.alpha: %.2f", self.stageView.alpha);
|
||||||
|
NSLog(@" - stageView.hidden: %@", self.stageView.hidden ? @"YES" : @"NO");
|
||||||
|
NSLog(@" - stageView.superview: %@", self.stageView.superview);
|
||||||
|
NSLog(@" - stageView.frame: %@", NSStringFromCGRect(self.stageView.frame));
|
||||||
|
NSLog(@" - stageView.class: %@", NSStringFromClass([self.stageView class]));
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@@ -94,7 +94,7 @@
|
|||||||
editParam = [MSParamsDecode msDecodeParams:editParam];
|
editParam = [MSParamsDecode msDecodeParams:editParam];
|
||||||
params = [self configBaseParmars:editParam];
|
params = [self configBaseParmars:editParam];
|
||||||
|
|
||||||
#if DEBUG
|
#if 0
|
||||||
// 构建完整的 URL
|
// 构建完整的 URL
|
||||||
NSString *baseUrl = [HttpRequestHelper getHostUrl];
|
NSString *baseUrl = [HttpRequestHelper getHostUrl];
|
||||||
NSString *fullUrl = [NSString stringWithFormat:@"%@/%@", baseUrl, method];
|
NSString *fullUrl = [NSString stringWithFormat:@"%@/%@", baseUrl, method];
|
||||||
@@ -118,7 +118,7 @@
|
|||||||
@kWeakify(self);
|
@kWeakify(self);
|
||||||
[manager GET:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
[manager GET:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||||
BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject];
|
BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject];
|
||||||
#if DEBUG
|
#if 0
|
||||||
NSLog(@"%@ - \n%@\n", method, [baseModel toJSONString]);
|
NSLog(@"%@ - \n%@\n", method, [baseModel toJSONString]);
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
@@ -338,7 +338,7 @@ constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
|
|||||||
params = [MSParamsDecode msDecodeParams:[params mutableCopy] ];
|
params = [MSParamsDecode msDecodeParams:[params mutableCopy] ];
|
||||||
params = [self configBaseParmars:params];
|
params = [self configBaseParmars:params];
|
||||||
AFHTTPSessionManager *manager = [HttpRequestHelper requestManager];
|
AFHTTPSessionManager *manager = [HttpRequestHelper requestManager];
|
||||||
#if DEBUG
|
#if 0
|
||||||
// 构建完整的 URL
|
// 构建完整的 URL
|
||||||
NSString *baseUrl = [HttpRequestHelper getHostUrl];
|
NSString *baseUrl = [HttpRequestHelper getHostUrl];
|
||||||
NSString *fullUrl = [NSString stringWithFormat:@"%@/%@", baseUrl, method];
|
NSString *fullUrl = [NSString stringWithFormat:@"%@/%@", baseUrl, method];
|
||||||
@@ -363,7 +363,7 @@ constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
|
|||||||
@kWeakify(self);
|
@kWeakify(self);
|
||||||
[manager DELETE:method parameters:params headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
[manager DELETE:method parameters:params headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||||
BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject];
|
BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject];
|
||||||
#if DEBUG
|
#if 0
|
||||||
NSLog(@"\n%@\n", [baseModel toJSONString]);
|
NSLog(@"\n%@\n", [baseModel toJSONString]);
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
25
issues/stageview-refactor-todo.md
Normal file
25
issues/stageview-refactor-todo.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
## 当前状态
|
||||||
|
|
||||||
|
### ✅ 第一步:创建 StageViewManager 类
|
||||||
|
- [x] 创建 StageViewManager.h
|
||||||
|
- [x] 创建 StageViewManager.m
|
||||||
|
- [x] 实现基本的 stageView 管理逻辑
|
||||||
|
- [x] 使用 RoomInfoModel 中的 RoomType 定义
|
||||||
|
|
||||||
|
### ✅ 第二步:在 XPRoomViewController.m 中集成
|
||||||
|
- [x] 添加 StageViewManager 的导入
|
||||||
|
- [x] 添加 StageViewManager 属性声明
|
||||||
|
- [x] 在 viewDidLoad 中初始化 StageViewManager
|
||||||
|
- [x] 添加 setupStageViewManager 方法
|
||||||
|
|
||||||
|
### 🔄 第三步:重构现有的 stageView 更新逻辑
|
||||||
|
- [ ] 找到所有 stageView 创建和更新的地方
|
||||||
|
- [ ] 替换为使用 StageViewManager
|
||||||
|
- [ ] 移除重复的 stageView 更新代码
|
||||||
|
- [ ] 测试确保功能正常
|
||||||
|
|
||||||
|
### ⏳ 第四步:测试和验证
|
||||||
|
- [ ] 测试不同房间类型的切换
|
||||||
|
- [ ] 验证 stageView 更新逻辑
|
||||||
|
- [ ] 性能测试
|
||||||
|
- [ ] 代码审查
|
Reference in New Issue
Block a user