修复 Turbo Mode 相关逻辑,确保使用正确的公开接口获取开关状态,优化代码结构和可读性。更新 RoomHeaderView 中的礼物特效显示逻辑,添加 Turbo Mode 状态变化的通知处理,提升用户体验。

This commit is contained in:
edwinQQQ
2025-09-17 18:44:26 +08:00
parent 67f9fb5113
commit ab5b704866
6 changed files with 145 additions and 116 deletions

View File

@@ -597,11 +597,11 @@ BannerSchedulerDelegate
effectPath:(NSString *)effectPath effectPath:(NSString *)effectPath
isCPEnter:(BOOL)isCP { isCPEnter:(BOOL)isCP {
// // 🔧 使
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue; NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo]; BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo];
if (!giftEffectsEnabled) { if (!giftEffectsEnabled) {
NSLog(@"🎮 Turbo Mode进房特效已关闭跳过进房动画"); NSLog(@"🎮 Turbo Mode进房特效已关闭跳过进房动画 - 房间ID: %@", roomIdForTurbo);
return; return;
} }
@@ -729,34 +729,34 @@ BannerSchedulerDelegate
return; return;
} }
// 🔧 inserBannerModelToQueue // 🔧 inserBannerModelToQueue 使
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
if (obj.second == Custom_Message_Sub_General_Floating_Screen_One_Room || if (obj.second == Custom_Message_Sub_General_Floating_Screen_One_Room ||
obj.second == Custom_Message_Sub_General_Floating_Screen_All_Room) { obj.second == Custom_Message_Sub_General_Floating_Screen_All_Room) {
// banner // banner
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL allowGameScreen = [[TurboModeStateManager sharedManager] isGlobalGameScreenEnabledForRoom:roomIdForTurbo]; BOOL allowGameScreen = [[TurboModeStateManager sharedManager] isGlobalGameScreenEnabledForRoom:roomIdForTurbo];
if (!allowGameScreen) { if (!allowGameScreen) {
NSLog(@"🎮 Turbo Mode全局游戏屏幕已关闭跳过游戏banner"); NSLog(@"🎮 Turbo Mode全局游戏屏幕已关闭跳过游戏banner - 房间ID: %@", roomIdForTurbo);
return; return;
} }
} else if (obj.second == Custom_Message_Sub_Super_Gift_Banner || } else if (obj.second == Custom_Message_Sub_Super_Gift_Banner ||
obj.second == Custom_Message_Sub_Gift_ChannelNotify || obj.second == Custom_Message_Sub_Gift_ChannelNotify ||
obj.second == Custom_Message_Sub_LuckyPackage) { obj.second == Custom_Message_Sub_LuckyPackage) {
// banner // banner
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL allowGiftScreen = [[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:roomIdForTurbo]; BOOL allowGiftScreen = [[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:roomIdForTurbo];
if (!allowGiftScreen) { if (!allowGiftScreen) {
NSLog(@"🎮 Turbo Mode全局礼物屏幕已关闭跳过礼物banner"); NSLog(@"🎮 Turbo Mode全局礼物屏幕已关闭跳过礼物banner - 房间ID: %@", roomIdForTurbo);
return; return;
} }
} else if (obj.second == Custom_Message_Sub_CP_Gift || } else if (obj.second == Custom_Message_Sub_CP_Gift ||
obj.second == Custom_Message_Sub_CP_Upgrade || obj.second == Custom_Message_Sub_CP_Upgrade ||
obj.second == Custom_Message_Sub_CP_Binding) { obj.second == Custom_Message_Sub_CP_Binding) {
// CPbanner - // 🔧 CPbanner - 使
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue; NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo]; BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo];
if (!giftEffectsEnabled) { if (!giftEffectsEnabled) {
NSLog(@"🎮 Turbo Mode礼物特效已关闭跳过CP banner"); NSLog(@"🎮 Turbo Mode礼物特效已关闭跳过CP banner - 房间ID: %@", roomIdForTurbo);
return; return;
} }
} }
@@ -1362,13 +1362,13 @@ BannerSchedulerDelegate
#pragma mark - Method: Send Gifts #pragma mark - Method: Send Gifts
- (void)receiveGiftHandleSendGiftAnimationWith:(GiftReceiveInfoModel *)receiveInfo attachment:(AttachmentModel *)attachment { - (void)receiveGiftHandleSendGiftAnimationWith:(GiftReceiveInfoModel *)receiveInfo attachment:(AttachmentModel *)attachment {
// // 🔧 使
{ {
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue; NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo]; BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo];
if (!giftEffectsEnabled) { if (!giftEffectsEnabled) {
NSLog(@"🎮 RoomAnimationView 礼物特效已关闭,跳过动画"); NSLog(@"🎮 RoomAnimationView 礼物特效已关闭,跳过动画 - 房间ID: %@", roomIdForTurbo);
return; return;
} }
} }

