diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj index 2705977b..9dec9286 100644 --- a/YuMi.xcodeproj/project.pbxproj +++ b/YuMi.xcodeproj/project.pbxproj @@ -497,6 +497,7 @@ 23FF42792AA6E19C0055733C /* HomeMenuSourceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FF42782AA6E19C0055733C /* HomeMenuSourceModel.m */; }; 23FF428E2AAB2D3A0055733C /* XPCandyTreeBuyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23FF428D2AAB2D3A0055733C /* XPCandyTreeBuyView.m */; }; 4C1892992CF84349004D4426 /* RoomCahtCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1892982CF84349004D4426 /* RoomCahtCell.m */; }; + 4C44BD5D2D151B5C00F321FA /* RoomSideMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C44BD5C2D151B5C00F321FA /* RoomSideMenu.m */; }; 4C5C37232D0C1C7900BA9AB8 /* RegionListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5C37222D0C1C7900BA9AB8 /* RegionListViewController.m */; }; 4C6C92C02D1172D9000A4693 /* RegionListInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C6C92BF2D1172D9000A4693 /* RegionListInfo.m */; }; 4C6E1F752CEAEC3C0073D0A3 /* ShoppingMallTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C6E1F742CEAEC3C0073D0A3 /* ShoppingMallTagView.m */; }; @@ -2591,6 +2592,8 @@ 23FF428D2AAB2D3A0055733C /* XPCandyTreeBuyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPCandyTreeBuyView.m; sourceTree = ""; }; 4C1892972CF84349004D4426 /* RoomCahtCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoomCahtCell.h; sourceTree = ""; }; 4C1892982CF84349004D4426 /* RoomCahtCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomCahtCell.m; sourceTree = ""; }; + 4C44BD5B2D151B5C00F321FA /* RoomSideMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoomSideMenu.h; sourceTree = ""; }; + 4C44BD5C2D151B5C00F321FA /* RoomSideMenu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomSideMenu.m; sourceTree = ""; }; 4C5C37212D0C1C7900BA9AB8 /* RegionListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RegionListViewController.h; sourceTree = ""; }; 4C5C37222D0C1C7900BA9AB8 /* RegionListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RegionListViewController.m; sourceTree = ""; }; 4C6C92BE2D1172D9000A4693 /* RegionListInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RegionListInfo.h; sourceTree = ""; }; @@ -10537,6 +10540,8 @@ 235A45192B04A352009753F5 /* PIRoomActivityWebView.m */, 235A451B2B04A452009753F5 /* PIRoomActivityWebCell.h */, 235A451C2B04A452009753F5 /* PIRoomActivityWebCell.m */, + 4C44BD5B2D151B5C00F321FA /* RoomSideMenu.h */, + 4C44BD5C2D151B5C00F321FA /* RoomSideMenu.m */, ); path = ActivityContainerView; sourceTree = ""; @@ -12643,6 +12648,7 @@ E8AC723A26F49AAE007D6E91 /* XPMineNotifyStatus.m in Sources */, E87DF50E2A42CF15009C1185 /* HomeLiveRoomModel.m in Sources */, E8F6135F291E274E00E12650 /* NSArray+Safe.m in Sources */, + 4C44BD5D2D151B5C00F321FA /* RoomSideMenu.m in Sources */, E87E62622A3F568A002F68C9 /* XPNewHomeNavView.m in Sources */, 54E82E9F2CA6876300C931D9 /* RoomBoomManager.m in Sources */, 18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */, diff --git a/YuMi/Assets.xcassets/1.0.34/Contents.json b/YuMi/Assets.xcassets/1.0.34/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/YuMi/Assets.xcassets/1.0.34/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/1.0.34/side_menu_close.imageset/Contents.json b/YuMi/Assets.xcassets/1.0.34/side_menu_close.imageset/Contents.json new file mode 100644 index 00000000..84f4d599 --- /dev/null +++ b/YuMi/Assets.xcassets/1.0.34/side_menu_close.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "展开.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/1.0.34/side_menu_close.imageset/展开.png b/YuMi/Assets.xcassets/1.0.34/side_menu_close.imageset/展开.png new file mode 100644 index 00000000..94b0a501 Binary files /dev/null and b/YuMi/Assets.xcassets/1.0.34/side_menu_close.imageset/展开.png differ diff --git a/YuMi/Assets.xcassets/1.0.34/side_menu_open.imageset/Contents.json b/YuMi/Assets.xcassets/1.0.34/side_menu_open.imageset/Contents.json new file mode 100644 index 00000000..b2cad322 --- /dev/null +++ b/YuMi/Assets.xcassets/1.0.34/side_menu_open.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "展开 (1).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/1.0.34/side_menu_open.imageset/展开 (1).png b/YuMi/Assets.xcassets/1.0.34/side_menu_open.imageset/展开 (1).png new file mode 100644 index 00000000..f13ac844 Binary files /dev/null and b/YuMi/Assets.xcassets/1.0.34/side_menu_open.imageset/展开 (1).png differ diff --git a/YuMi/CustomUI/Adbvertise/AdvertiseModel.h b/YuMi/CustomUI/Adbvertise/AdvertiseModel.h index aead1deb..c0ebe5ce 100644 --- a/YuMi/CustomUI/Adbvertise/AdvertiseModel.h +++ b/YuMi/CustomUI/Adbvertise/AdvertiseModel.h @@ -19,6 +19,8 @@ typedef NS_ENUM(NSInteger, SplashInfoSkipType) { @property (nonatomic, strong) NSString *link; @property (nonatomic, assign) SplashInfoSkipType type;// 1跳app页面,2跳聊天室,3跳h5页面 @property (nonatomic, copy) NSString *pict; + + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMLogin/View/RegionListViewController.m b/YuMi/Modules/YMLogin/View/RegionListViewController.m index 28e39278..94e87e14 100644 --- a/YuMi/Modules/YMLogin/View/RegionListViewController.m +++ b/YuMi/Modules/YMLogin/View/RegionListViewController.m @@ -427,13 +427,13 @@ if (!_collectionView) { UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; // if (self.type == 1) { - layout.itemSize = CGSizeMake(KScreenWidth - 30, 38); + layout.itemSize = CGSizeMake(KScreenWidth - 30, 48); // } else if (self.type == 2) { // layout.itemSize = CGSizeMake(kGetScaleWidth(166), 38); // } layout.sectionInset = UIEdgeInsetsMake(0, 16, kSafeAreaBottomHeight, 16); - layout.minimumLineSpacing = 10; + layout.minimumLineSpacing = 0; layout.minimumInteritemSpacing = 10; _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 44, KScreenWidth, KScreenHeight-44) collectionViewLayout:layout]; diff --git a/YuMi/Modules/YMMessage/View/NIMTimeUtils.h b/YuMi/Modules/YMMessage/View/NIMTimeUtils.h index 37b5592d..7dcaf8ee 100644 --- a/YuMi/Modules/YMMessage/View/NIMTimeUtils.h +++ b/YuMi/Modules/YMMessage/View/NIMTimeUtils.h @@ -11,7 +11,9 @@ NS_ASSUME_NONNULL_BEGIN @interface NIMTimeUtils : NSObject -+ (NSString *)showTime:(NSTimeInterval)msglastTime showDetail:(BOOL)showDetail; ++ (NSString *)formattedTimeFromInterval:(NSTimeInterval)timeInterval; + +//+ (NSString *)showTime:(NSTimeInterval)msglastTime showDetail:(BOOL)showDetail; @end diff --git a/YuMi/Modules/YMMessage/View/NIMTimeUtils.m b/YuMi/Modules/YMMessage/View/NIMTimeUtils.m index f03b4c4b..99dbf3ad 100644 --- a/YuMi/Modules/YMMessage/View/NIMTimeUtils.m +++ b/YuMi/Modules/YMMessage/View/NIMTimeUtils.m @@ -9,7 +9,29 @@ @implementation NIMTimeUtils -+ (NSString*)showTime:(NSTimeInterval) msglastTime showDetail:(BOOL)showDetail ++ (NSString *)formattedTimeFromInterval:(NSTimeInterval)timeInterval { + // 获取当前日历 + NSCalendar *calendar = [NSCalendar currentCalendar]; + + // 获取当前日期 + NSDate *currentDate = [NSDate date]; + NSDate *inputDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; + + // 检查输入日期是否是今天 + if ([calendar isDate:inputDate inSameDayAsDate:currentDate]) { + // 如果是今天,返回 hour:min 格式 + NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init]; + timeFormatter.dateFormat = @"HH:mm"; // 小时和分钟格式 + return [timeFormatter stringFromDate:inputDate]; + } else { + // 如果不是今天,返回 year/month/day 格式 + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateFormat = @"yyyy/MM/dd"; // 年/月/日格式 + return [dateFormatter stringFromDate:inputDate]; + } +} + ++ (NSString*)showTime:(NSTimeInterval)msglastTime showDetail:(BOOL)showDetail { //今天的时间 NSDate * nowDate = [NSDate date]; diff --git a/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m b/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m index 74bbf44b..fddf8dba 100644 --- a/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m +++ b/YuMi/Modules/YMMessage/View/SessionList/SessionListCell.m @@ -51,7 +51,7 @@ NIMUser *user = [[NIMSDK sharedSDK].userManager userInfo:recent.session.sessionId]; self.avatarImageView.image = nil; self.nameLabel.text = @""; - if (user.userInfo == nil) { + if (user.userInfo == nil){//} || [user.userInfo.nickName.lowercaseString isEqualToString:@"Platform New User".lowercaseString]) { NSString * uid = recent.session.sessionId; if (uid > 0) { NSArray * uids = @[uid]; @@ -69,7 +69,7 @@ } } else { NSString *avatarUrl = user.userInfo.avatarUrl; - self.nameLabel.text = user.userInfo.nickName; + self.nameLabel.text = user.userInfo.nickName; [self.avatarImageView loadImageWithUrl:avatarUrl completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) { self.avatarImageView.image = image; }]; @@ -82,10 +82,10 @@ if (recent.lastMessage) { - self.timeLabel.text = [NIMTimeUtils showTime:recent.lastMessage.timestamp showDetail:NO]; + self.timeLabel.text = [NIMTimeUtils formattedTimeFromInterval:recent.lastMessage.timestamp]; } else { NSTimeInterval timeSecond = recent.updateTime / 1000.0; - self.timeLabel.text = [NIMTimeUtils showTime:timeSecond showDetail:NO]; + self.timeLabel.text = [NIMTimeUtils formattedTimeFromInterval:timeSecond]; } [self.timeLabel sizeToFit]; if (recent.unreadCount) { diff --git a/YuMi/Modules/YMMine/View/Cell/Friend/XPMineFriendTableViewCell.m b/YuMi/Modules/YMMine/View/Cell/Friend/XPMineFriendTableViewCell.m index 4d860bac..2de1121b 100644 --- a/YuMi/Modules/YMMine/View/Cell/Friend/XPMineFriendTableViewCell.m +++ b/YuMi/Modules/YMMine/View/Cell/Friend/XPMineFriendTableViewCell.m @@ -89,6 +89,7 @@ [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.mas_equalTo(self.avatarImageView.mas_trailing).offset(10); + make.trailing.mas_equalTo(self.container).offset(-10); make.bottom.mas_equalTo(self.avatarImageView.mas_centerY).offset(-2); }]; [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { diff --git a/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.h b/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.h new file mode 100644 index 00000000..c2e1474f --- /dev/null +++ b/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.h @@ -0,0 +1,33 @@ +// +// RoomSideMenu.h +// YuMi +// +// Created by P on 2024/12/20. +// + +#import + +#import "RoomInfoModel.h" +#import "BoomInfoModel.h" +#import "RoomHostDelegate.h" +#import "XPRedPacketModel.h" +#import "RoomGuestDelegate.h" +#import "ActivityInfoModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface RoomSideMenu : UIView + +@property (nonatomic, copy) void(^openRedPacketHandle)(XPRedPacketModel * _Nullable redModel, RoomType type, BOOL checkList); +@property (nonatomic, copy) void(^showSendGiftView)(void); +@property (nonatomic, strong) NSMutableArray *redPacketList; +@property (nonatomic, strong) NSMutableArray *playList; +@property (nonatomic, strong) NSMutableArray *littleGameList; + +- (instancetype)initWithDelegate:(id)delegate; +- (void)updateView; +- (void)updateForBoomDetailArray:(NSArray *)models; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.m b/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.m new file mode 100644 index 00000000..c024f651 --- /dev/null +++ b/YuMi/Modules/YMRoom/View/ActivityContainerView/RoomSideMenu.m @@ -0,0 +1,704 @@ +// +// RoomSideMenu.m +// YuMi +// +// Created by P on 2024/12/20. +// + +#import "RoomSideMenu.h" + +#import +#import +#import + +#import "Api+Room.h" +#import "Api+LittleGame.h" +#import "Api+TreasureFairy.h" + +#import "RoomBoomManager.h" +#import "RoomBoomEntryView.h" +#import "LittleGameInfoModel.h" + +#import "MSRoomGameWebVC.h" +#import "MSRoomMenuGameVC.h" +#import "XPRoomAnimationView.h" +#import "XPWebViewController.h" +#import "XPRoomViewController.h" +#import "BoomInfoViewController.h" +#import "XPSailingViewController.h" +#import "XCCurrentVCStackManager.h" +#import "XPCandyTreeViewController.h" +#import "XPArrangeMicViewController.h" + +UIKIT_EXTERN NSString *kShowFirstRechargeView; + +@interface RoomSideMenu () + +@property(nonatomic, strong) NSMutableArray *menuItemViews; +@property (nonatomic, strong) RACSubject *menuItemViewsSubject; // 数据源信号 + +///游戏菜单按钮 +@property(nonatomic, strong) UIButton *gambleMenuButton; +/// 配置的入口,逻辑由 API 返回数据决定 +@property(nonatomic, strong) UIButton *configEntranceMenuButton; +@property(nonatomic, strong) UIButton *pkMenuButton; +@property (nonatomic,strong) UIImageView *joinView; + +@property (nonatomic, strong) UITableView *tableView; +@property(nonatomic, strong) UIScrollView *scrollView; +@property (nonatomic,strong) SDCycleScrollView *cycleScrollView; +@property (nonatomic, weak) id hostDelegate; +@property (nonatomic, strong) NSMutableArray *activityList; +@property (nonatomic, assign) BOOL isLoadActivity; + +@property (nonatomic, strong) RoomBoomEntryView *boomView; +@property (nonatomic, copy) NSArray *boomModels; + +@property (nonatomic, strong) NetImageView *loader_url_1; +@property (nonatomic, strong) NetImageView *loader_url_2; + +@end + +// TODO: 补充红包视图 | 调整顺序 | 调整大小 | 支持收起展开 + +@implementation RoomSideMenu + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [[RoomBoomManager sharedManager] removeEventListenerForTarget:self]; +} + +- (instancetype)initWithDelegate:(id)delegate { + self = [super init]; + if (self) { +#if DEBUG + self.backgroundColor = [UIColor orangeColor]; +#endif + self.menuItemViews = @[].mutableCopy; + self.menuItemViewsSubject = [RACSubject subject]; + self.hostDelegate = delegate; + [self setupViews]; + [self setupBoomManager]; + } + return self; +} + +#pragma mark - Setup +- (void)setupViews { + [self addSubview:self.cycleScrollView]; + [self addSubview:self.scrollView]; + + [self.cycleScrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.leading.trailing.equalTo(self); + make.height.mas_equalTo(self.cycleScrollView.mas_width); + }]; + + [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.cycleScrollView.mas_bottom); + make.leading.trailing.bottom.equalTo(self); + }]; + + @kWeakify(self); + [self.menuItemViewsSubject subscribeNext:^(NSArray * _Nullable x) { + @kStrongify(self); + [self updateScrollView: x]; + }]; +} + +- (void)setupBoomManager { + @kWeakify(self); + [[RoomBoomManager sharedManager] registerBoomProgressUpdate:^(id _Nonnull sth) { + @kStrongify(self); + if ([sth isKindOfClass:[BoomDetailModel class]]) { + self.boomView.boomModel = (BoomDetailModel *)sth; + } + } target:self]; +} + +- (void)updateMenuItem:(UIView *)itemView isRemove:(BOOL)isRemove { + if (isRemove) { + if ([self.menuItemViews containsObject:itemView]) { + [self.menuItemViews removeObject:itemView]; + } + } else { + if ([self.menuItemViews containsObject:itemView]) { + return; + } + [self.menuItemViews addObject:itemView]; + } + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.menuItemViewsSubject sendNext:self.menuItemViews]; + }); +} + +#pragma mark - Methods +- (void)updateView { + if (self.isLoadActivity) { + [self configLittleGameActivity]; + } else { + [self requestActivityList]; + } +} + +- (void)updateForBoomDetailArray:(NSArray *)models { + _boomModels = models; + if (!models || models.count == 0) { + return; + } + + BOOL hasBoom = NO; + for (BoomDetailModel *boom in models) { + if (boom.currLevel == 1) { + hasBoom = YES; + self.boomView.boomModel = boom; + break; + } + } + + if (!hasBoom) { + // 处理到顶级后可能找不到数据的异常 + self.boomView.boomModel = [models lastObject]; + } + + [self updateMenuItem:self.boomView isRemove:NO]; +} + +- (void)updateScrollView:(NSArray *)data { + // 清空当前 scrollView 的 subviews + [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + + // 设置 contentSize + CGFloat width = self.scrollView.bounds.size.width; + self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width, + MAX(self.scrollView.bounds.size.height, width * data.count)); + + // 动态添加 subviews + CGFloat yOffset = self.scrollView.contentSize.height; // 从底部开始布局 + for (UIView *view in data) { + [self.scrollView addSubview:view]; + yOffset -= width; + view.frame = CGRectMake(0, yOffset, width, width); + } + + // 滚动到底部 + if (self.scrollView.contentSize.height > self.scrollView.bounds.size.height) { + [self.scrollView setContentOffset:CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height) + animated:NO]; + } +} + +- (void)configLittleGameActivity { + [self updateCycleView]; +} + +- (void)requestActivityList { + RACSubject* playRAC = [RACSubject subject]; + RACSubject* activityRAC = [RACSubject subject]; + RACSubject* littleGameRAC = [RACSubject subject]; + + @kWeakify(self); + [[RACSignal combineLatest:@[playRAC, + activityRAC, + littleGameRAC] + reduce:^id(NSArray *playModels, + NSArray *activityModels, + NSArray *littleGameModels){ + @kStrongify(self); + self.playList = [NSMutableArray arrayWithArray:playModels]; + self.activityList = [NSMutableArray arrayWithArray:activityModels]; + self.littleGameList = [NSMutableArray arrayWithArray:littleGameModels]; + + [self dealWithData]; + + [self onRoomUpdate]; + return nil; + }] subscribeError:^(NSError * _Nullable error) { + [XNDJTDDLoadingTool showErrorWithMessage:error.domain]; + }]; + + [self loadGames:playRAC]; + [self loadActivities:activityRAC]; + [self loadLittleGames:littleGameRAC]; +} + +- (void)loadGames:(RACSubject *)racSubject { + RoomInfoModel *roomInfo = self.hostDelegate.getRoomInfo; + NSString * roomId = [NSString stringWithFormat:@"%ld", roomInfo.uid]; + [Api getPlayList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + if (code == 200) { + NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; + [racSubject sendNext:array]; + [racSubject sendCompleted]; + } else { + [racSubject sendError:[NSError errorWithDomain:msg code:code userInfo:nil]]; + } + } roomId:roomId]; +} + +- (void)loadActivities:(RACSubject *)racSubject { + RoomInfoModel *roomInfo = self.hostDelegate.getRoomInfo; + NSString * roomId = [NSString stringWithFormat:@"%ld", roomInfo.uid]; + [Api roomActivityList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + if (code == 200) { + NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; + [racSubject sendNext:array]; + [racSubject sendCompleted]; + } else { + [racSubject sendError:[NSError errorWithDomain:msg code:code userInfo:nil]]; + } + } roomId:roomId]; +} + +- (void)loadLittleGames:(RACSubject *)racSubject { + RoomInfoModel *roomInfo = self.hostDelegate.getRoomInfo; + NSString * roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid]; + [Api getLittleGameList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + if (code == 200) { + NSArray * array = [LittleGameInfoModel modelsWithArray:data.data]; + [racSubject sendNext:array]; + [racSubject sendCompleted]; + } else { + [racSubject sendError:[NSError errorWithDomain:msg code:code userInfo:nil]]; + } + } + roomUid:roomUid]; +} + +-(void)dealWithData{ + self.isLoadActivity = YES; + self.cycleScrollView.hidden = NO; + + if (self.playList.count > 0 || self.littleGameList.count >0) { + [self updateMenuItem:self.gambleMenuButton isRemove:NO]; + } + + if (self.hostDelegate.getRoomInfo.type == RoomType_MiniGame) { + [self configLittleGameActivity]; + } else { + [self updateCycleView]; + } +} + +- (void)updateConfigEntranceButtons:(RoomInfoModel *)roomInfo { + RoomBottomEntranceModel *model = roomInfo.rightBottomIconConfig; + if (!model) { + return; + } + + @kWeakify(self); + if (![NSString isEmpty:model.icon2Url]) { + [self.loader_url_2 loadImageWithUrl:model.icon2Url + completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) { + @kStrongify(self); + [self.gambleMenuButton setImage:image + forState:UIControlStateNormal]; + }]; + } + + if (![NSString isEmpty:model.icon1Url]) { + [self.loader_url_1 loadImageWithUrl:model.icon1Url + completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) { + @kStrongify(self); + [self.configEntranceMenuButton setImage:image + forState:UIControlStateNormal]; + [self updateMenuItem:self.configEntranceMenuButton isRemove:NO]; + }]; + } else { + if (_configEntranceMenuButton) { + [self updateMenuItem:self.configEntranceMenuButton isRemove:YES]; + } + } +} + +- (void)updateCycleView { + NSMutableArray *picArray = [NSMutableArray array]; + for (ActivityInfoModel *model in self.activityList) { + [picArray addObject:model.icon ?: @""]; + } + + self.cycleScrollView.imageURLStringsGroup = picArray; + if (picArray.count > 1) { + [self.cycleScrollView setAutoScroll:YES]; + self.cycleScrollView.autoScrollTimeInterval = 3; + } else { + [self.cycleScrollView setAutoScroll:NO]; + } +} + +- (void)openURL:(NSString *)urlString { + RoomInfoModel *roomInfo = self.hostDelegate.getRoomInfo; + XPWebViewController *vc = [[XPWebViewController alloc] initWithRoomUID:@(roomInfo.uid).stringValue]; + vc.url = urlString; + [self.hostDelegate.getCurrentNav pushViewController:vc animated:YES]; +} + +- (void)openBaiShunGame:(RoomBottomEntranceModel *)model { + if ([self.hostDelegate isKindOfClass:[XPRoomViewController class]]){ + ActivityInfoModel *activityModel = [[ActivityInfoModel alloc] init]; + activityModel.skipContent = model.skipUrl; + activityModel.skipType = ActivitySkipType_Web; + activityModel.showType = 1; + activityModel.code = @"BAISHUN"; + activityModel.ruleValue = model.reserve; + if (activityModel.gameModel) { + MSRoomGameWebVC *vc = [[MSRoomGameWebVC alloc] initWithDelegate:self.hostDelegate + gameModel:activityModel]; + vc.view.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight); + XPRoomViewController *roomVC = (XPRoomViewController *)self.hostDelegate; + [roomVC addChildViewController:vc]; + XPRoomAnimationView *animationView; + for (id obj in self.hostDelegate.getSuperView.subviews) { + if ([obj isKindOfClass:[XPRoomAnimationView class]]){ + animationView = obj; + break; + } + } + [self.hostDelegate.getSuperView addSubview:vc.view]; + vc.view.tag = 913; + } + } +} + +#pragma mark - User Response +- (void)displayBoomInfoProgress { + BoomInfoViewController *vc = [[BoomInfoViewController alloc] init]; + vc.roomUid = self.hostDelegate.getRoomInfo.uid; + vc.partitionId = self.hostDelegate.getUserInfo.partitionId; + vc.modalPresentationStyle = UIModalPresentationOverFullScreen; + [self.hostDelegate.getCurrentNav presentViewController:vc animated:YES completion:nil]; + + @kWeakify(self); + [vc setShowGiftPanel:^{ + @kStrongify(self); + if (self.showSendGiftView) { + self.showSendGiftView(); + } + }]; +} + +- (void)didTapGameMenuButton { + MSRoomMenuGameVC *vc = [[MSRoomMenuGameVC alloc] initWithDelegate:self.hostDelegate roomMenuType:MSRoomMenuTypeGame]; + vc.modalPresentationStyle = UIModalPresentationOverFullScreen; + [self.hostDelegate.getCurrentNav presentViewController:vc animated:YES completion:nil]; +} + +- (void)didTapConfigEntranceButton { + RoomInfoModel *roomInfo = self.hostDelegate.getRoomInfo; + RoomBottomEntranceModel *model = roomInfo.rightBottomIconConfig; + + if (!model || model.skipUrl.length == 0) { + return; + } + + switch (model.skipType) { + case 1: + [self openURL:model.skipUrl]; + break; + case 2: + [self openBaiShunGame:model]; + break; + default: + break; + } +} + +- (void)didTapPKMenuButton { + [self.hostDelegate showPKPanel]; +} + +- (void)didTapJoinDatingRecognizer { + if (self.hostDelegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode && self.hostDelegate.isRoomPKPlaying) { + [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomActivityContainerView2")]; + return; + } + NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; + request.roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]; + request.userIds = @[[AccountInfoStorage instance].getUid]; + @kWeakify(self); + [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { + @kStrongify(self); + NIMChatroomMember * member; + if (error == nil) { + member = members.firstObject; + } + RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; + XPArrangeMicInfoModel * info = [[XPArrangeMicInfoModel alloc] init]; + info.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid]; + info.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; + info.nick = roomInfo.nick; + info.roomAvatar = roomInfo.avatar; + info.roomTitle = roomInfo.title; + info.micQueue = [self.hostDelegate getMicroQueue]; + info.isManager = (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager); + info.type = roomInfo.roomModeType == RoomModeType_Open_Blind ? ArrangeMicType_Dating : roomInfo.roomModeType == RoomModeType_Open_PK_Mode ? ArrangeMicType_Room_PK : ArrangeMicType_Normal; + XPArrangeMicViewController * arrangeMicVC = [[XPArrangeMicViewController alloc] initWithInfo:info]; + [self.hostDelegate.getCurrentNav presentViewController:arrangeMicVC animated:YES completion:nil]; + }]; + +} + +#pragma mark - Room Delegate +- (void)onRoomEntered { + +} + +- (void)onRoomUpdate { + RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; + + [self updateConfigEntranceButtons:roomInfo]; + + if (roomInfo.roomModeType != RoomModeType_Open_PK_Mode) { + [self updateMenuItem:self.pkMenuButton isRemove:YES]; + } else { + [self updateMenuItem:self.pkMenuButton isRemove:NO]; + } + + switch (roomInfo.type) { + case RoomType_MiniGame: + break; + default: { + [self updateCycleView]; + + if (roomInfo.roomModeType == RoomModeType_Open_Blind || roomInfo.roomModeType == RoomModeType_Open_PK_Mode || roomInfo.roomModeType == RoomModeType_Open_Micro_Mode) { + if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode ) { + self.joinView.image = [UIImage getLanguageImage:@"room_pk_normal_member_enter"]; + } else { + self.joinView.image = [UIImage getLanguageImage:@"room_mode_dating_enter"]; + } + NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; + request.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; + request.userIds = @[[AccountInfoStorage instance].getUid]; + @kWeakify(self); + [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { + @kStrongify(self); + if (error == nil) { + NIMChatroomMember * member = members.firstObject; + if (member.type == NIMTeamMemberTypeOwner || member.type == NIMTeamMemberTypeManager) { + [self updateMenuItem:self.joinView isRemove:YES]; + return; + } + } + [self updateMenuItem:self.joinView isRemove:NO]; + }]; + } else { + [self updateMenuItem:self.joinView isRemove:YES]; + } + } + break; + } + +#if DEBUG + [self updateMenuItem:self.pkMenuButton isRemove:NO]; + [self updateMenuItem:self.joinView isRemove:NO]; +#endif +} + +- (void)handleNIMTextMessage:(NIMMessage *)message { + +} + +- (void)handleNIMNotificationMessage:(NIMMessage *)message { + +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return number of menu items + return 5; // Adjust based on your needs +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MenuCell"]; + + // Configure cell based on index + // Add your menu items here + + return cell; +} + +#pragma mark - SDCycleScrollViewDelegate +- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index { + NSArray *imageUrlList = cycleScrollView.imageURLStringsGroup; + + if (self.hostDelegate.getRoomInfo.type == RoomType_MiniGame) { + [self jumpPlayActionWithIndex:index imageUrlList:imageUrlList]; + return; + } + + NSString *picUrl = [imageUrlList xpSafeObjectAtIndex:index]; + if ([NSString isEmpty:picUrl]) { + return; + } + + NSMutableArray *infoList = @[].mutableCopy; + ActivityInfoModel * info; + for (ActivityInfoModel * getInfo in self.activityList) { + if([getInfo.icon isEqualToString:picUrl]){ + info = getInfo; + } + if(getInfo.skipType == ActivitySkipType_Web){ + [infoList addObject:getInfo]; + } + } + if (info == nil) { + return; + } + + if ([info.code isEqualToString:@"FIRST_CHARGE"]) { + [self firstRechargeTapRecognizer]; + } else if ([info.code isEqualToString:@"FIND_LOVE"]) { + [self lookLoveTapRecognizer]; + } else if ([info.code isEqualToString:@"NAUTICAL_ADVENTURE"]) { + + } else if ([info.code isEqualToString:@"SEIZE_TREASURE"]) { + + } else { + + } +} + +-(void)jumpPlayActionWithIndex:(NSInteger)index imageUrlList:(NSArray *)imageUrlList { + +} + +- (void)firstRechargeTapRecognizer { + [[NSNotificationCenter defaultCenter]postNotificationName:kShowFirstRechargeView object:nil]; +} + +- (void)lookLoveTapRecognizer { + XPCandyTreeViewController * candyTreeVC = [[XPCandyTreeViewController alloc] initWithDelegate:self.hostDelegate]; + candyTreeVC.view.frame = CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight); + [[XCCurrentVCStackManager shareManager].getCurrentVC.view addSubview:candyTreeVC.view]; + [[XCCurrentVCStackManager shareManager].getCurrentVC addChildViewController:candyTreeVC]; + [candyTreeVC.navigationController setNavigationBarHidden:YES animated:NO]; + [UIView animateWithDuration:0.1 animations:^{ + candyTreeVC.view.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight); + }completion:^(BOOL finished) { + + }]; +} + +- (void)sailTapRecognizer { + NSString * roomUid = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; + XPSailingViewController * sailingVC = [[XPSailingViewController alloc] initWithRoomUid:roomUid]; + [self.hostDelegate.getCurrentNav presentViewController:sailingVC animated:YES completion:nil]; +} + + +#pragma mark - Getters +- (UITableView *)tableView { + if (!_tableView) { + _tableView = [[UITableView alloc] init]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.transform = CGAffineTransformMakeScale(1, -1); + _tableView.backgroundColor = [UIColor clearColor]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"MenuCell"]; + } + return _tableView; +} + +- (UIScrollView *)scrollView { + if (!_scrollView) { + _scrollView = [[UIScrollView alloc] init]; + _scrollView.backgroundColor = [UIColor greenColor]; + } + return _scrollView; +} + +- (UIButton *)gambleMenuButton { + if (!_gambleMenuButton) { + UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; + [b setImage:[UIImage imageNamed:@"ms_room_game_button"] forState:UIControlStateNormal]; + [b addTarget:self action:@selector(didTapGameMenuButton) forControlEvents:UIControlEventTouchUpInside]; + b.imageView.contentMode = UIViewContentModeScaleAspectFit; + b.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill; + b.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; + _gambleMenuButton = b; + } + return _gambleMenuButton; +} + +- (UIButton *)configEntranceMenuButton { + if (!_configEntranceMenuButton) { + UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; + [b setImage:[UIImage imageNamed:@"ms_room_game_add_coin"] forState:UIControlStateNormal]; + [b addTarget:self action:@selector(didTapConfigEntranceButton) forControlEvents:UIControlEventTouchUpInside]; + b.imageView.contentMode = UIViewContentModeScaleAspectFit; + b.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill; + b.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; + _configEntranceMenuButton = b; + } + return _configEntranceMenuButton; +} + +- (UIButton *)pkMenuButton { + if (!_pkMenuButton) { + UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; + [b setImage:[UIImage imageNamed:@"room_pk_panel_mini_icon"] forState:UIControlStateNormal]; + [b addTarget:self action:@selector(didTapPKMenuButton) forControlEvents:UIControlEventTouchUpInside]; + b.imageView.contentMode = UIViewContentModeScaleAspectFill; + _pkMenuButton = b; + } + return _pkMenuButton; +} + +- (SDCycleScrollView *)cycleScrollView { + if (!_cycleScrollView) { + _cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectZero delegate:self placeholderImage:nil]; + _cycleScrollView.backgroundColor = [UIColor purpleColor]; + _cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentCenter; + _cycleScrollView.currentPageDotColor = [UIColor whiteColor]; + _cycleScrollView.pageDotColor = [UIColor colorWithWhite:1 alpha:0.2]; + _cycleScrollView.pageControlDotSize = CGSizeMake(5, 2); + _cycleScrollView.pageControlStyle = SDCycleScrollViewPageContolStyleClassic; + _cycleScrollView.currentPageDotImage = [UIImage imageNamed:@"room_activity_banner_select"]; + _cycleScrollView.pageDotImage = [UIImage imageNamed:@"room_activity_banner_normal"]; + _cycleScrollView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.00]; + _cycleScrollView.bannerImageViewContentMode = UIViewContentModeScaleAspectFit; + _cycleScrollView.pageControlBottomOffset = -10; + _cycleScrollView.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight; + } + return _cycleScrollView; +} + +- (RoomBoomEntryView *)boomView { + if (!_boomView) { + _boomView = [[RoomBoomEntryView alloc] init]; + _boomView.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(displayBoomInfoProgress)]; + [_boomView addGestureRecognizer:tap]; + } + return _boomView; +} + +- (UIImageView *)joinView { + if (!_joinView) { + _joinView = [[UIImageView alloc] init]; + _joinView.image = [UIImage getLanguageImage:@"room_mode_dating_enter"]; + _joinView.userInteractionEnabled = YES; + _joinView.contentMode = UIViewContentModeScaleAspectFit; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapJoinDatingRecognizer)]; + [_joinView addGestureRecognizer:tap]; + } + return _joinView; +} + +- (NetImageView *)loader_url_1 { + if (!_loader_url_1) { + _loader_url_1 = [[NetImageView alloc] init]; + } + return _loader_url_1; +} + +- (NetImageView *)loader_url_2 { + if (!_loader_url_2) { + _loader_url_2 = [[NetImageView alloc] init]; + } + return _loader_url_2; +} + +@end diff --git a/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m b/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m index 58d13ad9..c7d1383b 100644 --- a/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m +++ b/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m @@ -254,6 +254,8 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; -(void)dealWithData{ self.isLoadActivity = YES; self.pi_cycleScrollView.hidden = NO; + + self.gambleMenuButton.hidden = (self.playList.count == 0 && self.littleGameList.count == 0) ? YES : NO; if (self.hostDelegate.getRoomInfo.type == RoomType_MiniGame) { [self configLittleGameActivity]; diff --git a/YuMi/Modules/YMRoom/View/XPRoomViewController.m b/YuMi/Modules/YMRoom/View/XPRoomViewController.m index 07fe102d..d0306908 100644 --- a/YuMi/Modules/YMRoom/View/XPRoomViewController.m +++ b/YuMi/Modules/YMRoom/View/XPRoomViewController.m @@ -93,6 +93,7 @@ #import "RoomBoomResultView.h" #import "XPSendGiftView.h" +#import "RoomSideMenu.h" UIKIT_EXTERN NSString * const kRoomGiftEffectUpdateNotificationKey; UIKIT_EXTERN NSString * const kRoomMiniNotificationKey; @@ -141,7 +142,8 @@ XPCandyTreeInsufficientBalanceViewDelegate> ///底部操作栏 @property (nonatomic,strong) XPRoomMenuContainerView *menuContainerView; ///活动 -@property (nonatomic,strong) XPRoomActivityContainerView *activityContainerView; +@property(nonatomic, strong) RoomSideMenu *sideMenu; +//@property (nonatomic,strong) XPRoomActivityContainerView *activityContainerView; ///动画的view @property (nonatomic,strong) XPRoomAnimationView *animationView; ///功能view的的容器 @@ -373,7 +375,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [[GiftComboManager sharedManager] setHandleRoomUIChanged:^(BOOL comboViewDisplay) { @kStrongify(self); dispatch_async(dispatch_get_main_queue(), ^{ - self.activityContainerView.hidden = comboViewDisplay; + self.sideMenu.hidden = comboViewDisplay; self.menuContainerView.hidden = comboViewDisplay; }); }]; @@ -536,7 +538,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.view addSubview:self.quickMessageContainerView]; [self.view addSubview:self.menuContainerView]; - [self.view addSubview:self.activityContainerView]; + [self.view addSubview:self.sideMenu]; [self.view addSubview:self.redPacketView]; [self.view addSubview:self.roomHeaderView]; [self.view addSubview:self.functionView]; @@ -589,7 +591,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> make.top.equalTo(self.stageView.mas_bottom); make.bottom.equalTo(self.quickMessageContainerView.mas_top).offset(-5); make.leading.equalTo(self.view); - make.trailing.equalTo(self.activityContainerView.mas_leading).offset(-10); + make.trailing.equalTo(self.sideMenu.mas_leading).offset(-10); }]; CGFloat quickMsgHeight = 30; //记录最后关闭时间 @@ -615,7 +617,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> make.height.mas_equalTo(52 + kSafeAreaBottomHeight); }]; - [self.activityContainerView mas_makeConstraints:^(MASConstraintMaker *make) { + [self.sideMenu mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.messageContainerView); make.trailing.mas_equalTo(self.view); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); @@ -655,13 +657,13 @@ XPCandyTreeInsufficientBalanceViewDelegate> make.top.equalTo(self.stageView.mas_bottom); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5); make.leading.equalTo(self.anchorScrollView.middleImageView); - make.trailing.equalTo(self.activityContainerView.mas_leading).offset(-10); + make.trailing.equalTo(self.sideMenu.mas_leading).offset(-10); }]; [self.quickMessageContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(0); make.bottom.mas_equalTo(self.backContainerView).mas_offset(-5-40-8-kSafeAreaBottomHeight); make.leading.equalTo(self.anchorScrollView.middleImageView); - make.trailing.equalTo(self.activityContainerView.mas_leading).offset(-10); + make.trailing.equalTo(self.sideMenu.mas_leading).offset(-10); }]; [self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView); @@ -672,7 +674,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> } make.height.mas_equalTo(52 + kSafeAreaBottomHeight); }]; - [self.activityContainerView mas_makeConstraints:^(MASConstraintMaker *make) { + [self.sideMenu mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.messageContainerView); make.trailing.mas_equalTo(self.anchorScrollView.middleImageView); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5); @@ -686,11 +688,11 @@ XPCandyTreeInsufficientBalanceViewDelegate> - (void)handleActivityContainerViewEvents { @kWeakify(self); - self.activityContainerView.openRedPacketHandle = ^(XPRedPacketModel * _Nullable redModel,RoomType type,BOOL isChangeRoom) { + self.sideMenu.openRedPacketHandle = ^(XPRedPacketModel * _Nullable redModel,RoomType type,BOOL isChangeRoom) { @kStrongify(self); if(isChangeRoom == YES){ self.redPacketView.type = type; - self.redPacketView.redPacketList = self.activityContainerView.redPacketList; + self.redPacketView.redPacketList = self.sideMenu.redPacketList; return; } @@ -708,7 +710,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.view bringSubviewToFront:view]; }; - self.activityContainerView.showSendGiftView = ^{ + self.sideMenu.showSendGiftView = ^{ @kStrongify(self); NSString * roomUid = [NSString stringWithFormat:@"%ld", [self getRoomInfo].uid]; XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid]; @@ -890,10 +892,10 @@ XPCandyTreeInsufficientBalanceViewDelegate> make.height.mas_equalTo(height); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); make.leading.mas_equalTo(self.view); - make.trailing.mas_equalTo(self.activityContainerView.mas_leading).offset(-10); + make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10); }]; - [self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { + [self.sideMenu mas_remakeConstraints:^(MASConstraintMaker *make) { make.trailing.mas_equalTo(self.view); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); make.width.mas_equalTo(87); @@ -911,10 +913,10 @@ XPCandyTreeInsufficientBalanceViewDelegate> make.top.mas_equalTo(self.stageView.mas_bottom); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); make.leading.mas_equalTo(self.view); - make.trailing.mas_equalTo(self.activityContainerView.mas_leading).offset(-10); + make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10); }]; - [self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { + [self.sideMenu mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.messageContainerView); make.trailing.mas_equalTo(self.view); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).offset(-5); @@ -948,7 +950,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> make.top.mas_equalTo(self.stageView.mas_bottom); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5); make.leading.mas_equalTo(self.anchorScrollView.middleImageView); - make.trailing.mas_equalTo(self.activityContainerView.mas_leading).offset(-10); + make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10); }]; CGFloat quickMsgHeight = 30; @@ -966,7 +968,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> make.bottom.mas_equalTo(self.backContainerView).mas_offset(-5-40-8-kSafeAreaBottomHeight); make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView); }]; - [self.activityContainerView mas_remakeConstraints:^(MASConstraintMaker *make) { + [self.sideMenu mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.messageContainerView); make.trailing.mas_equalTo(self.anchorScrollView.middleImageView); make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5); @@ -979,7 +981,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> return; } _roomInfo = roomInfo; - [self.activityContainerView updateView]; + [self.sideMenu updateView]; } #pragma mark - Game Switch @@ -1175,7 +1177,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> self.roomInfo.datingState = roomInfo.roomModeType == RoomModeType_Open_Blind ? RoomDatingStateChangeType_Open : RoomDatingStateChangeType_Normal; [self changeStageViewOnRoomUpdate]; [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; + [self.sideMenu onRoomEntered]; [self.backContainerView onRoomEntered]; [self.littleGameView onRoomEntered]; @@ -1226,7 +1228,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView removeFromSuperview]; [self.messageContainerView removeFromSuperview]; [self.quickMessageContainerView removeFromSuperview]; - [self.activityContainerView removeFromSuperview]; + [self.sideMenu removeFromSuperview]; [self.roomHeaderView removeFromSuperview]; [self.functionView removeFromSuperview]; @@ -1234,7 +1236,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.anchorScrollView addSubview:self.stageView]; [self.anchorScrollView addSubview:self.messageContainerView]; [self.anchorScrollView addSubview:self.quickMessageContainerView]; - [self.anchorScrollView addSubview:self.activityContainerView]; + [self.anchorScrollView addSubview:self.sideMenu]; [self.anchorScrollView addSubview:self.roomHeaderView]; if (!self.menuContainerView.superview) { [self.view addSubview:self.menuContainerView]; @@ -1246,7 +1248,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self changeStageViewOnAnchorRoom]; [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; + [self.sideMenu onRoomEntered]; [self.backContainerView onRoomEntered]; @@ -1329,7 +1331,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self changeStageViewOnRoomUpdate]; [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; + [self.sideMenu onRoomEntered]; [self.backContainerView onRoomEntered]; @@ -1461,7 +1463,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self changeStageViewOnRoomUpdate]; [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; + [self.sideMenu onRoomEntered]; [self.backContainerView onRoomEntered]; [self.littleGameView onRoomEntered]; @@ -1541,7 +1543,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView removeFromSuperview]; [self.messageContainerView removeFromSuperview]; [self.quickMessageContainerView removeFromSuperview]; - [self.activityContainerView removeFromSuperview]; + [self.sideMenu removeFromSuperview]; [self.roomHeaderView removeFromSuperview]; [self.functionView removeFromSuperview]; self.functionView = nil; @@ -1582,7 +1584,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView removeFromSuperview]; [self.messageContainerView removeFromSuperview]; [self.quickMessageContainerView removeFromSuperview]; - [self.activityContainerView removeFromSuperview]; + [self.sideMenu removeFromSuperview]; [self.roomHeaderView removeFromSuperview]; [self.functionView removeFromSuperview]; self.functionView = nil; @@ -1630,7 +1632,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.anchorScrollView addSubview:self.stageView]; [self.anchorScrollView addSubview:self.messageContainerView]; [self.anchorScrollView addSubview:self.quickMessageContainerView]; - [self.anchorScrollView addSubview:self.activityContainerView]; + [self.anchorScrollView addSubview:self.sideMenu]; [self.anchorScrollView addSubview:self.roomHeaderView]; [self.anchorScrollView addSubview:self.menuContainerView]; [self.anchorScrollView addSubview:self.functionView]; @@ -1640,7 +1642,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self changeStageViewOnAnchorRoom]; [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; + [self.sideMenu onRoomEntered]; [self.backContainerView onRoomEntered]; @@ -1703,7 +1705,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> - (void)getRedPacketSuccess:(NSArray *)list { if(list.count > 0){ - self.activityContainerView.redPacketList = [NSMutableArray arrayWithArray:list]; + self.sideMenu.redPacketList = [NSMutableArray arrayWithArray:list]; } } @@ -1759,7 +1761,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView removeFromSuperview]; [self.messageContainerView removeFromSuperview]; [self.quickMessageContainerView removeFromSuperview]; - [self.activityContainerView removeFromSuperview]; + [self.sideMenu removeFromSuperview]; [self.roomHeaderView removeFromSuperview]; [self.functionView removeFromSuperview]; [self.menuContainerView removeFromSuperview]; @@ -1859,7 +1861,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.view addSubview:self.messageContainerView]; [self.view addSubview:self.quickMessageContainerView]; [self.view addSubview:self.menuContainerView]; - [self.view addSubview:self.activityContainerView]; + [self.view addSubview:self.sideMenu]; [self.view addSubview:self.roomHeaderView]; [self.view bringSubviewToFront:self.menuContainerView]; [self.view addSubview:self.functionView]; @@ -1870,7 +1872,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView onRoomUpdate]; [self.menuContainerView onRoomUpdate]; [self.functionView onRoomUpdate]; - [self.activityContainerView onRoomUpdate]; + [self.sideMenu onRoomUpdate]; [self.messageContainerView onRoomUpdate]; [self.littleGameView onRoomUpdate]; } else { @@ -1895,7 +1897,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView onRoomUpdate]; [self.menuContainerView onRoomUpdate]; [self.functionView onRoomUpdate]; - [self.activityContainerView onRoomUpdate]; + [self.sideMenu onRoomUpdate]; [self.messageContainerView onRoomUpdate]; [self.littleGameView onRoomUpdate]; @@ -1916,7 +1918,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> ///如果是自己的话 如果有坐骑的话 [self userEnterRoomSuccess]; ///在活动页面 判断是否显示 相亲加入的按钮 所以需要等用户进房成功之后才能获取 房间角色 - [self.activityContainerView onRoomUpdate]; + [self.sideMenu onRoomUpdate]; [self.menuContainerView onRoomUpdate]; } @@ -1947,7 +1949,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView handleNIMNotificationMessage:message]; [self.animationView handleNIMNotificationMessage:message]; [self.messageContainerView handleNIMNotificationMessage:message]; - [self.activityContainerView handleNIMNotificationMessage:message]; + [self.sideMenu handleNIMNotificationMessage:message]; [self.menuContainerView handleNIMNotificationMessage:message]; [self.functionView handleNIMNotificationMessage:message]; [self.littleGameView handleNIMNotificationMessage:message]; @@ -1963,14 +1965,14 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.stageView handleNIMCustomMessage:message]; [self.animationView handleNIMCustomMessage:message]; [self.menuContainerView handleNIMCustomMessage:message]; - [self.activityContainerView handleNIMCustomMessage:message]; + [self.sideMenu handleNIMCustomMessage:message]; [self.functionView handleNIMCustomMessage:message]; [self.littleGameView handleNIMCustomMessage:message]; if (attachment.first == CustomMessageType_First_Recharge_Reward && attachment.second == Custom_Message_Sub_Room_First_Recharge_Reward) { self.userInfo.isFirstCharge = NO; [self.menuContainerView onRoomUpdate]; - [self.activityContainerView onRoomUpdate]; + [self.sideMenu onRoomUpdate]; } else if (attachment.first == CustomMessageType_Update_RoomInfo && attachment.second == Custom_Message_Sub_Update_RoomInfo_MessageState) { ///兼容安卓和iOS 协议不同的问题 NSDictionary * dic= attachment.data[@"roomInfo"]; @@ -2027,18 +2029,18 @@ XPCandyTreeInsufficientBalanceViewDelegate> } [self.view addSubview:view]; [self.view bringSubviewToFront:view]; - if(self.activityContainerView.redPacketList == nil){ - self.activityContainerView.redPacketList = [NSMutableArray array]; + if(self.sideMenu.redPacketList == nil){ + self.sideMenu.redPacketList = [NSMutableArray array]; } - NSMutableArray *redPacketList = [NSMutableArray arrayWithArray:self.activityContainerView.redPacketList]; + NSMutableArray *redPacketList = [NSMutableArray arrayWithArray:self.sideMenu.redPacketList]; [redPacketList insertObject:data atIndex:0]; - self.activityContainerView.redPacketList = redPacketList; + self.sideMenu.redPacketList = redPacketList; }else if(attachment.second == Custom_Message_Sub_NewRoomDiamandRedPacket){ XPRedPacketModel *curData = [XPRedPacketModel modelWithJSON:attachment.data]; - if(self.activityContainerView.redPacketList == nil){ - self.activityContainerView.redPacketList = [NSMutableArray array]; + if(self.sideMenu.redPacketList == nil){ + self.sideMenu.redPacketList = [NSMutableArray array]; } - NSMutableArray *redPacketList = [NSMutableArray arrayWithArray:self.activityContainerView.redPacketList]; + NSMutableArray *redPacketList = [NSMutableArray arrayWithArray:self.sideMenu.redPacketList]; [redPacketList insertObject:curData atIndex:0]; if(self.roomInfo.uid > 0 && curData.redEnvelopeNum.integerValue != redPacketList.count){ [self.presenter getRedPacket:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; @@ -2059,7 +2061,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.view addSubview:view]; [self.view bringSubviewToFront:view]; } - self.activityContainerView.redPacketList = redPacketList; + self.sideMenu.redPacketList = redPacketList; } }else if(attachment.first == CustomMessageType_Free_Gift_Star_Reset_Time){ @@ -2260,11 +2262,11 @@ XPCandyTreeInsufficientBalanceViewDelegate> } -(NSMutableArray *)getPlayList{ - return self.activityContainerView.playList; + return self.sideMenu.playList; } -(NSMutableArray *)getLittleGameList { - return self.activityContainerView.littleGameList; + return self.sideMenu.littleGameList; } - (void)exitRoom { @@ -2498,7 +2500,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> - (void)getRoomBoomInfoSuccess:(NSArray *)models { [[RoomBoomManager sharedManager] updateBoomDetailArray:models]; - [self.activityContainerView updateForBoomDetailArray:models]; + [self.sideMenu updateForBoomDetailArray:models]; } - (void)getRoomBoomExplosionSuccess:(BoomInfoModel *)model { @@ -2563,7 +2565,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self.anchorScrollView addSubview:self.stageView]; [self.anchorScrollView addSubview:self.messageContainerView]; [self.anchorScrollView addSubview:self.quickMessageContainerView]; - [self.anchorScrollView addSubview:self.activityContainerView]; + [self.anchorScrollView addSubview:self.sideMenu]; [self.anchorScrollView addSubview:self.roomHeaderView]; if (!self.menuContainerView.superview) { [self.view addSubview:self.menuContainerView]; @@ -2576,7 +2578,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [self changeStageViewOnAnchorRoom]; [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; + [self.sideMenu onRoomEntered]; [self.backContainerView onRoomEntered]; @@ -2600,7 +2602,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> [[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO]; } else { [self.roomHeaderView onRoomEntered]; - [self.activityContainerView onRoomEntered]; + [self.sideMenu onRoomEntered]; [self.menuContainerView onRoomEntered]; [self changeStageViewOnRoomUpdate]; @@ -2714,12 +2716,11 @@ XPCandyTreeInsufficientBalanceViewDelegate> return _menuContainerView; } -- (XPRoomActivityContainerView *)activityContainerView { - if (!_activityContainerView) { - _activityContainerView = [[XPRoomActivityContainerView alloc] initWithDelegate:self]; - +- (RoomSideMenu *)sideMenu { + if (!_sideMenu) { + _sideMenu = [[RoomSideMenu alloc] initWithDelegate:self]; } - return _activityContainerView; + return _sideMenu; } - (XPRoomAnimationView *)animationView {