From 6e1b8fab1a7e46b10099fe4b9e6d684f9556b22d Mon Sep 17 00:00:00 2001 From: eggmanQQQ <3671373519@qq.com> Date: Fri, 31 May 2024 18:52:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90=20#64=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=201.=20=E7=A7=BB=E9=99=A4=E6=97=A7=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E5=85=A5=E5=8F=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=85=A5=E5=8F=A3=202.=20GameMenuView=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=8C=E6=97=B6=E6=94=AF=E6=8C=81=E7=8E=A9?= =?UTF-8?q?=E6=B3=95=E5=92=8C=E5=B0=8F=E6=B8=B8=E6=88=8F=203.=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=88=BF=E9=97=B4=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD=204.=20=E8=A1=A5=E5=85=85=E6=8F=90=E7=A4=BA=E6=96=87?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E9=83=A8=E4=BB=BD=E6=9C=AA=E4=BD=9C=E5=A4=9A?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=8C=96=EF=BC=8C=E9=9C=80=E8=A6=81=E6=A0=B8?= =?UTF-8?q?=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化: 1. 修正部分不正确的单词 2. 优化部份 API 的调用时机 --- .../Contents.json | 22 ++ .../ms_room_game_button@2x.png | Bin 0 -> 8184 bytes .../ms_room_game_button@3x.png | Bin 0 -> 16995 bytes .../Contents.json | 22 ++ .../ms_room_game_switch_button@2x.png | Bin 0 -> 1067 bytes .../ms_room_game_switch_button@3x.png | Bin 0 -> 1749 bytes .../YMRoom/Presenter/XPRoomPresenter.m | 1 - .../XPRoomActivityContainerView.h | 7 +- .../XPRoomActivityContainerView.m | 221 ++++++++---------- .../XPRoomFunctionContainerView.h | 2 +- .../XPRoomFunctionContainerView.m | 3 +- .../View/XPLittleGameRoomListView.m | 34 --- .../MenuContainerView/MSRoomMenuGameCell.h | 2 + .../MenuContainerView/MSRoomMenuGameCell.m | 13 +- .../View/MenuContainerView/MSRoomMenuGameVC.h | 9 +- .../View/MenuContainerView/MSRoomMenuGameVC.m | 143 ++++++++++-- .../MenuContainerView/MSRoomMenuGameView.h | 3 + .../MenuContainerView/MSRoomMenuGameView.m | 70 ++++-- .../XPRoomMenuContainerView.m | 4 +- YuMi/Modules/YMRoom/View/RoomHostDelegate.h | 9 +- .../View/SendGiftView/View/XPGiftInfoView.m | 2 +- .../SendRedPacket/PIRoomEnterRedPacketView.h | 2 +- .../SendRedPacket/PIRoomEnterRedPacketView.m | 8 +- .../YMRoom/View/StageView/AnchorPKStageView.m | 2 +- .../YMRoom/View/StageView/AnchorStageView.m | 2 +- .../YMRoom/View/StageView/DatingStageView.m | 2 +- .../StageView/LittleGameScrollStageView.m | 120 +++++----- .../View/StageView/LittleGameStageView.m | 2 +- .../YMRoom/View/StageView/SocialStageView.m | 2 +- .../Modules/YMRoom/View/StageView/StageView.h | 2 +- .../Modules/YMRoom/View/StageView/StageView.m | 18 +- .../YMRoom/View/XPRoomViewController.m | 180 ++++++++++---- YuMi/ar.lproj/Localizable.strings | 2 + YuMi/en.lproj/Localizable.strings | 2 + YuMi/zh-Hans.lproj/Localizable.strings | 2 + YuMi/zh-Hant.lproj/Localizable.strings | 2 + 36 files changed, 593 insertions(+), 322 deletions(-) create mode 100644 YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/Contents.json create mode 100644 YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/ms_room_game_button@2x.png create mode 100644 YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/ms_room_game_button@3x.png create mode 100644 YuMi/Assets.xcassets/chat/ms_room_game_switch_button.imageset/Contents.json create mode 100644 YuMi/Assets.xcassets/chat/ms_room_game_switch_button.imageset/ms_room_game_switch_button@2x.png create mode 100644 YuMi/Assets.xcassets/chat/ms_room_game_switch_button.imageset/ms_room_game_switch_button@3x.png diff --git a/YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/Contents.json b/YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/Contents.json new file mode 100644 index 00000000..1df64416 --- /dev/null +++ b/YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ms_room_game_button@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ms_room_game_button@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/ms_room_game_button@2x.png b/YuMi/Assets.xcassets/chat/ms_room_game_button.imageset/ms_room_game_button@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db614274048e081073effd90981895b33ae461bf GIT binary patch literal 8184 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 literal 0 HcmV?d00001 diff --git a/YuMi/Assets.xcassets/chat/ms_room_game_switch_button.imageset/ms_room_game_switch_button@3x.png b/YuMi/Assets.xcassets/chat/ms_room_game_switch_button.imageset/ms_room_game_switch_button@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4014a73f09caddadae986011b2c40c025818b6 GIT binary patch literal 1749 zcmV;`1}gc9P)j{00001b5ch_0Itp) z=>Px*k4Z#9RA@uxn`w+*Qy9m84`Sa!C?cXI6|GV#Iy9vAr9>jihejJs?KB!hw4|{X zX&MrZ`kB=cq7bDs13 z&pq4oKmTKtWbVE_uoJKwFa?+l90H62_5t+!KfqSNufR9)-^ajPz?;BkV2hdkUPhQ! zv{QFK0yqIU5ts;!&e6taz=yyZpxewg)*gnz-z!w zX4X@L<6Pj~eLLWA;CA5jA_7Y3x^6q{#umCt0$kmA%gBR$>fjiCY z(=0wR1?}$hqlM@OVD~JI7F=f&aJ`wW4D}lX-raWu9sw>0ZKwm~muMuK*>7pvN)6uK zj|5f#hXFoBL%kiYSAdJmthZf3{hkWEyN?52ugEZOhwDr2IA*3ZLQ884-rWz4hIt`d zOS@nS{QdiAl#Vg8pIiBC3EthcXRiZxE-ELtih(>-Cal1_kn{u6>SOa zyaY^Zwg|QYuOsEjB?Q!ImrJ7Ie_f+S8-jOtZ5#7C9c2maCA-orGt*8rzy^VLcO@jx z#u-@&@eGN}Z-HaY?5o<=2Y`>y>N+={GbACF+vrl@8Z*;q=(Bq8Cjo17#-M#x`S;i; z`Pe3>uOh4e0gN*<#n%wL2nCT1S?%VCs8|Ll1=Wf0IbesZ&Pu4a%FL9A4FvD*7X!;P zHmISb?CO@<`tE)e@IXeNWmOw%W;z4>KkVK8lbB`-ZS+rIu9+=!cdMOKaU!%O)M3fx z`@eqQoX@esi-VhOW{)-s*xk>LcaDfzA}wEz){p~$%rsMqU^MbXrG=VC z>KuXB>aNW{?W(LTW4f8GYSyB=?;WSV>ZCGF3+*0J2WywPFl~wsd;m-pcoB~;1VlLB z%oYWd??_R1*ZD-}lr*L(J6hmHH;af&Wm?Wt73^@K42$bDf!BOLBOumMW+u|GQs(Zn zfrkTvS|IS+@I!KT4KGa#rSCzPqtU0Qd%zzpRy(A?E(uk*y1 z0N^UxE%5zWPGIHXUc6@{gYO;5;5Q4r=8f*iN1FX8@H&NwsU2yyQQ*G@_76nh)0_6`#Gy`o%LDyOuJi_Y}-0BTIRec8v`U4czz_CqsZ?tVo~l&0OXmCtku zywn!Y0H+1?nu@9uL|&$CFwlLU0AgF<-AI>rmYM0+rQZ?;$=&Bh#L0buAK^)0X2Ri# za=tAzx(<|=AhFBL8ZttW(DCj_z<6U|9QtTto0lfwyMPyC{am20Qj6<`rJ?Z9-340U zLrv3XvYCC+KVRKlO2-MIp2{rWj5Tt1F;8Nkve+6kJ5?2H!JiN4lCnxBqV(yyx&C0J z(Y-uJkQ2>J1m>WNO0l@&+pA&{B#SlD+!twat0?mv!L2p3Q{~QgV)v~N#}Vv8mVekolCAXvwrTekupPHe{}|4ud1LGm+t4L zB)78-zkKq~jQeL5!6%xWIc7G9)^4T7(k)IWW#nab-u-5FZ6oLHba*;iN?tNtO+X6c^6D_1|4LrOJv0>|x6R0gsrFV2oV2$sZ;9K2k4J!1*KfoxrK&y!^u;H& z6CDrQ=Ubt2cM*hAF{&e~s<#)tHnUK@ea#jqid!!&rdROu-y40Dg{8c-s0AC{?=6hA zxq2`-)F$3;o+L7%fux%Ajhx2ZpHj=AlB$YD(xak9%FRQ82hI5=9iU80FDNBbNh=A- z5@&rK -@property(nonatomic,strong) NSMutableArray *redPacketList; @property(nonatomic,copy)OpenRedPacketHandle openRedPacketHandle; +@property(nonatomic,strong) NSMutableArray *redPacketList; @property(nonatomic,strong) NSMutableArray *playList; -- (instancetype)initWithdelegate:(id)delegate; +@property(nonatomic,strong) NSMutableArray *littleGameList; +- (instancetype)initWithDelegate:(id)delegate; +- (void)updateView; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m b/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m index 843632ef..6f61123b 100644 --- a/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m +++ b/YuMi/Modules/YMRoom/View/ActivityContainerView/XPRoomActivityContainerView.m @@ -14,6 +14,7 @@ #import "AccountInfoStorage.h" #import "Api+Room.h" #import "Api+TreasureFairy.h" +#import "Api+LittleGame.h" #import "ClientConfig.h" #import "NetImageView.h" #import "TTPopup.h" @@ -26,6 +27,7 @@ #import "FirstRechargeModel.h" #import "TreasureFairyLimitModel.h" #import "XPRedPacketResultModel.h" + ///View #import "XPRoomHalfWebView.h" #import "XPCandyTreeViewController.h" @@ -41,6 +43,8 @@ #import "PIRoomActivityWebView.h" #import "PIRoomActivityClickView.h" #import "PIRoomActivityChoosePlayView.h" +#import "MSRoomMenuGameVC.h" + UIKIT_EXTERN NSString *kShowFirstRechargeView; @interface XPRoomActivityContainerView () ///容器 @@ -50,8 +54,9 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; ///红包 @property(nonatomic,strong) PIRoomEnterRedPacketView *redPacketView; -///玩法 -@property(nonatomic,strong) PIRoomActivityClickView *clickPlayView; + +///游戏菜单按钮 +@property(nonatomic, strong) UIButton *gameMenuButton; ///参加相亲 @property (nonatomic,strong) UIImageView *joinDatingView; @@ -68,18 +73,24 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; -(void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self]; } -- (instancetype)initWithdelegate:(id)delegate { +- (instancetype)initWithDelegate:(id)delegate { self = [super init]; if (self) { self.hostDelegate = delegate; [self initSubViews]; [self initSubViewConstraints]; - [self requestActivityList]; - } return self; } +- (void)updateView { + if (self.isLoadActivity) { + [self configLittleGameActivity]; + } else { + [self requestActivityList]; + } +} + #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.stackView]; @@ -88,9 +99,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; [self.stackView addArrangedSubview:emptyView]; [self.stackView addArrangedSubview:self.redPacketView]; [self.stackView addArrangedSubview:self.joinDatingView]; - [self.stackView addArrangedSubview:self.clickPlayView]; - - + [self.stackView addArrangedSubview:self.gameMenuButton]; } - (void)initSubViewConstraints { @@ -102,68 +111,76 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; [self.pi_cycleScrollView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(itemWidth , itemWidth)); }]; + [self.redPacketView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(kGetScaleWidth(58)); }]; - - [self.clickPlayView mas_makeConstraints:^(MASConstraintMaker *make) { + [self.gameMenuButton mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.mas_equalTo(0); - make.size.mas_equalTo(CGSizeMake(81, 66)); + make.size.mas_equalTo(CGSizeMake(76, 76)); }]; - + [self.joinDatingView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(35 * kScreenHeightScale); }]; - } - (void)requestActivityList { - - - RACSubject* list = [RACSubject subject]; - RACSubject* play = [RACSubject subject]; - [[RACSignal combineLatest:@[list, play] reduce:^id(NSArray * listModel, NSArray * playModel){ - self.activityList = [NSMutableArray arrayWithArray:listModel]; - self.playList = [NSMutableArray arrayWithArray:playModel]; - [self dealWithData]; + @kWeakify(self); + RACSubject* playRAC = [RACSubject subject]; + RACSubject* littleGameRAC = [RACSubject subject]; + [[RACSignal combineLatest:@[playRAC, littleGameRAC] + reduce:^id(NSArray *playModels, NSArray *littleGameModels){ + @kStrongify(self); + self.playList = [NSMutableArray arrayWithArray:playModels]; + self.littleGameList = [NSMutableArray arrayWithArray:littleGameModels]; return nil; - }] subscribeError:^(NSError * _Nullable error) { - - }]; - NSString * roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]; - [Api roomActivityList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { - if (code == 200) { - NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; - [list sendNext:array]; - [list sendCompleted]; - return; - } - [list sendError:nil]; - } roomId:roomId]; - - + }] subscribeError:^(NSError * _Nullable error) {}]; + + NSString * roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]; + [Api roomActivityList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + @kStrongify(self); + if (code == 200) { + NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; + self.activityList = [NSMutableArray arrayWithArray:array]; + [self dealWithData]; + } + } roomId:roomId]; + [Api getPlayList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; - [play sendNext:array]; - [play sendCompleted]; - return; + [playRAC sendNext:array]; + [playRAC sendCompleted]; + } else { + [playRAC sendError:nil]; } - [play sendError:nil]; } roomId:roomId]; - - - + [Api getLittleGameList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + if (code == 200) { + NSArray * array = [LittleGameInfoModel modelsWithArray:data.data]; + [littleGameRAC sendNext:array]; + [littleGameRAC sendCompleted]; + } else { + [littleGameRAC sendError:nil]; + } + }]; } -(void)dealWithData{ self.isLoadActivity = YES; self.pi_cycleScrollView.hidden = NO; + + if (self.hostDelegate.getRoomInfo.type == RoomType_Anchor) { + [self.gameMenuButton removeFromSuperview]; + } else { + self.gameMenuButton.hidden = NO; + } + if (self.hostDelegate.getRoomInfo.type == RoomType_MiniGame) { [self configLittleGameActivity]; } else { - NSMutableArray *picArray = [NSMutableArray array]; for (ActivityInfoModel *model in self.activityList) { [picArray addObject:model.icon]; @@ -175,25 +192,10 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } else { [self.pi_cycleScrollView setAutoScroll:NO]; } - - if(self.playList.count > 0){ - ActivityInfoModel *playModel = self.playList.firstObject; - self.clickPlayView.model = playModel; -// if(self.isShowChoosePlayView == NO){ -// self.clickPlayView.hidden = NO; -// } - }else{ - self.clickPlayView.hidden = YES; - } } } - - - - (void)configLittleGameActivity { - - NSMutableArray *list = [NSMutableArray array]; [list addObjectsFromArray:self.activityList]; @@ -232,8 +234,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; }]; } self.redPacketView.hidden = YES; - self.clickPlayView.hidden = YES; - + if (self.isLoadActivity) { [self configLittleGameActivity]; } else { @@ -252,16 +253,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } else { [self.pi_cycleScrollView setAutoScroll:NO]; } - - if(self.playList.count > 0){ - ActivityInfoModel *playModel = self.playList.firstObject; - self.clickPlayView.model = playModel; -// if(self.isShowChoosePlayView == NO){ -// self.clickPlayView.hidden = NO; -// } - }else{ - self.clickPlayView.hidden = YES; - } + 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.joinDatingView.image = [UIImage getLanguageImage:@"room_pk_normal_member_enter"]; @@ -284,9 +276,6 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } else { self.joinDatingView.hidden = YES; } - - - } if(self.openRedPacketHandle){ @@ -375,7 +364,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; fairyVC.roomUid =[NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; fairyVC.view.frame = CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight); [[XCCurrentVCStackManager shareManager].getCurrentVC addChildViewController:fairyVC]; - [fairyVC.navigationController setNavigationBarHidden:YES animated:NO]; +// [fairyVC.navigationController setNavigationBarHidden:YES animated:NO]; [[XCCurrentVCStackManager shareManager].getCurrentVC.view addSubview:fairyVC.view]; [UIView animateWithDuration:0.2 animations:^{ @@ -409,12 +398,10 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } -(void)jumpPlayActionWithIndex:(NSInteger)index imageUrlList:(NSArray *)imageUrlList{ - if (imageUrlList.count > index) { NSString *pic = imageUrlList[index]; NSMutableArray *inftList = [NSMutableArray array]; NSMutableArray *modelList = [NSMutableArray array]; - [modelList addObjectsFromArray:self.playList]; [modelList addObjectsFromArray:self.activityList]; ActivityInfoModel * info; for (int i = 0 ; i < modelList.count; i++) { @@ -422,7 +409,7 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; if([getInfo.icon isEqualToString:pic]){ info = getInfo; } - if(getInfo.skipType == 3 && i > self.playList.count){ + if(getInfo.skipType == 3){ [inftList addObject:getInfo]; } } @@ -449,25 +436,22 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; }]; }else { - - if(index < self.playList.count){ - - if(info.showType == ActivityShowType_Half){ - XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init]; - webView.isPlayView = YES; - webView.roomUid = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; - webView.url = info.skipContent; - [TTPopup popupView:webView style:TTPopupStyleActionSheet]; - return; - } - XPWebViewController * webVC = [[XPWebViewController alloc] init]; - webVC.roomUid = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; - webVC.url = info.skipContent; - [self.hostDelegate.getCurrentNav pushViewController:webVC animated:YES]; - return; - } - - +// if(index < self.playList.count){ +// if(info.showType == ActivityShowType_Half){ +// XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init]; +// webView.isPlayView = YES; +// webView.roomUid = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; +// webView.url = info.skipContent; +// [TTPopup popupView:webView style:TTPopupStyleActionSheet]; +// return; +// } +// XPWebViewController * webVC = [[XPWebViewController alloc] init]; +// webVC.roomUid = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; +// webVC.url = info.skipContent; +// [self.hostDelegate.getCurrentNav pushViewController:webVC animated:YES]; +// return; +// } + if (info.skipType == ActivitySkipType_Room) { [self.hostDelegate exitRoom]; @@ -504,7 +488,6 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; }completion:^(BOOL finished) { }]; - } - (void)firstRechargeTapRecognizer { @@ -544,20 +527,25 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; XPSailingViewController * sailingVC = [[XPSailingViewController alloc] initWithRoomUid:roomUid]; [self.hostDelegate.getCurrentNav presentViewController:sailingVC animated:YES completion:nil]; } + +- (void)didTapGameMenuButton { + MSRoomMenuGameVC *vc = [[MSRoomMenuGameVC alloc] initWithDelegate:self.hostDelegate roomMenuType:MSRoomMenuTypeLittleGame]; + vc.modalPresentationStyle = UIModalPresentationOverFullScreen; + [self.hostDelegate.getCurrentNav presentViewController:vc animated:YES completion:nil]; +} + #pragma mark- PIRoomEnterRedPacketViewDelegate --(void)openRedPacketWtihModel:(XPRedPacketModel *)redModel{ +-(void)openRedPacketWithModel:(XPRedPacketModel *)redModel{ if(self.openRedPacketHandle){ self.openRedPacketHandle(redModel,self.hostDelegate.getRoomInfo.type,NO); } } #pragma mark - PIRoomActivityClickViewDelegate - (void)showChoosePlayViewAction{ - self.clickPlayView.hidden = YES; - self.isShowChoosePlayView = YES; +// self.isShowChoosePlayView = YES; PIRoomActivityChoosePlayView *choosePlayView = [[PIRoomActivityChoosePlayView alloc]initWithFrame:CGRectZero]; choosePlayView.delegate = self; - choosePlayView.playList = self.playList; CGFloat y = self.frame.size.height + self.frame.origin.y - 124; choosePlayView.tag = 98021; [self.hostDelegate.getSuperView addSubview:choosePlayView]; @@ -612,7 +600,6 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; [UIView animateWithDuration:0.1 animations:^{ view.frame = isMSRTL() ? CGRectMake(-201, y, 201, 124) : CGRectMake(KScreenWidth, y, 201, 124); }completion:^(BOOL finished) { -// self.clickPlayView.hidden = NO; [view removeFromSuperview]; }]; } @@ -637,14 +624,10 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; for (UIView *subView in _pi_cycleScrollView.subviews) { subView.semanticContentAttribute = UISemanticContentAttributeForceLeftToRight; } - } return _pi_cycleScrollView; } - - - - (UIStackView *)stackView { if (!_stackView) { _stackView = [[UIStackView alloc] init]; @@ -652,14 +635,10 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; _stackView.distribution = UIStackViewDistributionFill; _stackView.alignment = UIStackViewAlignmentCenter; _stackView.spacing = 0; - } return _stackView; } - - - - (UIImageView *)joinDatingView { if (!_joinDatingView) { _joinDatingView = [[UIImageView alloc] init]; @@ -680,10 +659,6 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; return _activityList; } - - - - - (PIRoomEnterRedPacketView *)redPacketView{ if(!_redPacketView){ _redPacketView = [[PIRoomEnterRedPacketView alloc]initWithFrame:CGRectZero]; @@ -692,13 +667,17 @@ UIKIT_EXTERN NSString *kShowFirstRechargeView; } return _redPacketView; } -- (PIRoomActivityClickView *)clickPlayView{ - if(!_clickPlayView){ - _clickPlayView = [[PIRoomActivityClickView alloc]initWithFrame:CGRectZero]; - _clickPlayView.hidden = YES; - _clickPlayView.delegate = self; + +- (UIButton *)gameMenuButton { + if (!_gameMenuButton) { + UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; + [b setImage:[UIImage imageNamed:@"ms_room_game_button"] forState:UIControlStateNormal]; + [b addTarget:self action:@selector(didTapGameMenuButton) forControlEvents:UIControlEventTouchUpInside]; + b.hidden = YES; + _gameMenuButton = b; } - return _clickPlayView; + return _gameMenuButton; } @end + diff --git a/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.h b/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.h index 85c070ad..2c892c8c 100644 --- a/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.h +++ b/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.h @@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN @interface XPRoomFunctionContainerView : UIView ///是否第一次更新在线人数 @property(nonatomic,assign) BOOL isFirstUpdate; -- (instancetype)initWithdelegate:(id)delegate; +- (instancetype)initWithDelegate:(id)delegate; - (void)hiddenSudGamePostionView; ///获取当前的音乐 - (Music *)getCurrentMusic; diff --git a/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.m b/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.m index 70ee766b..d2e7ab5e 100644 --- a/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.m +++ b/YuMi/Modules/YMRoom/View/BaseUIContainerView/XPRoomFunctionContainerView.m @@ -176,7 +176,7 @@ [[NSNotificationCenter defaultCenter] removeObserver:self]; } -- (instancetype)initWithdelegate:(id)delegate { +- (instancetype)initWithDelegate:(id)delegate { self = [super init]; if (self) { self.delegate = delegate; @@ -1857,6 +1857,7 @@ } return _gameListView; } + - (XPAnchorPkPanelView *)anchorPKPanelView { if (!_anchorPKPanelView) { _anchorPKPanelView = [[XPAnchorPkPanelView alloc] init]; diff --git a/YuMi/Modules/YMRoom/View/LittleGame/View/XPLittleGameRoomListView.m b/YuMi/Modules/YMRoom/View/LittleGame/View/XPLittleGameRoomListView.m index 1d754a4a..bbbd7b11 100644 --- a/YuMi/Modules/YMRoom/View/LittleGame/View/XPLittleGameRoomListView.m +++ b/YuMi/Modules/YMRoom/View/LittleGame/View/XPLittleGameRoomListView.m @@ -17,8 +17,6 @@ @interface XPLittleGameRoomListView () ///容器 @property (nonatomic,strong) UIStackView *stackView; -///当前游戏的类型 -@property (nonatomic,strong) UIButton *gamePlayButton; ///列表 @property (nonatomic,strong) UITableView *tableView; ///原始数据源 @@ -37,7 +35,6 @@ if (self) { [self initSubViews]; [self initSubViewConstraints]; - } return self; } @@ -50,7 +47,6 @@ self.layer.borderColor = UIColorRGBAlpha(0xffffff, 0.6).CGColor; self.backgroundColor = UIColorRGBAlpha(0x000000, 0.2); [self addSubview:self.stackView]; - [self.stackView addArrangedSubview:self.gamePlayButton]; [self.stackView addArrangedSubview:self.tableView]; } @@ -64,10 +60,6 @@ make.leading.trailing.top.mas_equalTo(self); }]; - [self.gamePlayButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(25); - }]; - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(25); }]; @@ -111,7 +103,6 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (self.datasource.count > 0) { self.tableView.hidden = YES; - self.gamePlayButton.selected = NO; LittleGameInfoModel *info = [self.datasource safeObjectAtIndex1:indexPath.row]; if (info.mgId.integerValue != self.mgId.integerValue) { if (self.delegate && [self.delegate respondsToSelector:@selector(xPRoomLittleGameListView:didSelectItem:)]) { @@ -121,19 +112,11 @@ } } -#pragma mark - Event Response -- (void)gamePlayButtonAction:(UIButton *)sender { - if (self.delegate && [self.delegate respondsToSelector:@selector(xPRoomLittleGameListView:didSelectChooseType:)]) { - [self.delegate xPRoomLittleGameListView:self didSelectChooseType:sender]; - } -} - #pragma mark - Getters And Setters - (void)setMgId:(NSString *)mgId { _mgId = mgId; if (self.gameList.count > 0) { self.datasource = [self handleGameListData:self.gameList]; - [self.gamePlayButton setTitle:self.gameInfo.name forState:UIControlStateNormal]; } else { [Api getLittleGameList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { @@ -146,7 +129,6 @@ [dataArray addObject:gameInfo]; self.gameList = [dataArray copy]; self.datasource = [self handleGameListData:self.gameList]; - [self.gamePlayButton setTitle:self.gameInfo.name forState:UIControlStateNormal]; } }]; } @@ -188,20 +170,4 @@ return _tableView; } -- (UIButton *)gamePlayButton { - if (!_gamePlayButton) { - _gamePlayButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_gamePlayButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [_gamePlayButton setImage:[UIImage imageNamed:@"room_info_little_game_down_arrow"] forState:UIControlStateNormal]; - [_gamePlayButton setImage:[UIImage imageNamed:@"room_info_little_game_up_arrow"] forState:UIControlStateSelected]; - _gamePlayButton.titleLabel.font = [UIFont systemFontOfSize:12]; - [_gamePlayButton setTitle:YMLocalizedString(@"XPLittleGameRoomListView1") forState:UIControlStateNormal]; - _gamePlayButton.selected = NO; - [_gamePlayButton addTarget:self action:@selector(gamePlayButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - _gamePlayButton.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft; - _gamePlayButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 0); - } - return _gamePlayButton; -} - @end diff --git a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.h b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.h index 3c55ad17..046bc60d 100644 --- a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.h +++ b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.h @@ -7,10 +7,12 @@ #import #import "ActivityInfoModel.h" +#import "LittleGameInfoModel.h" NS_ASSUME_NONNULL_BEGIN @interface MSRoomMenuGameCell : UICollectionViewCell @property(nonatomic,strong) ActivityInfoModel *model; +@property(nonatomic,strong) LittleGameInfoModel *littleGameModel; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.m b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.m index 498108e2..e67b3422 100644 --- a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.m +++ b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameCell.m @@ -35,6 +35,7 @@ make.leading.trailing.equalTo(self.contentView).inset(kGetScaleWidth(5)); }]; } + - (void)setModel:(ActivityInfoModel *)model{ _model = model; _gameView.image = nil; @@ -42,9 +43,17 @@ self.gameView.image = image; }]; _textView.text = _model.name; - - } + +- (void)setLittleGameModel:(LittleGameInfoModel *)littleGameModel{ + _littleGameModel = littleGameModel; + _gameView.image = nil; + [_gameView loadImageWithUrl:littleGameModel.pic completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) { + self.gameView.image = image; + }]; + _textView.text = littleGameModel.name; +} + #pragma mark - 懒加载 - (NetImageView *)gameView{ if(!_gameView){ diff --git a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.h b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.h index 6c945a71..c87a7981 100644 --- a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.h +++ b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.h @@ -10,8 +10,15 @@ #import "RoomGuestDelegate.h" NS_ASSUME_NONNULL_BEGIN +typedef NS_ENUM(NSInteger, MSRoomMenuType) { + MSRoomMenuTypeGame, + MSRoomMenuTypeLittleGame, +}; + + @interface MSRoomMenuGameVC : MvpViewController -- (instancetype)initWithDelegate:(id)delegate; +- (instancetype)initWithDelegate:(id)delegate roomMenuType:(MSRoomMenuType)type; +//- (instancetype)initWithDelegate:(id)delegate; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.m b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.m index 4bf2fdc3..325b47e2 100644 --- a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.m +++ b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameVC.m @@ -15,8 +15,13 @@ #import "XPRoomViewController.h" #import "MSRoomGameWebVC.h" #import "XPRoomAnimationView.h" + +#import "Api+LittleGame.h" +#import "Api+RoomSetting.h" + @interface MSRoomMenuGameVC () @property(nonatomic,strong) MSRoomMenuGameView *gameView; +@property(nonatomic, assign) MSRoomMenuType type; ///host 代理 @property (nonatomic,weak) idhostDelegate; @end @@ -25,6 +30,7 @@ -(void)dealloc{ } + - (instancetype)initWithDelegate:(id)delegate{ self = [super init]; if(self){ @@ -32,6 +38,17 @@ } return self; } + +- (instancetype)initWithDelegate:(id)delegate + roomMenuType:(MSRoomMenuType)type { + self = [super init]; + if(self){ + self.type = type; + self.hostDelegate = delegate; + } + return self; +} + - (BOOL)isHiddenNavBar { return YES; } @@ -39,23 +56,57 @@ [super viewDidLoad]; [self installUI]; [self installConstraints]; - [self getGameData]; + [self loadMenuData]; } + +- (void)loadMenuData { + switch (self.type) { + case MSRoomMenuTypeGame: + [self getGameData]; + break; + case MSRoomMenuTypeLittleGame: + [self getLittleGameList]; + break; + default: + break; + } +} + -(void)getGameData{ - NSMutableArray *playList = [self.hostDelegate getPlayList]; - if(playList.count > 0){ - _gameView.playList = playList; - return; - } - NSString * roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]; - [Api getPlayList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { - if (code == 200) { - NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; + NSMutableArray *resourceList = [self.hostDelegate getPlayList]; + if(resourceList.count > 0){ + _gameView.playList = resourceList; + return; + } + + NSString * roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]; + @kWeakify(self); + [Api getPlayList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + if (code == 200) { + @kStrongify(self); + NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; self.gameView.playList = [[NSMutableArray alloc]initWithArray:array]; - - } - } roomId:roomId]; + } + } roomId:roomId]; } + +- (void)getLittleGameList { + NSMutableArray *resourceList = [self.hostDelegate getLittleGameList]; + if(resourceList.count > 0){ + _gameView.littleGameList = resourceList; + return; + } + + @kWeakify(self); + [Api getLittleGameList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + if (code == 200) { + @kStrongify(self); + NSArray * array = [LittleGameInfoModel modelsWithArray:data.data]; + self.gameView.littleGameList = array.mutableCopy; + } + }]; +} + -(void)installUI{ self.view.backgroundColor = [UIColor clearColor]; [self.view addSubview:self.gameView]; @@ -70,7 +121,62 @@ - (void)didClickBackBtnAction{ [self dismissViewControllerAnimated:YES completion:nil]; } --(void)ms_didSelectItemAtIndexPath:(ActivityInfoModel *)model{ + +-(void)ms_didSelectLittleGameItemAtIndexPath:(LittleGameInfoModel *)model { + if (self.hostDelegate.isManagerOrOwner) { + @kWeakify(self); + [TTPopup alertWithMessage:@"确认开启游戏?" confirmHandler:^{ + @kStrongify(self); + [self startLittleGameWith:model]; + } cancelHandler:^{}]; + } else { + [XNDJTDDLoadingTool showErrorWithMessage:@"无权发起该游戏,请联系房主或管理员~"]; + } +} + +- (void)startLittleGameWith:(LittleGameInfoModel *)model { + RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; + NSMutableDictionary * params = [NSMutableDictionary dictionary]; + NSString * uid = [AccountInfoStorage instance].getUid; + NSString * ticket = [AccountInfoStorage instance].getTicket; + [params setObject:ticket forKey:@"ticket"]; + [params setObject:uid forKey:@"uid"]; + [params setObject:[NSString stringWithFormat:@"%ld", roomInfo.uid] forKey:@"roomUid"]; + if (roomInfo.title.length > 0) { + [params setObject:roomInfo.title forKey:@"title"]; + } + + if (roomInfo.roomPwd.length > 0) { + [params setObject:roomInfo.roomPwd forKey:@"roomPwd"]; + } else{ + [params setObject:@"" forKey:@"roomPwd"]; + } + + if (roomInfo.tagId > 0) { + [params setObject:[NSString stringWithFormat:@"%ld", roomInfo.tagId] forKey:@"tagId"]; + } + if ([model.mgId isEqualToString:@"0"]) { + [params setObject:@(RoomType_Game) forKey:@"type"]; + [params setObject:@"0" forKey:@"mgId"]; + } else { + [params setObject:@(RoomType_MiniGame) forKey:@"type"]; + [params setObject:model.mgId forKey:@"mgId"]; + } + [params setObject:@(roomInfo.hasAnimationEffect) forKey:@"hasAnimationEffect"]; + + @kWeakify(self); + [Api ownerUpdateRoomInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + @kStrongify(self); + [self dismissViewControllerAnimated:YES completion:nil]; + if (code == 200) { + + } else { + [XNDJTDDLoadingTool showErrorWithMessage:msg]; + } + } params:params]; +} + +-(void)ms_didSelectItemAtIndexPath:(ActivityInfoModel *)model { self.gameView.hidden = YES; if ([model.code isEqualToString:@"FIND_LOVE"]) { [self lookLoveTapRecognizer]; @@ -88,9 +194,7 @@ [fairyVC.navigationController setNavigationBarHidden:YES animated:NO]; [vc.view addSubview:fairyVC.view]; [UIView animateWithDuration:0.2 animations:^{ - fairyVC.view.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight); - }completion:^(BOOL finished) { }]; @@ -128,10 +232,9 @@ [self.hostDelegate.getSuperView addSubview:vc.view]; [self.hostDelegate.getSuperView bringSubviewToFront:animationView]; } - } + - (void)lookLoveTapRecognizer { - if ([self.hostDelegate isKindOfClass:[XPRoomViewController class]]){ XPCandyTreeViewController * candyTreeVC = [[XPCandyTreeViewController alloc] initWithDelegate:self.hostDelegate]; candyTreeVC.view.frame = CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight); @@ -145,14 +248,14 @@ }]; } - - } + - (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 - 懒加载 - (MSRoomMenuGameView *)gameView{ if(!_gameView){ diff --git a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.h b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.h index ea5cda01..f177c203 100644 --- a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.h +++ b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.h @@ -7,17 +7,20 @@ #import #import "ActivityInfoModel.h" +#import "LittleGameInfoModel.h" NS_ASSUME_NONNULL_BEGIN @protocol MSRoomMenuGameViewDelegate -(void)didClickBackBtnAction; +-(void)ms_didSelectLittleGameItemAtIndexPath:(LittleGameInfoModel *)model; -(void)ms_didSelectItemAtIndexPath:(ActivityInfoModel *)model; @end @interface MSRoomMenuGameView : UIView @property(nonatomic,strong) NSMutableArray *playList; +@property(nonatomic,strong) NSMutableArray *littleGameList; @property(nonatomic,weak) iddelegate; @end diff --git a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.m b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.m index 12494fbb..bffdbe4e 100644 --- a/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.m +++ b/YuMi/Modules/YMRoom/View/MenuContainerView/MSRoomMenuGameView.m @@ -7,7 +7,11 @@ #import "MSRoomMenuGameView.h" #import "MSRoomMenuGameCell.h" +#import "XNDJTDDLoadingTool.h" #import "MSRoomMenuGameEmptyCell.h" + +static const NSInteger kItemsPerRow = 5; + @interface MSRoomMenuGameView() @property(nonatomic,strong) UIButton *backBtn; @property(nonatomic,strong) UIView *ms_bgView; @@ -35,8 +39,8 @@ }]; [self.ms_bgView mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.leading.trailing.equalTo(self).inset(kGetScaleWidth(0)); - make.height.mas_equalTo(kGetScaleWidth(247)); - + make.height.mas_equalTo(kGetScaleWidth(246)); + }]; [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.ms_bgView); @@ -49,40 +53,71 @@ } -(void)setPlayList:(NSMutableArray *)playList{ _playList = playList; - if(_playList.count < 6 && _playList.count > 0){ - [self.ms_bgView mas_updateConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(kGetScaleWidth(130)); - - }]; - } + [self updateViewHeightWithItemCount:playList.count]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.collectionView reloadData]; - }); + }); } + +- (void)setLittleGameList:(NSMutableArray *)littleGameList { + _littleGameList = littleGameList; + [self updateViewHeightWithItemCount:littleGameList.count]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.collectionView reloadData]; + }); +} + +- (void)updateViewHeightWithItemCount:(NSInteger)count { +// 调整这里,确认间距 + NSInteger lineNum = (count + kItemsPerRow - 1)/kItemsPerRow; + CGFloat height = 20 + 56 * lineNum + 44 * (lineNum - 1) + 70; + [self.ms_bgView mas_updateConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(kGetScaleWidth(height)); + }]; +} + +- (NSInteger)countOfCurrentType { + return self.littleGameList.count > 0 ? self.littleGameList.count : self.playList.count; +} + #pragma mark- UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ CGFloat width = (KScreenWidth-kGetScaleWidth(6))/5; - return self.playList.count > 0 ? CGSizeMake(width, kGetScaleWidth(100)): CGSizeMake(KScreenWidth, kGetScaleWidth(200)); + return [self countOfCurrentType] > 0 ? CGSizeMake(width, kGetScaleWidth(100)): CGSizeMake(KScreenWidth, kGetScaleWidth(200)); } - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ - return self.playList.count > 0 ? UIEdgeInsetsMake(0, kGetScaleWidth(3), 0, kGetScaleWidth(3)): UIEdgeInsetsMake(0, 0, 0, 0); + return [self countOfCurrentType] > 0 ? UIEdgeInsetsMake(0, kGetScaleWidth(3), 0, kGetScaleWidth(3)): UIEdgeInsetsMake(0, 0, 0, 0); } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ - return self.playList.count > 0 ? self.playList.count : 1; + return [self countOfCurrentType] > 0 ? [self countOfCurrentType] : 1; } - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ - if (self.playList.count == 0){ + if ([self countOfCurrentType] == 0){ MSRoomMenuGameEmptyCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([MSRoomMenuGameEmptyCell class]) forIndexPath:indexPath]; return cell; } MSRoomMenuGameCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([MSRoomMenuGameCell class]) forIndexPath:indexPath]; - cell.model = [self.playList safeObjectAtIndex1:indexPath.row]; + if (_littleGameList.count > 0){ + cell.littleGameModel = [self.littleGameList safeObjectAtIndex1:indexPath.row]; + } else { + cell.model = [self.playList safeObjectAtIndex1:indexPath.row]; + } + return cell; } -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ - if (self.delegate && [self.delegate respondsToSelector:@selector(ms_didSelectItemAtIndexPath:)]){ - [self.delegate ms_didSelectItemAtIndexPath:[self.playList safeObjectAtIndex1:indexPath.row]]; + if (self.delegate) { + if (self.littleGameList != nil && + self.littleGameList.count > 0 && + [self.delegate respondsToSelector:@selector(ms_didSelectLittleGameItemAtIndexPath:)]) { + [self.delegate ms_didSelectLittleGameItemAtIndexPath:[self.littleGameList safeObjectAtIndex1:indexPath.row]]; + } + else if (self.playList != nil && + self.playList.count > 0 && + [self.delegate respondsToSelector:@selector(ms_didSelectItemAtIndexPath:)]) { + [self.delegate ms_didSelectItemAtIndexPath:[self.playList safeObjectAtIndex1:indexPath.row]]; + } } } #pragma mark - 懒加载 @@ -104,8 +139,7 @@ - (UICollectionView *)collectionView{ if (!_collectionView) { MSBaseRTLFlowLayout *layout = [[MSBaseRTLFlowLayout alloc] init]; - - + layout.minimumLineSpacing = 0; layout.minimumInteritemSpacing = 0; _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; diff --git a/YuMi/Modules/YMRoom/View/MenuContainerView/XPRoomMenuContainerView.m b/YuMi/Modules/YMRoom/View/MenuContainerView/XPRoomMenuContainerView.m index 757281d7..4cba71a0 100644 --- a/YuMi/Modules/YMRoom/View/MenuContainerView/XPRoomMenuContainerView.m +++ b/YuMi/Modules/YMRoom/View/MenuContainerView/XPRoomMenuContainerView.m @@ -200,7 +200,7 @@ break; case MSRoomMenuItemType_Game: { - MSRoomMenuGameVC *vc = [[MSRoomMenuGameVC alloc]initWithDelegate:self.delegate]; + MSRoomMenuGameVC *vc = [[MSRoomMenuGameVC alloc]initWithDelegate:self.delegate roomMenuType:MSRoomMenuTypeGame]; vc.modalPresentationStyle = UIModalPresentationOverFullScreen; [self.delegate.getCurrentNav presentViewController:vc animated:YES completion:nil]; break; @@ -375,7 +375,7 @@ - (void)onRoomUpdate { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; - UserInfoModel * userInfo = self.delegate.getUserInfo; +// UserInfoModel * userInfo = self.delegate.getUserInfo; // if (userInfo.isFirstCharge) { // [self.giftButton setImage:[UIImage getLanguageImage:@"room_menu_gift_first_recharge"] forState:UIControlStateNormal]; diff --git a/YuMi/Modules/YMRoom/View/RoomHostDelegate.h b/YuMi/Modules/YMRoom/View/RoomHostDelegate.h index d5d01366..c8bf65d7 100644 --- a/YuMi/Modules/YMRoom/View/RoomHostDelegate.h +++ b/YuMi/Modules/YMRoom/View/RoomHostDelegate.h @@ -28,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN - (RoomInfoModel*)getRoomInfo; - (UserInfoModel*)getUserInfo; +- (BOOL)isManagerOrOwner; - (void)exitRoom; - (void)miniRoom; - (UINavigationController *)getCurrentNav; @@ -40,7 +41,13 @@ NS_ASSUME_NONNULL_BEGIN -(BOOL)getIsMiniEnter; ///屏蔽 -(void)requesstShieldingAction; --(NSMutableArray *)getPlayList;; + +///获取活动列表 +-(NSMutableArray *)getPlayList; + +///获取小游戏列表 +-(NSMutableArray *)getLittleGameList; + -(NSInteger)getPublicScreenType; @end diff --git a/YuMi/Modules/YMRoom/View/SendGiftView/View/XPGiftInfoView.m b/YuMi/Modules/YMRoom/View/SendGiftView/View/XPGiftInfoView.m index a7cbf2c0..c31377af 100644 --- a/YuMi/Modules/YMRoom/View/SendGiftView/View/XPGiftInfoView.m +++ b/YuMi/Modules/YMRoom/View/SendGiftView/View/XPGiftInfoView.m @@ -202,7 +202,7 @@ return itemCell; } - XPGiftItemCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPGiftItemCollectionViewCell class]) forIndexPath:indexPath]; + XPGiftItemCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPGiftItemCollectionViewCell class]) forIndexPath:indexPath]; cell.usingplaceType = self.usingplaceType; cell.curUserNobleLevel = self.curUserNobleLevel; diff --git a/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.h b/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.h index 85d6ad56..9cdcca5e 100644 --- a/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.h +++ b/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.h @@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN @protocol PIRoomEnterRedPacketViewDelegate --(void)openRedPacketWtihModel:(XPRedPacketModel *_Nullable)redModel; +-(void)openRedPacketWithModel:(XPRedPacketModel *_Nullable)redModel; @end diff --git a/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.m b/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.m index 710203b6..ed862337 100644 --- a/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.m +++ b/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.m @@ -203,8 +203,8 @@ self.redPacketModel = self.redPacketList.firstObject; self.hidden = NO; self.pi_redNum = @(self.redPacketList.count).stringValue; - if(self.delegate && [self.delegate respondsToSelector:@selector(openRedPacketWtihModel:)]){ - [self.delegate openRedPacketWtihModel:self.redPacketModel]; + if(self.delegate && [self.delegate respondsToSelector:@selector(openRedPacketWithModelopenRedPacketWithModelopenRedPacketWithModel:)]){ + [self.delegate openRedPacketWithModel:self.redPacketModel]; } return; } @@ -226,8 +226,8 @@ } [self.redPacketList replaceObjectAtIndex:[self.redPacketList indexOfObject:self.redPacketModel] withObject:redModel]; self.redPacketModel = redModel; - if(self.delegate && [self.delegate respondsToSelector:@selector(openRedPacketWtihModel:)]){ - [self.delegate openRedPacketWtihModel:self.redPacketModel]; + if(self.delegate && [self.delegate respondsToSelector:@selector(openRedPacketWithModelopenRedPacketWithModelopenRedPacketWithModel:)]){ + [self.delegate openRedPacketWithModel:self.redPacketModel]; } } } redEnvelopeId:self.redPacketModel.redEnvelopeId]; diff --git a/YuMi/Modules/YMRoom/View/StageView/AnchorPKStageView.m b/YuMi/Modules/YMRoom/View/StageView/AnchorPKStageView.m index 7e2f6e22..add3ad1b 100644 --- a/YuMi/Modules/YMRoom/View/StageView/AnchorPKStageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/AnchorPKStageView.m @@ -94,7 +94,7 @@ return self; } -- (NSInteger)countOfMircoView { +- (NSInteger)countOfMicroView { return 2; } diff --git a/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m b/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m index 20883ceb..11f7e24f 100644 --- a/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m @@ -41,7 +41,7 @@ @implementation AnchorStageView -- (NSInteger)countOfMircoView { +- (NSInteger)countOfMicroView { return 4; } diff --git a/YuMi/Modules/YMRoom/View/StageView/DatingStageView.m b/YuMi/Modules/YMRoom/View/StageView/DatingStageView.m index 5fa5073d..c8219403 100644 --- a/YuMi/Modules/YMRoom/View/StageView/DatingStageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/DatingStageView.m @@ -70,7 +70,7 @@ return self; } -- (NSInteger)countOfMircoView { +- (NSInteger)countOfMicroView { return 10; } diff --git a/YuMi/Modules/YMRoom/View/StageView/LittleGameScrollStageView.m b/YuMi/Modules/YMRoom/View/StageView/LittleGameScrollStageView.m index 06c6f36e..8302ab02 100644 --- a/YuMi/Modules/YMRoom/View/StageView/LittleGameScrollStageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/LittleGameScrollStageView.m @@ -26,7 +26,7 @@ UIKIT_EXTERN NSString * const kRoomRoomLittleGameMiniStageNotificationKey; @interface LittleGameScrollStageView () -@property (nonatomic, strong) UIScrollView *scrolView; +@property (nonatomic, strong) UIScrollView *scrollView; @end @@ -37,50 +37,70 @@ UIKIT_EXTERN NSString * const kRoomRoomLittleGameMiniStageNotificationKey; [[NSNotificationCenter defaultCenter] removeObserver:self]; } -- (instancetype)initWithDelegate:(id)delegate { - if (self = [super initWithDelegate:delegate]) { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeViewState:) name:kRoomRoomLittleGameMiniStageNotificationKey object:nil]; - NSInteger microCount = self.countOfMircoView; - for (UIView *microView in self.subviews) { - [microView removeFromSuperview]; +- (void)setupObserver { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeViewState:) name:kRoomRoomLittleGameMiniStageNotificationKey object:nil]; +} + +- (CGFloat)widthOfMic { + return 70; +} + +- (CGFloat)spaceOfMic { + return 16; + // 下面的方法是用来适配屏幕的计算,不滚动,全部在屏幕内显示 +// return (KScreenWidth - mcWidth * [self countOfMicroView] - paddingH * 2) / ([self countOfMicroView] - 1); +} + +- (void)setupMicroScrollView { + NSInteger microCount = self.countOfMicroView; + for (UIView *microView in self.subviews) { + [microView removeFromSuperview]; + } + [self addSubview:self.scrollView]; + [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self); + }]; + + CGFloat spaceWidth = [self spaceOfMic]; + self.scrollView.contentSize = CGSizeMake((microCount - 1) * spaceWidth + paddingH * 2 + mcWidth * microCount, mcHeight); + for (int i = 0; i < microCount; i++) { + UIView* microView = [self microViewForIndex:i]; + if (microView) { + microView.tag = i; + microView.frame = [self rectForViewAtIndex:i]; + [self.scrollView addSubview:microView]; } - [self addSubview:self.scrolView]; - [self.scrolView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self); - }]; - CGFloat spaceWidth = (KScreenWidth - mcWidth * 6 - paddingH * 2) / 5; - self.scrolView.contentSize = CGSizeMake((microCount - 1) * spaceWidth + paddingH * 2 + mcWidth * microCount, mcHeight); - for (int i = 0; i < microCount; i++) { - UIView* microView = [self microViewForIndex:i]; - if (microView) { - microView.tag = i; - microView.frame = [self rectForViewAtIndex:i]; - [self.scrolView addSubview:microView]; + } + if (isMSRTL()) { + self.scrollView.transform = CGAffineTransformMakeRotation(M_PI); + NSArray *subViews = self.scrollView.subviews; + for (UIView *subView in subViews) { + if ([subView isKindOfClass:[LittleGameMicroView class]]) { + subView.transform = CGAffineTransformMakeRotation(M_PI); } } - if (isMSRTL()) { - self.scrolView.transform = CGAffineTransformMakeRotation(M_PI); - NSArray *subViews = self.scrolView.subviews; - for (UIView *subView in subViews) { - if ([subView isKindOfClass:[LittleGameMicroView class]]) { - subView.transform = CGAffineTransformMakeRotation(M_PI); - } - } - }else{ - self.scrolView.transform = CGAffineTransformIdentity; - NSArray *subViews = self.scrolView.subviews; - for (UIView *subView in subViews) { - if ([subView isKindOfClass:[LittleGameMicroView class]]) { - subView.transform = CGAffineTransformIdentity; - } - } + }else{ + self.scrollView.transform = CGAffineTransformIdentity; + NSArray *subViews = self.scrollView.subviews; + for (UIView *subView in subViews) { + if ([subView isKindOfClass:[LittleGameMicroView class]]) { + subView.transform = CGAffineTransformIdentity; + } } } +} + +- (instancetype)initWithDelegate:(id)delegate { + if (self = [super initWithDelegate:delegate]) { + + [self setupObserver]; + [self setupMicroScrollView]; + } return self; } -- (NSInteger)countOfMircoView { - return self.hostDelegate.getRoomInfo.mgMicNum ? self.hostDelegate.getRoomInfo.mgMicNum : 6; +- (NSInteger)countOfMicroView { + return 9; //self.hostDelegate.getRoomInfo.mgMicNum ? self.hostDelegate.getRoomInfo.mgMicNum : 6; } - (UIView *)microViewForIndex:(NSInteger)index { @@ -88,14 +108,11 @@ UIKIT_EXTERN NSString * const kRoomRoomLittleGameMiniStageNotificationKey; if (microView) { return microView; } - return [[LittleGameMicroView alloc]init]; + return [[LittleGameMicroView alloc] init]; } -/** - ◯ ◯ ◯ ◯ ◯ ◯ - */ - (CGRect)rectForViewAtIndex:(NSInteger)index { - CGFloat spaceWidth = (KScreenWidth - mcWidth * 6 - paddingH * 2) / 5; + CGFloat spaceWidth = [self spaceOfMic]; return CGRectMake(paddingH + index * (mcWidth + spaceWidth), 0, mcWidth, mcHeight); } @@ -107,9 +124,9 @@ UIKIT_EXTERN NSString * const kRoomRoomLittleGameMiniStageNotificationKey; - (CGPoint)animationPointAtStageViewByUid:(NSString *)uid { NSInteger index = [self getIndexByUid:uid]; CGPoint point = CGPointZero; - CGFloat spaceWidth = (KScreenWidth - mcWidth * 6 - paddingH * 2) / 5; + CGFloat spaceWidth = [self spaceOfMic]; point= CGPointMake(paddingH + index * (mcWidth + spaceWidth) + mcWidth / 2, mcHeight / 2 - 10); - point = [self.scrolView convertPoint:point toView:nil]; + point = [self.scrollView convertPoint:point toView:nil]; if (point.x > KScreenWidth) { point = CGPointZero; } @@ -128,21 +145,20 @@ UIKIT_EXTERN NSString * const kRoomRoomLittleGameMiniStageNotificationKey; [super didSelectAtIndex:index]; } - #pragma mark - 通知 - (void)changeViewState:(NSNotification *)notification { NSDictionary * dic = notification.object; self.hidden = [[dic objectForKey:@"isMini"] boolValue]; } -- (UIScrollView *)scrolView { - if (!_scrolView) { - _scrolView = [[UIScrollView alloc] init]; - _scrolView.scrollEnabled = YES; - _scrolView.showsHorizontalScrollIndicator = NO; - _scrolView.clipsToBounds = NO; +- (UIScrollView *)scrollView { + if (!_scrollView) { + _scrollView = [[UIScrollView alloc] init]; + _scrollView.scrollEnabled = YES; + _scrollView.showsHorizontalScrollIndicator = NO; + _scrollView.clipsToBounds = NO; } - return _scrolView; + return _scrollView; } diff --git a/YuMi/Modules/YMRoom/View/StageView/LittleGameStageView.m b/YuMi/Modules/YMRoom/View/StageView/LittleGameStageView.m index 4542c3f2..90752a25 100644 --- a/YuMi/Modules/YMRoom/View/StageView/LittleGameStageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/LittleGameStageView.m @@ -41,7 +41,7 @@ UIKIT_EXTERN NSString * const kRoomRoomLittleGameMiniStageNotificationKey; return self; } -- (NSInteger)countOfMircoView { +- (NSInteger)countOfMicroView { return 6; } diff --git a/YuMi/Modules/YMRoom/View/StageView/SocialStageView.m b/YuMi/Modules/YMRoom/View/StageView/SocialStageView.m index f0e19ab0..3c814ab1 100644 --- a/YuMi/Modules/YMRoom/View/StageView/SocialStageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/SocialStageView.m @@ -35,7 +35,7 @@ @implementation SocialStageView -- (NSInteger)countOfMircoView { +- (NSInteger)countOfMicroView { return 9; } diff --git a/YuMi/Modules/YMRoom/View/StageView/StageView.h b/YuMi/Modules/YMRoom/View/StageView/StageView.h index 7ce872dd..29981a4d 100644 --- a/YuMi/Modules/YMRoom/View/StageView/StageView.h +++ b/YuMi/Modules/YMRoom/View/StageView/StageView.h @@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN /** * 坑位数目 */ -- (NSInteger)countOfMircoView; +- (NSInteger)countOfMicroView; /** * 坑位区域的高度(宽度默认屏幕宽度) */ diff --git a/YuMi/Modules/YMRoom/View/StageView/StageView.m b/YuMi/Modules/YMRoom/View/StageView/StageView.m index df37221c..5a3fadd7 100644 --- a/YuMi/Modules/YMRoom/View/StageView/StageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/StageView.m @@ -87,7 +87,7 @@ } } - NSInteger microCount = self.countOfMircoView; + NSInteger microCount = self.countOfMicroView; for (int i = 0; i < microCount; i++) { UIView* microView = [self microViewForIndex:i]; if (microView) { @@ -267,7 +267,7 @@ RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; BOOL leaveMode = roomInfo.leaveMode; NSMutableArray *statisMicArray = [NSMutableArray array]; - for (int i = 0; i < self.countOfMircoView; i++) { + for (int i = 0; i < self.countOfMicroView; i++) { MicroQueueModel * model = [self.micQueue objectForKey:[self indexToPosition:i]]; UIView * view = [self findMicroViewByIndex:i]; @@ -445,7 +445,7 @@ - (void)onRoomUpdate { self.isMiniEnter = NO; RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; - for (int i = 0; i < self.countOfMircoView; i++) { + for (int i = 0; i < self.countOfMicroView; i++) { UIView * view = [self findMicroViewByIndex:i]; [view showGiftValueMode:roomInfo.showGiftValue]; if(roomInfo.showGiftValue == NO){ @@ -453,7 +453,7 @@ } } if (self.hostDelegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind && self.hostDelegate.getRoomInfo.blindDateState == RoomPlayDateingType_Pick) { - for (int i = 0; i < self.countOfMircoView; i++) { + for (int i = 0; i < self.countOfMicroView; i++) { MicroQueueModel * model = [self.micQueue objectForKey:[self indexToPosition:i]]; UIView * view = [self findMicroViewByIndex:i]; [view configRoomInfo:roomInfo]; @@ -565,7 +565,7 @@ } } if(userInfo.isNoProhibitMic == YES){ - for (int i = 0; i < self.countOfMircoView; i++) { + for (int i = 0; i < self.countOfMicroView; i++) { UIView * view = [self findMicroViewByIndex:i]; [view configPkBtn:userInfo]; } @@ -918,7 +918,7 @@ }]; } -- (NSInteger)countOfMircoView { +- (NSInteger)countOfMicroView { return 0; } @@ -961,7 +961,7 @@ } - (UIView *)findMicroViewByUid:(NSString *)uid { - for (int i = 0; i < self.countOfMircoView; i++) { + for (int i = 0; i < self.countOfMicroView; i++) { MicroQueueModel* model = [self.micQueue objectForKey:[self indexToPosition:i]]; if (model.userInfo && model.userInfo.uid == uid.intValue) { return [self findMicroViewByIndex:i]; @@ -1009,7 +1009,7 @@ - (NSMutableArray *)microViews { if (!_microViews) { - _microViews = [NSMutableArray arrayWithCapacity:self.countOfMircoView]; + _microViews = [NSMutableArray arrayWithCapacity:self.countOfMicroView]; } return _microViews; } @@ -1017,7 +1017,7 @@ - (NSMutableDictionary *)micQueue { if (!_micQueue) { _micQueue= [NSMutableDictionary dictionary]; - for (int i = 0; i < self.countOfMircoView; i++) { + for (int i = 0; i < self.countOfMicroView; i++) { NSString* position = [self indexToPosition:i]; MicroQueueModel *micSequence = [[MicroQueueModel alloc]init]; micSequence.userInfo = nil; diff --git a/YuMi/Modules/YMRoom/View/XPRoomViewController.m b/YuMi/Modules/YMRoom/View/XPRoomViewController.m index 543697c8..6c4a01f4 100644 --- a/YuMi/Modules/YMRoom/View/XPRoomViewController.m +++ b/YuMi/Modules/YMRoom/View/XPRoomViewController.m @@ -62,6 +62,7 @@ #import "XPWebViewController.h" #import "SessionViewController.h" #import "XPFreeGiftsObtainView.h" +#import "MSRoomMenuGameVC.h" ///P #import "XPRoomPresenter.h" @@ -162,6 +163,9 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 @property(nonatomic,assign) BOOL isShowRedPacket; @property(nonatomic,copy) NSString *releaseCoins; @property(nonatomic,copy) NSString *myCoins; + +@property(nonatomic,strong) UIButton *exitGameButton; + @end @implementation XPRoomViewController @@ -290,6 +294,8 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 [self exitOldRoom]; [self initSubViews]; [self initSubViewConstraints]; + [self handleActivityContainerViewEvents]; + if (self.isMiniEnter) { [XNDJTDDLoadingTool showAnchorLoading:self.navigationController.view]; [self.presenter initEnterRoom:self.roomUid user:[AccountInfoStorage instance].getUid]; @@ -416,29 +422,6 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 [self.view addSubview:self.roomHeaderView]; [self.view addSubview:self.functionView]; [self.view addSubview:self.animationView]; - - @kWeakify(self); - self.activityContainerView.openRedPacketHandle = ^(XPRedPacketModel * _Nullable redModel,RoomType type,BOOL isChangeRoom) { - @kStrongify(self); - if(isChangeRoom == YES){ - self.redPacketView.type = type; - self.redPacketView.redPacketList = self.activityContainerView.redPacketList; - return; - } - - XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; - view.delegate = self; - self.isShowRedPacket = YES; - view.receiveModel = redModel; - for (UIView *subView in self.view.subviews) { - if([subView isKindOfClass:[XPReceiveRedPacketView class]]) { - view.alphaView.backgroundColor = [UIColor clearColor]; - break; - } - } - [self.view addSubview:view]; - [self.view bringSubviewToFront:view]; - }; } - (void)initSubViewConstraints { @@ -543,12 +526,36 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 make.width.mas_equalTo(87); }]; - [self.functionView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.anchorScrollView.middleImageView); }]; } +- (void)handleActivityContainerViewEvents { + @kWeakify(self); + self.activityContainerView.openRedPacketHandle = ^(XPRedPacketModel * _Nullable redModel,RoomType type,BOOL isChangeRoom) { + @kStrongify(self); + if(isChangeRoom == YES){ + self.redPacketView.type = type; + self.redPacketView.redPacketList = self.activityContainerView.redPacketList; + return; + } + + XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + view.delegate = self; + self.isShowRedPacket = YES; + view.receiveModel = redModel; + for (UIView *subView in self.view.subviews) { + if([subView isKindOfClass:[XPReceiveRedPacketView class]]) { + view.alphaView.backgroundColor = [UIColor clearColor]; + break; + } + } + [self.view addSubview:view]; + [self.view bringSubviewToFront:view]; + }; +} + - (void)exitOldRoom { NSString * roomUid = [NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.uid]; if (roomUid.integerValue > 0 && roomUid.integerValue != self.roomUid.integerValue) { @@ -612,15 +619,9 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 self.stageView = [[AnchorStageView alloc] initWithDelegate:self]; } }else if(self.roomInfo.type == RoomType_MiniGame) { - if (self.roomInfo.mgMicNum > 6 && ![self.stageView isKindOfClass:[LittleGameScrollStageView class]]) { - [self.stageView removeFromSuperview]; - self.stageView = nil; - self.stageView = [[LittleGameScrollStageView alloc] initWithDelegate:self]; - } else if (self.roomInfo.mgMicNum <= 6 && ![self.stageView isKindOfClass:[LittleGameStageView class]]) { - [self.stageView removeFromSuperview]; - self.stageView = nil; - self.stageView = [[LittleGameStageView alloc] initWithDelegate:self]; - } + [self.stageView removeFromSuperview]; + self.stageView = nil; + self.stageView = [[LittleGameScrollStageView alloc] initWithDelegate:self]; }else if(self.roomInfo.hadChangeRoomType && ![self.stageView isKindOfClass:[SocialStageView class]]) { [self.stageView removeFromSuperview]; self.stageView = nil; @@ -628,13 +629,13 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 } else { return; } - - + if (!self.stageView.superview) { [self.view insertSubview:self.stageView belowSubview:self.roomHeaderView]; } - - + + [self addExitGameButton]; + if (self.roomInfo.type == RoomType_MiniGame) { [self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.mas_equalTo(self.view); @@ -740,15 +741,97 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5); make.width.mas_equalTo(87); }]; - } + +- (void)setRoomInfo:(RoomInfoModel *)roomInfo { + if (_roomInfo == roomInfo) { + return; + } + _roomInfo = roomInfo; + [self.activityContainerView updateView]; +} + +#pragma mark - Game Switch +- (void)addExitGameButton { + [self removeExitGameButton]; + + if (self.roomInfo.type != RoomType_MiniGame) { + return; + } + + if (_exitGameButton == nil) { + _exitGameButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_exitGameButton setTitle:@"切换" forState:UIControlStateNormal]; + [_exitGameButton setImage:[UIImage imageNamed:@"ms_room_game_switch_button"] forState:UIControlStateNormal]; + [_exitGameButton addTarget:self action:@selector(didTapExitGameButton) forControlEvents:UIControlEventTouchUpInside]; + } + [self.view addSubview:self.exitGameButton]; + [self.exitGameButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.stageView.mas_bottom).offset(10); + make.left.mas_equalTo(self.view).offset(12); + make.width.height.equalTo(@21); + }]; +} + +- (void)removeExitGameButton { + [self.exitGameButton removeFromSuperview]; +} + +- (void)didTapExitGameButton { + if ([self.littleGameView isInSudGame]) { + [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomFunctionContainerView19")]; + } else { + @kWeakify(self); + [TTPopup alertWithMessage:YMLocalizedString(@"XPRoomFunctionContainerView20") confirmHandler:^{ + @kStrongify(self); + [XNDJTDDLoadingTool showLoading]; + [self exitLittleGame]; + } cancelHandler:^{ }]; + } +} + +- (void)exitLittleGame { + RoomInfoModel * roomInfo = self.getRoomInfo; + NSMutableDictionary * params = [NSMutableDictionary dictionary]; + NSString * uid = [AccountInfoStorage instance].getUid; + NSString * ticket = [AccountInfoStorage instance].getTicket; + [params setObject:ticket forKey:@"ticket"]; + [params setObject:uid forKey:@"uid"]; + [params setObject:[NSString stringWithFormat:@"%ld", roomInfo.uid] forKey:@"roomUid"]; + if (roomInfo.title.length > 0) { + [params setObject:roomInfo.title forKey:@"title"]; + } + + if (roomInfo.roomPwd.length > 0) { + [params setObject:roomInfo.roomPwd forKey:@"roomPwd"]; + } else{ + [params setObject:@"" forKey:@"roomPwd"]; + } + + if (roomInfo.tagId > 0) { + [params setObject:[NSString stringWithFormat:@"%ld", roomInfo.tagId] forKey:@"tagId"]; + } + + [params setObject:@(RoomType_Game) forKey:@"type"]; + [params setObject:@"0" forKey:@"mgId"]; + [params setObject:@(roomInfo.hasAnimationEffect) forKey:@"hasAnimationEffect"]; + + [Api ownerUpdateRoomInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + if (code == 200) { + [XNDJTDDLoadingTool hideHUD]; + } else { + [XNDJTDDLoadingTool showErrorWithMessage:msg]; + } + } params:params]; +} + #pragma mark- XPReceiveRedPacketViewDelegate - (void)closeViewAction{ self.isShowRedPacket = NO; } #pragma mark- PIRoomEnterRedPacketViewDelegate -- (void)openRedPacketWtihModel:(XPRedPacketModel *)redModel{ +- (void)openRedPacketWithModel:(XPRedPacketModel *)redModel{ XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; view.receiveModel = redModel; view.delegate = self; @@ -1027,14 +1110,11 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 self.roomInfo = roomInfo; self.userInfo = userInfo; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //获取一下红包信息 [self.presenter getRedPacket:[NSString stringWithFormat:@"%ld", self.roomInfo.uid]]; }); - - - + if (roomInfo.type == RoomType_Anchor) {//个播房,获取下一个房间 [self handleInitAnchorRoom]; [self showAnchorScrollTipView]; @@ -1878,10 +1958,20 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 - (UserInfoModel *)getUserInfo { return self.userInfo; } + +- (BOOL)isManagerOrOwner { + return self.roomUid.integerValue == self.userInfo.uid || + [self.superMangerList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"uid == %d", self.userInfo.uid]] > 0; +} + -(NSMutableArray *)getPlayList{ return self.activityContainerView.playList; } +-(NSMutableArray *)getLittleGameList { + return self.activityContainerView.littleGameList; +} + - (void)exitRoom { [self.stageView exitRoom]; [self.menuContainerView menuResignFirstResponder]; @@ -2296,7 +2386,7 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 - (XPRoomActivityContainerView *)activityContainerView { if (!_activityContainerView) { - _activityContainerView = [[XPRoomActivityContainerView alloc] initWithdelegate:self]; + _activityContainerView = [[XPRoomActivityContainerView alloc] initWithDelegate:self]; } return _activityContainerView; @@ -2311,7 +2401,7 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出 - (XPRoomFunctionContainerView *)functionView { if (!_functionView) { - _functionView = [[XPRoomFunctionContainerView alloc] initWithdelegate:self]; + _functionView = [[XPRoomFunctionContainerView alloc] initWithDelegate:self]; } return _functionView; } diff --git a/YuMi/ar.lproj/Localizable.strings b/YuMi/ar.lproj/Localizable.strings index db6b2081..6eff6076 100644 --- a/YuMi/ar.lproj/Localizable.strings +++ b/YuMi/ar.lproj/Localizable.strings @@ -1723,6 +1723,8 @@ ineHeadView12" = "الحمل"; "XPRoomFunctionContainerView12" = "لم يتم تحديد موضوع بعد"; "XPRoomFunctionContainerView13" = "ابدأ الاختيار>"; "XPRoomFunctionContainerView18" = "غير مسموح بتغيير اللعبة أو وضع اللعبة وأنت في اللعبة!"; +"XPRoomFunctionContainerView19" = "اللعبة جارية ولا يمكن إيقافها!"; +"XPRoomFunctionContainerView20" = "هل أنت متأكد من التبديل إلى غرفة مشتركة؟"; "XPRoomBackContainerView0" = "فشل تحميل صورة الخلفية الخاصة بالVIP"; "XPRoomBackContainerView1" = "فشل تحميل صورة الخلفية الخاصة بالمشغل"; diff --git a/YuMi/en.lproj/Localizable.strings b/YuMi/en.lproj/Localizable.strings index 460d7e23..fc9c9423 100644 --- a/YuMi/en.lproj/Localizable.strings +++ b/YuMi/en.lproj/Localizable.strings @@ -1465,6 +1465,8 @@ "XPRoomFunctionContainerView12" = "Topic not set"; "XPRoomFunctionContainerView13" = "Start Selection>"; "XPRoomFunctionContainerView18" = "Cannot switch games or gameplay during the game!"; +"XPRoomFunctionContainerView19" = "The game is in progress and cannot be stopped!"; +"XPRoomFunctionContainerView20" = "Are you sure you want to switch to a normal room?"; "XPRoomBackContainerView0" = "Exclusive background image for VIP failed to load"; "XPRoomBackContainerView1" = "Personal broadcast background image failed to load"; diff --git a/YuMi/zh-Hans.lproj/Localizable.strings b/YuMi/zh-Hans.lproj/Localizable.strings index 64ed0643..3ae5fee1 100644 --- a/YuMi/zh-Hans.lproj/Localizable.strings +++ b/YuMi/zh-Hans.lproj/Localizable.strings @@ -1076,6 +1076,8 @@ "XPRoomFunctionContainerView12" = "暂未设置话题"; "XPRoomFunctionContainerView13" = "开始选择>"; "XPRoomFunctionContainerView18" = "游戏中不可切换游戏或玩法!"; +"XPRoomFunctionContainerView19" = "游戏进行中,不可中止!"; +"XPRoomFunctionContainerView20" = "確認切換成普通房嗎?"; "XPRoomBackContainerView0" = "VIP专属背景图加载失败"; "XPRoomBackContainerView1" = "个播背景图加载失败"; diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings index e1b4dc7b..c114bce1 100644 --- a/YuMi/zh-Hant.lproj/Localizable.strings +++ b/YuMi/zh-Hant.lproj/Localizable.strings @@ -1079,6 +1079,8 @@ "XPRoomFunctionContainerView12" = "暫未設置話題"; "XPRoomFunctionContainerView13" = "開始選擇>"; "XPRoomFunctionContainerView18" = "遊戲中不可切換遊戲或玩法!"; +"XPRoomFunctionContainerView19" = "遊戲進行中,不可中止!"; +"XPRoomFunctionContainerView20" = "确认切换成普通房吗?"; "XPRoomBackContainerView0" = "VIP專屬背景圖加載失敗"; "XPRoomBackContainerView1" = "個播背景圖加載失敗";