View File

@@ -92,27 +92,48 @@
NSLog(@"🎮 TurboModeStateManager: 房间 %@ 礼物特效开关更新为 %@", roomId, enabled ? @"开启" : @"关闭"); NSLog(@"🎮 TurboModeStateManager: 房间 %@ 礼物特效开关更新为 %@", roomId, enabled ? @"开启" : @"关闭");
} }
// 🔧 // 🔧 turbo mode
- (BOOL)isGiftEffectsEnabledForRoom:(NSString *)roomId { - (BOOL)isGiftEffectsEnabledForRoom:(NSString *)roomId {
if (!roomId) return NO; if (!roomId) return NO;
[self ensureRoomSwitchStatesExist:roomId]; [self ensureRoomSwitchStatesExist:roomId];
// turbo modeCP
if ([self isTurboModeEnabled]) {
return NO;
}
//
return [self.roomSwitchStates[roomId][@"giftEffects"] boolValue]; return [self.roomSwitchStates[roomId][@"giftEffects"] boolValue];
} }
// 🔧 // 🔧 turbo mode
- (BOOL)isGlobalGiftScreenEnabledForRoom:(NSString *)roomId { - (BOOL)isGlobalGiftScreenEnabledForRoom:(NSString *)roomId {
if (!roomId) return NO; if (!roomId) return NO;
[self ensureRoomSwitchStatesExist:roomId]; [self ensureRoomSwitchStatesExist:roomId];
// turbo modeCP
if ([self isTurboModeEnabled]) {
return NO;
}
//
return [self.roomSwitchStates[roomId][@"globalGiftScreen"] boolValue]; return [self.roomSwitchStates[roomId][@"globalGiftScreen"] boolValue];
} }
// 🔧 // 🔧 turbo mode
- (BOOL)isGlobalGameScreenEnabledForRoom:(NSString *)roomId { - (BOOL)isGlobalGameScreenEnabledForRoom:(NSString *)roomId {
if (!roomId) return NO; if (!roomId) return NO;
[self ensureRoomSwitchStatesExist:roomId]; [self ensureRoomSwitchStatesExist:roomId];
// turbo modeCP
if ([self isTurboModeEnabled]) {
return NO;
}
//
return [self.roomSwitchStates[roomId][@"globalGameScreen"] boolValue]; return [self.roomSwitchStates[roomId][@"globalGameScreen"] boolValue];
} }

View File

@@ -159,14 +159,13 @@
} }
- (void)setupSwitchStates { - (void)setupSwitchStates {
// 🔧 使roomInfo.roomIdTurboModeStateManager
NSString *roomId = @(self.roomInfo.roomId).stringValue; NSString *roomId = @(self.roomInfo.roomId).stringValue;
self.roomId = roomId; self.roomId = roomId;
// 🔧
// RoomAnimationView
TurboModeStateManager *manager = [TurboModeStateManager sharedManager]; TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
// updateGiftEffectsForRoom // 🔧 使
BOOL giftEffectsEnabled = [manager isGiftEffectsEnabledForRoom:roomId]; BOOL giftEffectsEnabled = [manager isGiftEffectsEnabledForRoom:roomId];
BOOL globalGiftScreenEnabled = [manager isGlobalGiftScreenEnabledForRoom:roomId]; BOOL globalGiftScreenEnabled = [manager isGlobalGiftScreenEnabledForRoom:roomId];
BOOL globalGameScreenEnabled = [manager isGlobalGameScreenEnabledForRoom:roomId]; BOOL globalGameScreenEnabled = [manager isGlobalGameScreenEnabledForRoom:roomId];
@@ -176,11 +175,12 @@
self.globalGiftScreenSwitch.on = globalGiftScreenEnabled; self.globalGiftScreenSwitch.on = globalGiftScreenEnabled;
self.globalGameScreenSwitch.on = globalGameScreenEnabled; self.globalGameScreenSwitch.on = globalGameScreenEnabled;
NSLog(@"🎮 Turbo Mode开关初始化完成 - 房间ID: %@, 礼物特效: %@, 全局礼物屏幕: %@, 全局游戏屏幕: %@", NSLog(@"🎮 Turbo Mode开关初始化完成 - 房间ID: %@, 全局TurboMode: %@, 礼物特效: %@, 全局礼物屏幕: %@, 全局游戏屏幕: %@",
roomId, roomId,
giftEffectsEnabled ? @"开启" : @"关闭", [manager isTurboModeEnabled] ? @"开启" : @"关闭",
globalGiftScreenEnabled ? @"开启" : @"关闭", self.giftEffectsSwitch.on ? @"开启" : @"关闭",
globalGameScreenEnabled ? @"开启" : @"关闭"); self.globalGiftScreenSwitch.on ? @"开启" : @"关闭",
self.globalGameScreenSwitch.on ? @"开启" : @"关闭");
} }
- (void)switchValueChanged:(UISwitch *)sender { - (void)switchValueChanged:(UISwitch *)sender {
@@ -237,8 +237,9 @@
- (void)notifyParentUpdateTurboModeButton { - (void)notifyParentUpdateTurboModeButton {
// 🔧 使 TurboModeStateManager // 🔧 使
TurboModeStateManager *manager = [TurboModeStateManager sharedManager]; TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
BOOL allSwitchesOn = [manager isGiftEffectsEnabledForRoom:self.roomId] && BOOL allSwitchesOn = [manager isGiftEffectsEnabledForRoom:self.roomId] &&
[manager isGlobalGiftScreenEnabledForRoom:self.roomId] && [manager isGlobalGiftScreenEnabledForRoom:self.roomId] &&
[manager isGlobalGameScreenEnabledForRoom:self.roomId]; [manager isGlobalGameScreenEnabledForRoom:self.roomId];
@@ -353,34 +354,27 @@
- (void)handleTurboModeStateChanged:(NSNotification *)notification { - (void)handleTurboModeStateChanged:(NSNotification *)notification {
BOOL turboModeEnabled = [notification.userInfo[@"enabled"] boolValue]; BOOL turboModeEnabled = [notification.userInfo[@"enabled"] boolValue];
// 🔧 3TurboModeStateManagerXPEffectPanelViewController NSLog(@"🎮 XPEffectPanelViewController: 收到 Turbo Mode 状态变化通知 - 状态: %@", turboModeEnabled ? @"开启" : @"关闭");
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
if (turboModeEnabled) { // 🔧 forceCloseAllSwitches/forceOpenAllSwitches
// Turbo Mode // TurboModeStateManager setTurboModeEnabled
[manager forceCloseAllSwitches:self.roomId]; // UI
[self updateSwitchesUIForTurboMode:YES]; [self updateSwitchesUIForTurboMode:turboModeEnabled];
NSLog(@"🎮 Turbo Mode 已开启,所有开关已强制关闭");
} else {
// Turbo Mode
[manager forceOpenAllSwitches:self.roomId];
[self updateSwitchesUIForTurboMode:NO];
NSLog(@"🎮 Turbo Mode 已关闭,所有开关已强制打开");
}
} }
- (void)updateSwitchesUIForTurboMode:(BOOL)turboModeEnabled { - (void)updateSwitchesUIForTurboMode:(BOOL)turboModeEnabled {
if (turboModeEnabled) { TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
// 🔧 Turbo Mode
// UIforceCloseAllSwitches // 🔧 使
self.giftEffectsSwitch.on = NO; self.giftEffectsSwitch.on = [manager isGiftEffectsEnabledForRoom:self.roomId];
self.globalGiftScreenSwitch.on = NO; self.globalGiftScreenSwitch.on = [manager isGlobalGiftScreenEnabledForRoom:self.roomId];
self.globalGameScreenSwitch.on = NO; self.globalGameScreenSwitch.on = [manager isGlobalGameScreenEnabledForRoom:self.roomId];
} else {
// 🔧 Turbo Mode NSLog(@"🎮 XPEffectPanelViewController: UI开关已更新 - 全局TurboMode: %@, 礼物特效: %@, 全局礼物屏幕: %@, 全局游戏屏幕: %@",
// forceOpenAllSwitches handleXxxChanged UI turboModeEnabled ? @"开启" : @"关闭",
NSLog(@"🎮 Turbo Mode 已关闭等待开关状态变化通知更新UI"); self.giftEffectsSwitch.on ? @"开启" : @"关闭",
} self.globalGiftScreenSwitch.on ? @"开启" : @"关闭",
self.globalGameScreenSwitch.on ? @"开启" : @"关闭");
} }
- (void)handleGiftEffectsChanged:(NSNotification *)notification { - (void)handleGiftEffectsChanged:(NSNotification *)notification {

View File

@@ -133,7 +133,7 @@
- (void)setupContentLabel { - (void)setupContentLabel {
self.contentLabel = [[UILabel alloc] init]; self.contentLabel = [[UILabel alloc] init];
self.contentLabel.text = NSLocalizedString(@"20.20.62_text_15.1", @"Turbo mode tips content 1"); self.contentLabel.text = YMLocalizedString(@"20.20.62_text_15.1");
self.contentLabel.font = [UIFont systemFontOfSize:16.0]; self.contentLabel.font = [UIFont systemFontOfSize:16.0];
self.contentLabel.textColor = [UIColor darkGrayColor]; self.contentLabel.textColor = [UIColor darkGrayColor];
self.contentLabel.numberOfLines = 0; self.contentLabel.numberOfLines = 0;
@@ -150,7 +150,7 @@
- (void)setupContentLabel2 { - (void)setupContentLabel2 {
self.contentLabel2 = [[UILabel alloc] init]; self.contentLabel2 = [[UILabel alloc] init];
self.contentLabel2.text = NSLocalizedString(@"20.20.62_text_15.2", @"Turbo mode tips content 2"); self.contentLabel2.text = YMLocalizedString(@"20.20.62_text_15.2");
self.contentLabel2.font = [UIFont systemFontOfSize:16.0]; self.contentLabel2.font = [UIFont systemFontOfSize:16.0];
self.contentLabel2.textColor = [UIColor darkGrayColor]; self.contentLabel2.textColor = [UIColor darkGrayColor];
self.contentLabel2.numberOfLines = 0; self.contentLabel2.numberOfLines = 0;

View File

@@ -40,6 +40,8 @@
#import "ShareHelder.h" #import "ShareHelder.h"
#import "XPRoomPresenter.h" #import "XPRoomPresenter.h"
#import "TurboModeStateManager.h"
#import "XPTurboModeConstants.h"
@interface RoomHeaderView ()<XPRoomRecommendViewDelegate> @interface RoomHeaderView ()<XPRoomRecommendViewDelegate>
@@ -53,7 +55,7 @@
@property (nonatomic,strong) MarqueeLabel *titleLabel; @property (nonatomic,strong) MarqueeLabel *titleLabel;
@property(nonatomic, strong) NetImageView *levelImageView; @property(nonatomic, strong) NetImageView *levelImageView;
/// ///
@property (nonatomic,strong) UIImageView *giftEffectImageView; @property (nonatomic,strong) UIImageView *noGiftEffectImageView;
/// ///
@property (nonatomic,strong) UIImageView *lockRoomImageView; @property (nonatomic,strong) UIImageView *lockRoomImageView;
/// ///
@@ -86,6 +88,7 @@
_hostDelegate = delegate; _hostDelegate = delegate;
[self initSubViews]; [self initSubViews];
[self initSubViewConstraints]; [self initSubViewConstraints];
[self setupTurboModeNotifications];
} }
return self; return self;
} }
@@ -183,7 +186,7 @@
[self.onlineStackView addArrangedSubview:self.idLabel]; [self.onlineStackView addArrangedSubview:self.idLabel];
[self.titleStackView addArrangedSubview:self.titleLabel]; [self.titleStackView addArrangedSubview:self.titleLabel];
[self.titleStackView addArrangedSubview:self.giftEffectImageView]; [self.titleStackView addArrangedSubview:self.noGiftEffectImageView];
[self.titleStackView addArrangedSubview:self.lockRoomImageView]; [self.titleStackView addArrangedSubview:self.lockRoomImageView];
[self.titleStackView addArrangedSubview:self.levelImageView]; [self.titleStackView addArrangedSubview:self.levelImageView];
} }
@@ -236,7 +239,7 @@
make.height.mas_equalTo(7); make.height.mas_equalTo(7);
}]; }];
[self.giftEffectImageView mas_makeConstraints:^(MASConstraintMaker *make) { [self.noGiftEffectImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(20,20)); make.size.mas_equalTo(CGSizeMake(20,20));
}]; }];
@@ -274,7 +277,7 @@
self.idLabel.text = [NSString stringWithFormat:@"ID%ld",(long)roomInfo.erbanNo]; self.idLabel.text = [NSString stringWithFormat:@"ID%ld",(long)roomInfo.erbanNo];
self.avatarView.imageUrl = roomInfo.avatar; self.avatarView.imageUrl = roomInfo.avatar;
self.titleLabel.text = roomInfo.title; self.titleLabel.text = roomInfo.title;
self.giftEffectImageView.hidden = roomInfo.hasAnimationEffect; [self updateGiftEffectImageViewVisibility];
if (roomInfo.uid == [AccountInfoStorage instance].getUid.integerValue) { if (roomInfo.uid == [AccountInfoStorage instance].getUid.integerValue) {
self.collectButton.hidden = YES; self.collectButton.hidden = YES;
} else { } else {
@@ -444,14 +447,14 @@
return _titleLabel; return _titleLabel;
} }
- (UIImageView *)giftEffectImageView { - (UIImageView *)noGiftEffectImageView {
if (!_giftEffectImageView) { if (!_noGiftEffectImageView) {
_giftEffectImageView = [[UIImageView alloc] init]; _noGiftEffectImageView = [[UIImageView alloc] init];
_giftEffectImageView.userInteractionEnabled = YES; _noGiftEffectImageView.userInteractionEnabled = YES;
_giftEffectImageView.image = [UIImage imageNamed:@"room_info_gift_effect"]; _noGiftEffectImageView.image = [UIImage imageNamed:@"room_info_disable_gift_effect"];
_giftEffectImageView.hidden = YES; _noGiftEffectImageView.hidden = YES;
} }
return _giftEffectImageView; return _noGiftEffectImageView;
} }
- (UIImageView *)lockRoomImageView { - (UIImageView *)lockRoomImageView {
@@ -524,4 +527,38 @@
return _levelImageView; return _levelImageView;
} }
#pragma mark - Turbo Mode Methods
- (void)setupTurboModeNotifications {
// Turbo Mode
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleTurboGiftEffectsStateChanged:)
name:kTurboGiftEffectsEnabledChanged
object:nil];
}
- (void)updateGiftEffectImageViewVisibility {
RoomInfoModel* roomInfo = self.hostDelegate.getRoomInfo;
if (!roomInfo) return;
NSString *roomId = @(roomInfo.roomId).stringValue;
BOOL turboGiftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomId];
// TODO: 1. 使 isGiftEffectsEnabledForRoom: NO = hidden2. TurboModeStateManager isGiftEffectsEnabledForRoom
BOOL shouldShow = turboGiftEffectsEnabled && !roomInfo.hasAnimationEffect;
self.noGiftEffectImageView.hidden = !shouldShow;
NSLog(@"🎮 RoomHeaderView: giftEffectImageView 显示状态更新 - 房间ID: %@, turboGiftEffects: %@, hasAnimationEffect: %@, 显示: %@",
roomId, turboGiftEffectsEnabled ? @"开启" : @"关闭", roomInfo.hasAnimationEffect ? @"有" : @"无", shouldShow ? @"是" : @"否");
}
- (void)handleTurboGiftEffectsStateChanged:(NSNotification *)notification {
NSLog(@"🎮 RoomHeaderView: 收到 Turbo Mode 礼物特效状态变化通知");
[self updateGiftEffectImageViewVisibility];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end @end

View File

@@ -1,56 +1,33 @@
# CP SVGA 逻辑迁移测试报告 -[XPRoomMoreMenuViewController collectionView:didSelectItemAtIndexPath:] [Line 326]=== 点击菜单项 ===
-[XPRoomMoreMenuViewController collectionView:didSelectItemAtIndexPath:] [Line 327]点击的菜单项: 标题=Turbo 模式, 类型=6
## 迁移完成情况 -[XPRoomMoreMenuViewController showTurboModeTipsForUserAction] [Line 609]🎮 用户主动开启 Turbo Mode显示 Tips 弹窗
-[XPTurboModeTipsView enableTurboModeOnShow] [Line 50]🎮 Tips View 显示时自动开启 Turbo Mode
### ✅ 已完成的工作 -[XPTurboModeTipsManager enableTurboModeDirectly] [Line 203]🎮 XPTurboModeTipsManager 直接开启 Turbo Mode
-[TurboModeStateManager setTurboModeEnabled:] [Line 195]🎮 TurboModeStateManager: 全局 turbo mode 设置为 开启
1. **在 MicMidpointRectManager 中新增的 CP 业务逻辑方法:** -[BuglyManager turboModeStateChanged:] [Line 335][BuglyManager] 🎮 Turbo Mode 状态变化: 开启
- `handleMicChangeForCPWithStageView:micCount:queue:currentUserUid:roomType:` -[BuglyManager turboModeStateChanged:] [Line 340][BuglyManager] 🔄 Turbo Mode 开启卡顿计数复位为0
- `handleCPBindingOrUpgradeMessageWithStageView:micCount:queue:` -[BannerScheduler clearQueue] [Line 105]🗑️ BannerScheduler: 清空 Banner 队列 - 原有数量: 0
- `handleMicRelationshipCPMessage:` -[BannerScheduler pause] [Line 121]⏸️ BannerScheduler: 暂停调度器
- `handleOtherUserMicChange:changeType:stageView:micCount:queue:roomType:` -[RoomAnimationView handleTurboModeStateChanged:] [Line 4348]🎮 RoomAnimationView: Turbo Mode 已开启,停止所有 banner 和动画
- `handleMicSwitchScenarioIfNeededWithStageView:micCount:queue:currentUserUid:roomType:` -[XPTurboModeTipsManager getCurrentRoomId] [Line 227]🎮 获取当前房间ID: 3184
- `handleDownMicEventIfNeededWithStageView:micCount:queue:roomType:` -[RoomHeaderView handleTurboGiftEffectsStateChanged:] [Line 556]🎮 RoomHeaderView: 收到 Turbo Mode 礼物特效状态变化通知
- `updateCpListCacheAndRedraw:stageView:micCount:roomType:` -[RoomHeaderView updateGiftEffectImageViewVisibility] [Line 552]🎮 RoomHeaderView: giftEffectImageView 显示状态更新 - 房间ID: 6076861580, turboGiftEffects: 开启, hasAnimationEffect: 有, 显示: 否
- `drawSocialStageMidpointRectsWithStageView:micCount:roomType:` -[RoomAnimationView cleanupGiftEffects] [Line 3960]🎮 清理礼物特效
- `removeCpDataForUids:` -[RoomAnimationView cleanupGiftEffects] [Line 3986]🎮 礼物特效清理完成
-[RoomAnimationView handleTurboGiftEffectsChanged:] [Line 4288]🎮 RoomAnimationView 礼物特效状态变化: 关闭
2. **在 XPRoomViewController 中简化的方法调用:** -[RoomAnimationView cleanupGiftBanners] [Line 3991]🎮 清理礼物相关banner
- 所有 CP 相关方法现在都直接调用 MicMidpointRectManager 的对应方法 -[RoomAnimationView cleanupGiftBanners] [Line 4013]🎮 礼物相关banner清理完成
- 添加了 `getMicCountForRoomType:` 方法来计算麦位总数 -[RoomAnimationView handleTurboGlobalGiftScreenChanged:] [Line 4300]🎮 RoomAnimationView 全局礼物屏幕状态变化: 关闭
- 移除了冗余的 CP 相关方法 -[RoomAnimationView cleanupGameBanners] [Line 4018]🎮 清理游戏相关banner
-[RoomAnimationView cleanupGameBanners] [Line 4038]🎮 游戏相关banner清理完成
3. **头文件更新:** -[RoomAnimationView handleTurboGlobalGameScreenChanged:] [Line 4312]🎮 RoomAnimationView 全局游戏屏幕状态变化: 关闭
- 在 MicMidpointRectManager.h 中添加了所有新方法的声明 -[TurboModeStateManager applyTurboModeToSwitchesForRoom:] [Line 224]🎮 TurboModeStateManager: 应用 turbo mode房间 3184 的3个非CP开关全部关闭
- 添加了必要的类前向声明 -[XPTurboModeTipsManager enableTurboModeDirectly] [Line 213]🎮 已为房间 3184 应用 Turbo Mode 设置
-[XPTurboModeTipsView showWithAnimation] [Line 276]🎮 Tips 弹窗已添加到父视图,动画开始
### 🔧 修复的问题 -[XPRoomMoreMenuViewController showTurboModeTipsForUserAction] [Line 633]🎮 用户主动触发的 Turbo Mode Tips 弹窗已创建
-[XPTurboModeTipsManager showTurboModeEnabledToast]_block_invoke [Line 241]🎮 显示提示Turbo Mode 已开启
1. **编译错误修复:** -[XPTurboModeTipsView understandButtonTapped] [Line 249]🎮 用户点击了 'I understand' 按钮,关闭 Tips 弹窗
- 修复了 `self.micCount` 属性不存在的错误 -[XPTurboModeTipsView dismissWithAnimation]_block_invoke_2 [Line 286]🎮 Tips 弹窗已从父视图移除
- 添加了 `getMicCountForRoomType:` 方法来动态计算麦位总数 -[XPRoomMoreMenuViewController collectionView:didSelectItemAtIndexPath:] [Line 326]=== 点击菜单项 ===
- 在头文件中添加了所有新方法的声明 -[XPRoomMoreMenuViewController collectionView:didSelectItemAtIndexPath:] [Line 327]点击的菜单项: 标题=我的特效, 类型=29
-[XPEffectPanelViewController setupSwitchStates] [Line 183]🎮 Turbo Mode开关初始化完成 - 房间ID: 6076861580, 礼物特效: 开启, 全局礼物屏幕: 开启, 全局游戏屏幕: 开启
2. **代码结构优化:**
- 将 CP 业务逻辑从 ViewController 迁移到 Manager
- 减少了代码重复
- 提高了代码的内聚性
### 📊 迁移效果
- **代码行数减少**XPRoomViewController 中 CP 相关代码大幅减少
- **职责分离**MicMidpointRectManager 专门负责 CP SVGA 逻辑
- **可维护性提升**CP 相关逻辑集中管理,修改更容易
- **可测试性提升**Manager 可以独立进行单元测试
### 🎯 Linus 式优势
**单一职责**Manager 专门负责 CP SVGA 逻辑ViewController 只负责调用
**减少重复**:消除了 ViewController 中的重复代码
**易于测试**Manager 可以独立测试
**易于维护**CP 相关逻辑集中在一个地方
**降低耦合**ViewController 只负责调用,不处理具体逻辑
## 迁移完成!🎉
所有 CP SVGA 相关逻辑已成功从 XPRoomViewController 迁移到 MicMidpointRectManager 中,代码结构更加清晰,维护性大大提升。