From c4b58a33c41012bcacc9f64ef7e8a2f430c09ed7 Mon Sep 17 00:00:00 2001 From: fengshuo <963787902@qq.com> Date: Mon, 20 Dec 2021 19:23:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E9=BA=A6=E7=9A=84UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplan-ios.xcodeproj/project.pbxproj | 101 +++++ .../Contents.json | 22 + .../room_menu_arrange_mic@2x.png | Bin 0 -> 966 bytes .../room_menu_arrange_mic@3x.png | Bin 0 -> 2028 bytes .../Contents.json | 22 + .../room_menu_arrange_mic_new@2x.png | Bin 0 -> 1104 bytes .../room_menu_arrange_mic_new@3x.png | Bin 0 -> 2465 bytes xplan-ios/Main/IM/Model/AttachmentModel.h | 19 + .../Room/View/ArrangeMic/Api/Api+ArrangeMic.h | 37 ++ .../Room/View/ArrangeMic/Api/Api+ArrangeMic.m | 42 ++ .../View/ArrangeMic/Model/ArrangeMicModel.h | 35 ++ .../View/ArrangeMic/Model/ArrangeMicModel.m | 23 + .../ArrangeMic/Model/XPArrangeMicInfoModel.h | 24 ++ .../ArrangeMic/Model/XPArrangeMicInfoModel.m | 12 + .../Presenter/XPArrangeMicPresenter.h | 28 ++ .../Presenter/XPArrangeMicPresenter.m | 50 +++ .../Protocol/XPArrangeMicProtocol.h | 22 + .../Cell/XPArrangeMicEmptyTableViewCell.h | 17 + .../Cell/XPArrangeMicEmptyTableViewCell.m | 80 ++++ .../View/Cell/XPArrangeMicTableViewCell.h | 26 ++ .../View/Cell/XPArrangeMicTableViewCell.m | 155 +++++++ .../View/XPArrangeMicViewController.h | 18 + .../View/XPArrangeMicViewController.m | 393 ++++++++++++++++++ .../MenuContainerView/Model/XPRoomMenuItem.h | 1 + .../XPRoomMenuContainerView.m | 62 ++- .../Main/Room/View/XPRoomViewController.m | 1 + 26 files changed, 1187 insertions(+), 3 deletions(-) create mode 100644 xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/room_menu_arrange_mic@2x.png create mode 100644 xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/room_menu_arrange_mic@3x.png create mode 100644 xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/room_menu_arrange_mic_new@2x.png create mode 100644 xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/room_menu_arrange_mic_new@3x.png create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Api/Api+ArrangeMic.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Api/Api+ArrangeMic.m create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Model/ArrangeMicModel.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Model/ArrangeMicModel.m create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.m create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.m create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/Protocol/XPArrangeMicProtocol.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.m create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.m create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.h create mode 100644 xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.m diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index f9279f4c..64f95c92 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -127,6 +127,13 @@ E81366F826F0C12A0076364C /* LoginFullInfoProtocol.h in Sources */ = {isa = PBXBuildFile; fileRef = E81366F726F0C0F60076364C /* LoginFullInfoProtocol.h */; }; E81366FC26F0D2980076364C /* UIButton+EnlargeTouchArea.m in Sources */ = {isa = PBXBuildFile; fileRef = E81366FA26F0D2980076364C /* UIButton+EnlargeTouchArea.m */; }; E816C11527608A7500C84014 /* XPRoomMiniManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E816C11427608A7500C84014 /* XPRoomMiniManager.m */; }; + E81C1B1C27705F6B0020D1E4 /* XPArrangeMicPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C1B1B27705F6B0020D1E4 /* XPArrangeMicPresenter.m */; }; + E81C1B1F27705F7A0020D1E4 /* XPArrangeMicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C1B1E27705F7A0020D1E4 /* XPArrangeMicViewController.m */; }; + E81C1B2227705F950020D1E4 /* Api+ArrangeMic.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C1B2127705F950020D1E4 /* Api+ArrangeMic.m */; }; + E81C1B262770663B0020D1E4 /* XPArrangeMicTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C1B252770663B0020D1E4 /* XPArrangeMicTableViewCell.m */; }; + E81C1B29277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C1B28277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.m */; }; + E81C1B2C27706E5C0020D1E4 /* ArrangeMicModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C1B2B27706E5C0020D1E4 /* ArrangeMicModel.m */; }; + E81C1B2F277071670020D1E4 /* XPArrangeMicInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C1B2E277071670020D1E4 /* XPArrangeMicInfoModel.m */; }; E81C278C26EAFAF60031E639 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C278926EAFAF60031E639 /* Base64.m */; }; E81C278D26EAFAF60031E639 /* DESEncrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C278B26EAFAF60031E639 /* DESEncrypt.m */; }; E81C279026EB314D0031E639 /* LoginForgetEditView.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C278F26EB314D0031E639 /* LoginForgetEditView.m */; }; @@ -611,6 +618,21 @@ E81366FB26F0D2980076364C /* UIButton+EnlargeTouchArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+EnlargeTouchArea.h"; sourceTree = ""; }; E816C11327608A7500C84014 /* XPRoomMiniManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomMiniManager.h; sourceTree = ""; }; E816C11427608A7500C84014 /* XPRoomMiniManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomMiniManager.m; sourceTree = ""; }; + E81C1B1927705F4B0020D1E4 /* XPArrangeMicProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPArrangeMicProtocol.h; sourceTree = ""; }; + E81C1B1A27705F6B0020D1E4 /* XPArrangeMicPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPArrangeMicPresenter.h; sourceTree = ""; }; + E81C1B1B27705F6B0020D1E4 /* XPArrangeMicPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPArrangeMicPresenter.m; sourceTree = ""; }; + E81C1B1D27705F7A0020D1E4 /* XPArrangeMicViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPArrangeMicViewController.h; sourceTree = ""; }; + E81C1B1E27705F7A0020D1E4 /* XPArrangeMicViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPArrangeMicViewController.m; sourceTree = ""; }; + E81C1B2027705F950020D1E4 /* Api+ArrangeMic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+ArrangeMic.h"; sourceTree = ""; }; + E81C1B2127705F950020D1E4 /* Api+ArrangeMic.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+ArrangeMic.m"; sourceTree = ""; }; + E81C1B242770663B0020D1E4 /* XPArrangeMicTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPArrangeMicTableViewCell.h; sourceTree = ""; }; + E81C1B252770663B0020D1E4 /* XPArrangeMicTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPArrangeMicTableViewCell.m; sourceTree = ""; }; + E81C1B27277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPArrangeMicEmptyTableViewCell.h; sourceTree = ""; }; + E81C1B28277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPArrangeMicEmptyTableViewCell.m; sourceTree = ""; }; + E81C1B2A27706E5C0020D1E4 /* ArrangeMicModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ArrangeMicModel.h; sourceTree = ""; }; + E81C1B2B27706E5C0020D1E4 /* ArrangeMicModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ArrangeMicModel.m; sourceTree = ""; }; + E81C1B2D277071670020D1E4 /* XPArrangeMicInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPArrangeMicInfoModel.h; sourceTree = ""; }; + E81C1B2E277071670020D1E4 /* XPArrangeMicInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPArrangeMicInfoModel.m; sourceTree = ""; }; E81C278826EAFAF60031E639 /* DESEncrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DESEncrypt.h; sourceTree = ""; }; E81C278926EAFAF60031E639 /* Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Base64.m; sourceTree = ""; }; E81C278A26EAFAF60031E639 /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = ""; }; @@ -1835,6 +1857,76 @@ path = UIButton; sourceTree = ""; }; + E81C1B1327705EF00020D1E4 /* ArrangeMic */ = { + isa = PBXGroup; + children = ( + E81C1B1827705F2B0020D1E4 /* Model */, + E81C1B1727705F1F0020D1E4 /* Api */, + E81C1B1627705F190020D1E4 /* View */, + E81C1B1527705F130020D1E4 /* Presenter */, + E81C1B1427705F0A0020D1E4 /* Protocol */, + ); + path = ArrangeMic; + sourceTree = ""; + }; + E81C1B1427705F0A0020D1E4 /* Protocol */ = { + isa = PBXGroup; + children = ( + E81C1B1927705F4B0020D1E4 /* XPArrangeMicProtocol.h */, + ); + path = Protocol; + sourceTree = ""; + }; + E81C1B1527705F130020D1E4 /* Presenter */ = { + isa = PBXGroup; + children = ( + E81C1B1A27705F6B0020D1E4 /* XPArrangeMicPresenter.h */, + E81C1B1B27705F6B0020D1E4 /* XPArrangeMicPresenter.m */, + ); + path = Presenter; + sourceTree = ""; + }; + E81C1B1627705F190020D1E4 /* View */ = { + isa = PBXGroup; + children = ( + E81C1B23277065F70020D1E4 /* Cell */, + E81C1B1D27705F7A0020D1E4 /* XPArrangeMicViewController.h */, + E81C1B1E27705F7A0020D1E4 /* XPArrangeMicViewController.m */, + ); + path = View; + sourceTree = ""; + }; + E81C1B1727705F1F0020D1E4 /* Api */ = { + isa = PBXGroup; + children = ( + E81C1B2027705F950020D1E4 /* Api+ArrangeMic.h */, + E81C1B2127705F950020D1E4 /* Api+ArrangeMic.m */, + ); + path = Api; + sourceTree = ""; + }; + E81C1B1827705F2B0020D1E4 /* Model */ = { + isa = PBXGroup; + children = ( + E81C1B2A27706E5C0020D1E4 /* ArrangeMicModel.h */, + E81C1B2B27706E5C0020D1E4 /* ArrangeMicModel.m */, + E81C1B2D277071670020D1E4 /* XPArrangeMicInfoModel.h */, + E81C1B2E277071670020D1E4 /* XPArrangeMicInfoModel.m */, + ); + path = Model; + sourceTree = ""; + }; + E81C1B23277065F70020D1E4 /* Cell */ = { + isa = PBXGroup; + children = ( + E81C1B242770663B0020D1E4 /* XPArrangeMicTableViewCell.h */, + E81C1B252770663B0020D1E4 /* XPArrangeMicTableViewCell.m */, + E81C1B27277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.h */, + E81C1B28277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.m */, + ); + path = Cell; + sourceTree = ""; + }; E81C278726EAFABF0031E639 /* Security */ = { isa = PBXGroup; children = ( @@ -2522,6 +2614,8 @@ E8AEAED8271413530017FCE0 /* View */ = { isa = PBXGroup; children = ( + E81C1B1327705EF00020D1E4 /* ArrangeMic */, + E8252FEF27688808002B3164 /* RoomRank */, E8A1E4462761F8EA00B294CA /* CandyTree */, E8DEC9962764A51F0078CB70 /* MoreView */, E838D99D275E1B6C0079E0B5 /* AnimationView */, @@ -3232,6 +3326,7 @@ E8C6FFD42754AA87004DC9F0 /* XPNoteView.m in Sources */, E82325F9274E2E42003A3332 /* Api+UserCard.m in Sources */, E82109B026F1D83500FC3319 /* LoginBindPhonePresent.m in Sources */, + E81C1B1F27705F7A0020D1E4 /* XPArrangeMicViewController.m in Sources */, E8B825C726EA0D9A009E8E9F /* LoginVerifCodeProtocol.h in Sources */, E824544E26F5BC1A00BE8163 /* XPMineModifPayPwdView.m in Sources */, E8A03DE22762FA000098D9EA /* XPCandyTreeMoreView.m in Sources */, @@ -3257,6 +3352,7 @@ E87A26FD27587E17002DDC7A /* HomeTagModel.m in Sources */, E8E70D8926F2F58F00F03460 /* XPMineMatchTableViewCell.m in Sources */, E88B5CA826FB089C00DA9178 /* XPMineTeenagePwdViewController.m in Sources */, + E81C1B2F277071670020D1E4 /* XPArrangeMicInfoModel.m in Sources */, E81C279626EB39CC0031E639 /* LoginForgetPasswordPresent.m in Sources */, 18EE3FF42750FA3700A452BF /* UIView+NIM.m in Sources */, E8A03DFF27635F960098D9EA /* XPRoomCandyGiftView.m in Sources */, @@ -3272,6 +3368,7 @@ E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */, E82325E9274CE56A003A3332 /* XPShareItem.m in Sources */, E890BC0D273D09A50007C46B /* XPGiftCountView.m in Sources */, + E81C1B262770663B0020D1E4 /* XPArrangeMicTableViewCell.m in Sources */, E8AC722F26F49610007D6E91 /* XPMineNotificationItemModel.m in Sources */, E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */, E8A1E45B27620F4900B294CA /* XPRoomHalfWebView.m in Sources */, @@ -3321,6 +3418,7 @@ 1808073027315E8E001FD836 /* NetImageView.m in Sources */, 18486235271EB794005FC5DC /* AgoraRtcImpl.m in Sources */, E8A1E454276208E500B294CA /* CandyTreeInfoModel.m in Sources */, + E81C1B1C27705F6B0020D1E4 /* XPArrangeMicPresenter.m in Sources */, 184862CE27213FD7005FC5DC /* ZegoRtcImpl.m in Sources */, 9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */, E8C6FFD027548256004DC9F0 /* XPHomeListCollectionViewCell.m in Sources */, @@ -3404,6 +3502,7 @@ 18F404BB2760982000A6C548 /* ChatLimitModel.m in Sources */, 189DD56526DE465A00AB55B1 /* LoginViewController.m in Sources */, E824544B26F5BBB800BE8163 /* XPMineModifPayPwdViewController.m in Sources */, + E81C1B2227705F950020D1E4 /* Api+ArrangeMic.m in Sources */, E8A1E4512762082A00B294CA /* Api+CandyTree.m in Sources */, E839533C276A0CCD00CF2F24 /* XPMineCarTableViewCell.m in Sources */, E8EEB8FE26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m in Sources */, @@ -3415,6 +3514,7 @@ E8AC723A26F49AAE007D6E91 /* XPMineNotifyStatus.m in Sources */, 18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */, E8AEAEF927141CA30017FCE0 /* RoomHeaderView.m in Sources */, + E81C1B29277069DD0020D1E4 /* XPArrangeMicEmptyTableViewCell.m in Sources */, E8AC721C26F4720B007D6E91 /* XPMineSettingPresent.m in Sources */, E88B5CA526FB088600DA9178 /* XPMineTeenagerViewController.m in Sources */, E8AEAEF027141C430017FCE0 /* XPRoomMenuContainerView.m in Sources */, @@ -3499,6 +3599,7 @@ 189DD53F26DE255600AB55B1 /* main.m in Sources */, E8A03DF927634A590098D9EA /* CandyTreeResultModel.m in Sources */, E872308D26E89DAA00B90D4F /* LoginInputView.m in Sources */, + E81C1B2C27706E5C0020D1E4 /* ArrangeMicModel.m in Sources */, E8788948273A55D000BF1D57 /* XPGiftBarView.m in Sources */, 9BAA5FF0277A23F4007453F3 /* XPPermissionsViewController.m in Sources */, 189DD58F26DF97E700AB55B1 /* LoginPresenter.m in Sources */, diff --git a/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/Contents.json b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/Contents.json new file mode 100644 index 00000000..bef052f2 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "room_menu_arrange_mic@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "room_menu_arrange_mic@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/room_menu_arrange_mic@2x.png b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/room_menu_arrange_mic@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6bb1868d7f016c29e908ec1aae2cb865da24f835 GIT binary patch literal 966 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw3=&b&bO2Hn0X`wFK>GhcfMYA3tO44sUJ~RN z%%G=jsG&CHWNff^nOS;$RnC)?PgxTYo0ES zAs)xKUVmA(SV4jtD{jMipUVd-vdhm8R;|_)X zs(G*7qY^Gu$Uk4LYS0^4y?nXw-t8KGikbWE7CEwN*KBI~*?w^UOH;??cNaYQHShc6 zCG|ZXc3f<>>dtomDfRp&!Ko&ZWZjhgouOY+ZNHK&dS8G~0QN+-ZFCb~sg=UD&idP&J3Y zcbRDE&WjdrEZ-T0?g+hhE#vB{l52%NA69=jBxiU2#IdfkYHc}Nypruwd#`<+>DcHj z<|LM<5i@!7oO;{&=eu9+{^+plCU3dGGp6SPLVeC5zEJ%N8`D5gbHQX z?%d#5Gh2;IrEg=nLg(q{_HA6#XFQ%Xb7s7RXxuHYo{Ig``~0`sJxiFFtateNg3IE0 z!S4&VACqxyZnNI~_GRmP{`Je)mic7w=B^MgQ|rupd-nBIChcc|GeR8$9Oo4^Xx;89 zG|R5oWpnUa8K2_z^Dz-}Clwe}mIZ9>Wsy~~4-i&cE5{OYJL^z}%V-=#qWV*T(RZe`@u8{kYFO;05<6IIo-M}iys_dK6Gd*W_aR>e1`q?{??U(dNs^;LBgSN9|{g@N^URZT;-#>yB?fbKLy3R_(`sGXlQ6 z=ht}hoSEzAgPO@_tKAn{a@YL~Sk~A4GQv5cKfkZJo-t}^+@VD-2AhDHg2B_(&t;uc GLK6V6tO8vC literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/room_menu_arrange_mic@3x.png b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic.imageset/room_menu_arrange_mic@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..28958c270e8f6d74eb6e0dad182b5ef0e31a9d0f GIT binary patch literal 2028 zcmdUw`9Bkk1IL#qzLQ4ImYl6(j>*lQhhj!6AtU#Lay=pp&2mM{9>;pNIUZy=HrM0` zPp+J0mN~ZE)Psk%RZ>XK=JEU)-_Psy`MiJnyk4K*KIu*lcA#U5#{d8T2zA-U`H-If z8Tiv-O5J^S;SkT9>|KzDJovv-OFpLPa5Ox|*#QmE)zi|@Kf6~DmlU6;?rol~@}S7( z>y~?Tu?diT{TeF7)>77Akv;7y01;Cn=}T`{THjPhuzDNPVmJSh0RY4rP&QUB?k|T6 z(kW#ZPNadv$$KYk0s+#2uQokLsjv4gPM^oH-V0R1K1YP-R#SH>#&*VxP+vqlhsm|X z|2?_skzoqHZBp31DNMCDCCjr7#V9(?uix~1)j>LVZ%DNXx6B{;MDfEL!U8dEgG(MEK#H*D zt7$xhmEyo3wU8Sosj&K(!g6C|nc7Z*>|6Xs*V!!Yr?$&-h$Zv98I7A4`);REUgXQG zK}#jCcyr2Rlm(?{QruYR{(OwL>^^uT3XLeR^zA0A*_M-fPil#(r1uG4hmH)0uraxN zMI#2VEWR)0gKBV>X3shJkY&O8f$j_I%AXIkf&ydaRTs{^!*Va?rTDHg3Q0Bx5Snsf0A$p|D}Ar#U* zQUSQ0LTp#BrSX^fDb4J&O}hf73Xu1bIV<7wB1U8>9n_INyZl&M185h zkEZO?nzTvKvz1F;?f_xbkZ$NOYE`DAIqh`yg>TWAY@eo<=C*n|YG;$YR=gFMV8s=45%~R~&6CNG7TL7@5Irl1FCZm71rGJQmjO z|B_Rc$7v@w{AjF=gM$-KG!|Q7J0B;QL1)b!&Ub(w6P|yZN8+}6tzNzli}+Aipsl#@ z#mZ5M@FN2f1{?!X8G6rJA--%Q110Na>AiM$9oxG&bzBK_L!~iQM)9~I$KTB^TNy#C zHAV$0Lw6ynwNS-8PRhf3hNEKTE_#L|9myCa4ZE!mTZyUCeTPk&=XYR3r-!3qnZdmn zOY|88j|3X3GP8yhoCnXY z3g~j?r-?Xst4|N2BGlFbjV6W@LbR?l8Vu2F0hjWmG_T?92X&`Xb3^|@R%P+Ztwyuk z6q-M*?z!OVlo?}k5cFLZ1UKCx%dlQ z(w?htrdHp+bs0rNa))%4LLcsb7-%F{3on$ItcgjQyGFjvAGm{6ke0up&*XixVd3&Z z2Ln35rSSH`69Sbci)daoqM{A)Mv;Od=I>BneyyAMO{AJ3UJZi`-hCB%1Pp0?EG6&! zPL&R|BWwmfEtHy#$AAq8eq%DK^^E<#7nj*RI|+ zta5H@OrwYKJa}iK&+G3|IK(s~^z(Iqfe~;2?AicfNd18tD#$DmZtGr-1J)&Cyw-$C z4_xvDOj?N$fZ!BeFzN&Uspb2W@sSud!q>;w-Ofj38{X)Q zdnpx$R5-rkn3c&+Ws#Y@uzjLaXJY&Gr*LKx{ z!ChaONXj!>vWL%u6>e${2^Z(XQ{(5l=i4JXk{9E$h2L*ezD>So`)t+IExb7JIP&W5 zW;X%PEA77;YSA2*G)@`gp5&`LKJtWHs(no9j(sZH{&Ut|rQPpOBe9WRXWm7HZxM!u zX=~OEyU-N&42l0vS%AfYxHIojST{?mw+r#O`pzVGvk;iP=In&~?CezfXX*jlH7NLG t!^3fnDdqt`5F3TOsO`%g{k5a)KwKgd%DeO%`o9MRppXtWb=H2V{{m!}KSBTi literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/Contents.json b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/Contents.json new file mode 100644 index 00000000..ef464cdc --- /dev/null +++ b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "room_menu_arrange_mic_new@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "room_menu_arrange_mic_new@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/room_menu_arrange_mic_new@2x.png b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/room_menu_arrange_mic_new@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..51373fd0f5757ba415fe4ce7d09b01452e599bd5 GIT binary patch literal 1104 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw3=&b&bO2Iw0(?STf%JcB0fTUIOtMM(KYi7I zyX5~1kf+^mTnrYK$B2^#GrgNLxXcJ+qT{`|a`meJM5a)I|mcW+P7*#}JR>Td%(?TVx=? zmf+%~(6S*v>2B^-J>!>m{_j0|d{V2{V!3mB_P?;K{j*6>=y6$)@ojNKyZMDNZ;Xvi z<<7nCV%hpW^|;K!KRZ7Cu~Jxly?uo*v%Rx#TJEjmXZTmt&YyH4`Or#*BYP(NnY~_r zp}JRG;giebxwWl&uEf6&{rc0;S?=YUwOrcP zi}tU|_xQ@V^sQL1zgg5p!GHhmJ`?u3To%jblaP44^y)({vC0i>F+r)}k1MQ?7`u2M zP?`MW$m3(jY`*=xx#^AB+@m(zwxltiOE_`KLA1;w@0Hb^gLhtPlB@}j&M`?crWS{GFw{Ic{O4zA==%i5>&42SS^F%GWd4^fm@IxlU*LMFc+KN&Cw(^t zOtVhbR6FHkp>mK*J^BEr{Ii@{w%?|?ZFH(#y;tE;chQaXjO{OqFWHKu#Y?T_Qnp*= z*=85L^mU#|%)TvwXUkaU$tE*DXP#5M_U6)D>p$r+jm0^0CiW?E72n@h%j0Pl;o5s6 z^6&){j@GpA!K~ZPHo31mac#=kw8pG$>_S${cxP;>vI#bg=8c$_qa^+V4>Ey5#Bp>}C7c=j%Ctf4$4y^~l+4&HoD1OZus+lh54< po^Dhs8zW}O$0Q?u`r_*c@m5>P3RiZ_Rsd!_22WQ%mvv4FO#lVdQ>*|0 literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/room_menu_arrange_mic_new@3x.png b/xplan-ios/Assets.xcassets/Room/Menu/room_menu_arrange_mic_new.imageset/room_menu_arrange_mic_new@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..76621d4fcf1141439aca662255859a33a4e193ac GIT binary patch literal 2465 zcmds3=U3B-5)I9O5I|4_R2H6ef|Mtn7$GDOMVg@`5Jc&{cd*cnGzo%%U?M$q1%iko zuyjNzp@ymyvk0hw6oKEm=e#fbFT6Qt=AOCt+z)p?%|i<_W5`MIlOPZXf;KU-`i;1M znw#VI6bO5v3Iee~Ele@U-z)I{Q6tlf=o_Wawlw~}ms5z9*-em&vXY#t zg1V$MDK_E=Nsf=oF}dKlNwGK8)j0V$<=*ZUZH|MfY=V2JWq(4DaGG7f9h<)}TPtES z=D+w)lok1ZVrW87^|aFmn(I9EKeSXL=62WAjvmEc|Mi0r66oI@bA=BC0(YW~3@~uybBgJJG?=IrK#&#&Y8+Yc?Ma|aAQI$MzUfm@zjTKelWcnJA+woyG&yEo`Z z+E=J#ZA%MkV-jI=0_@+0RY0`Vw^-3FY@JkB2@cu?i-u>hN?-ergU;!b(^bMpDvQl# zC4LZn12(R~rXFVe9C53=?@%W(m&$SWOwGWZo5@uW$2p&#f~#*89F=fu6YaX#^p_t_ z?6le}5+tU$K)Fm4%bSNTa*RupMa!>cS_Yfi+m!-aiJDniKjO_QITxa^dG2o^2DEAP zv6g7>nUN*YWg=q=vM{ShK(rg9pz|NS1DZV^C+0@#;dWVLJzGuwlvs+;Ij{Xa%JT=W z8(0`Dj+794z&c!oeylO6#bXHIk9S%!y)WiyK@YbH{qLW#b60zS2FkVl^U6vf*r7k} zqW0OS7DmfDFxtrXl(hxsB;%nzEQ95KpT94m@7j<^jw>l%>q*d#Z0W60DNk^Js)QCK zGtKj{L+uC8u|R2bb7gUTMOEn#Lp{%#j<1+<8NCBjH5MZB9+Xf;8Z9gMyylFaPK{3V z8GgxeVRo|wUP?cPf<@uB?m_$fAMmZZ9U0yIcbsqHwpKTk`-RIm0W-*v-Xz(o0pW4tZU+ zyXg$pD!V1|V(OOe^Vt>xB2+G8bSv7Aa!;3w;n$F4Pa-r52w#@pz&joGW)2()Z+^-g zUgZ6#*Y{`%c3AXz9huJ4tUVBW{NrGdxs_pSRC;-)Ns;tlra52Zmqe*%nX`pB{!xp( zWxJxan($chiO^l#QhVO!%e_Qa$iYT-FC(d~>7#m2-JvdK*z+&MwaiJPlpRe2M`?w&b5lYF_H#8T%J}>!^^>t86gMj7M zkp9n`(;Dj7H*WaY3*n362mfo0VTcRN6>BJ>w5B??| z%YgHY%61M1E3xhdjR}4U>t=LGD_3SEdj|CkS77O(NUKFE>Q1CoYaLYCOc|~)fW|Qf z;Z?azzv-)jNnG`6dN;hRB0qCNWt_O4SRs}I)Fnwzd9QkLEkO>C&4(|9sj1SkdDVr^ z<_wk1PU#%NjdM#?oP*!((RxFjHOxnE8G^4FVH&%3V^&`~p7KjE1R*GLoN+t7WSwd% zW^O?n;iA^yN+jG{qI5Z9$gsto1@r!4;(Cx!om} zbeU*)ZJa9A!*6G`L%7X8NlUjsR!epaWjR5o9NCRrE7CVd}ceg zEg-hMTl2Q?QHfNC4z7}1;Z#ZW8IBkeEIf~djcD);tlLyw8`*e zf(gb39#!rK4Bvt^4&6vK;`Q*KFQ-Ga1x(AAAp_1ZG zL)u9rv=p>ClW58r9GYeVKb#3YziKQMr|@Z@SWk`^lJTxT!0zQ>gWCCArgZwas58-r zp`sD)emD31Y*$V;k!KJ}(;N}V759wx@GGYIw$2?h1%YnlpaHKqf8$WpeQvg= +#import "XPEnum.h" +NS_ASSUME_NONNULL_BEGIN +@class ArrangeMicUserModel; +@interface ArrangeMicModel : NSObject +///参与排麦人数 +@property (nonatomic, strong) NSString * count; +///我的排麦位置 +@property (nonatomic, strong) NSString * myPos; +///排麦的人 +@property (nonatomic,copy) NSArray *queue; +@end + +@interface ArrangeMicUserModel : NSObject +///uid +@property (nonatomic,copy) NSString * uid; +///性别 +@property (nonatomic,assign) GenderType gender; +///头像 +@property (nonatomic,copy) NSString *avatar; +///名字 +@property (nonatomic,copy) NSString *nick; + +///当前的编号 +@property (nonatomic,assign) NSInteger number; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/ArrangeMic/Model/ArrangeMicModel.m b/xplan-ios/Main/Room/View/ArrangeMic/Model/ArrangeMicModel.m new file mode 100644 index 00000000..5420707a --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/Model/ArrangeMicModel.m @@ -0,0 +1,23 @@ +// +// ArrangeMicModel.m +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "ArrangeMicModel.h" + +@implementation ArrangeMicModel + ++ (NSDictionary *)objectClassInArray { + return @{@"queue":ArrangeMicUserModel.class}; +} + +@end + + +@implementation ArrangeMicUserModel + + + +@end diff --git a/xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.h b/xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.h new file mode 100644 index 00000000..54584103 --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.h @@ -0,0 +1,24 @@ +// +// XPArrangeMicInfoModel.h +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import +#import "MicroQueueModel.h" +#import "MicroStateModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface XPArrangeMicInfoModel : NSObject +///房间id +@property (nonatomic,copy) NSString *roomId; +///房主的uid +@property (nonatomic,copy) NSString *roomUid; +///需要抱上麦的 +@property (nonatomic, strong) NSMutableDictionary *micQueue; +///用户类型 +@property (nonatomic,assign) BOOL isManager; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.m b/xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.m new file mode 100644 index 00000000..9f09a647 --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/Model/XPArrangeMicInfoModel.m @@ -0,0 +1,12 @@ +// +// XPArrangeMicInfoModel.m +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "XPArrangeMicInfoModel.h" + +@implementation XPArrangeMicInfoModel + +@end diff --git a/xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.h b/xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.h new file mode 100644 index 00000000..2994563d --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.h @@ -0,0 +1,28 @@ +// +// XPArrangeMicPresenter.h +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "BaseMvpPresenter.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPArrangeMicPresenter : BaseMvpPresenter + +/// 获取房间排麦列表 +/// @param roomUid 房主的uid +/// @param page 当前的页数 +/// @param pageSize 一页的个数 +/// @param state 顶部刷新还是尾部刷新 +- (void)getRoomArrangeMicList:(NSString *)roomUid page:(int)page pageSize:(int)pageSize state:(int)state; +/// 申请排麦 +/// @param roomUid 房主的uid +- (void)applyRoomArrangeMic:(NSString *)roomUid; +/// 取消申请排麦 +/// @param roomUid 房主的uid +- (void)cancelRoomArrangeMic:(NSString *)roomUid; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.m b/xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.m new file mode 100644 index 00000000..bac85b43 --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/Presenter/XPArrangeMicPresenter.m @@ -0,0 +1,50 @@ +// +// XPArrangeMicPresenter.m +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "XPArrangeMicPresenter.h" +#import "Api+ArrangeMic.h" +#import "AccountInfoStorage.h" +#import "ArrangeMicModel.h" +#import "XPArrangeMicProtocol.h" + +@implementation XPArrangeMicPresenter + + +/// 获取房间排麦列表 +/// @param roomUid 房主的uid +/// @param page 当前的页数 +/// @param pageSize 一页的个数 +/// @param state 顶部刷新还是尾部刷新 +- (void)getRoomArrangeMicList:(NSString *)roomUid page:(int)page pageSize:(int)pageSize state:(int)state { + NSString * uid = [AccountInfoStorage instance].getUid; + NSString * pageStr = [NSString stringWithFormat:@"%d", page]; + NSString * pageSizeStr = [NSString stringWithFormat:@"%d", pageSize]; + [Api getRoomArrangeMicList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + ArrangeMicModel * model = [ArrangeMicModel modelWithDictionary:data.data]; + [[self getView] getRoomArrangeMicListSuccess:model state:state]; + } showLoading:YES] roomUid:roomUid operUid:uid page:pageStr pageSize:pageSizeStr]; +} + +/// 申请排麦 +/// @param roomUid 房主的uid +- (void)applyRoomArrangeMic:(NSString *)roomUid { + NSString * uid = [AccountInfoStorage instance].getUid; + [Api applyArrangeMic:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] applyArrangeMicSuccess]; + } showLoading:YES] roomUid:roomUid operUid:uid groupType:@"0"]; +} + +/// 取消申请排麦 +/// @param roomUid 房主的uid +- (void)cancelRoomArrangeMic:(NSString *)roomUid { + NSString * uid = [AccountInfoStorage instance].getUid; + [Api cancelArrangeMic:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView] cancelArrangeMicSuccess]; + } showLoading:YES] roomUid:roomUid operUid:uid groupType:@"0"]; +} + +@end diff --git a/xplan-ios/Main/Room/View/ArrangeMic/Protocol/XPArrangeMicProtocol.h b/xplan-ios/Main/Room/View/ArrangeMic/Protocol/XPArrangeMicProtocol.h new file mode 100644 index 00000000..de30b4a5 --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/Protocol/XPArrangeMicProtocol.h @@ -0,0 +1,22 @@ +// +// XPArrangeMicProtocol.h +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class ArrangeMicModel; +@protocol XPArrangeMicProtocol +///获取排麦列表 +- (void)getRoomArrangeMicListSuccess:(ArrangeMicModel *)listModel state:(int)state; +///申请排麦成功 +- (void)applyArrangeMicSuccess; +///取消排麦成功 +- (void)cancelArrangeMicSuccess; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.h b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.h new file mode 100644 index 00000000..ec08d2fe --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.h @@ -0,0 +1,17 @@ +// +// XPArrangeMicEmptyTableViewCell.h +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPArrangeMicEmptyTableViewCell : UITableViewCell +///空白的文案 +@property (nonatomic,copy) NSString *emptyTitle; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.m b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.m new file mode 100644 index 00000000..c52e9d58 --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicEmptyTableViewCell.m @@ -0,0 +1,80 @@ +// +// XPArrangeMicEmptyTableViewCell.m +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "XPArrangeMicEmptyTableViewCell.h" +///Third +#import +///Tool +#import "ThemeColor.h" +#import "UIImageConstant.h" + +@interface XPArrangeMicEmptyTableViewCell () +@property (nonatomic,strong) UIImageView *emptyImageView; +@property (nonatomic,strong) UILabel *titleLabel; +@end + +@implementation XPArrangeMicEmptyTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.selectionStyle = UITableViewCellSelectionStyleNone; + [self.contentView addSubview:self.emptyImageView]; + [self.contentView addSubview:self.titleLabel]; +} + +- (void)initSubViewConstraints { + [self.emptyImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.mas_equalTo(self.contentView); + make.top.mas_equalTo(self.contentView).offset(50); + make.size.mas_equalTo(CGSizeMake(100, 100)); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.emptyImageView.mas_bottom).offset(20); + make.left.right.mas_equalTo(self.contentView); + }]; +} +#pragma mark - Getters And Setters +- (void)setEmptyTitle:(NSString *)emptyTitle { + _emptyTitle = emptyTitle; + if (_emptyTitle.length > 0) { + self.titleLabel.text = _emptyTitle; + } +} + +- (UIImageView *)emptyImageView { + if (!_emptyImageView) { + _emptyImageView = [[UIImageView alloc] init]; + _emptyImageView.userInteractionEnabled = YES; + _emptyImageView.image = [UIImageConstant defalutEmptyPlaceholder]; + _emptyImageView.layer.masksToBounds = YES; + _emptyImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _emptyImageView; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.text = @"暂无数据"; + _titleLabel.numberOfLines = 2; + _titleLabel.font = [UIFont systemFontOfSize:16]; + _titleLabel.textAlignment = NSTextAlignmentCenter; + _titleLabel.textColor = [ThemeColor secondTextColor]; + } + return _titleLabel; +} + +@end diff --git a/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.h b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.h new file mode 100644 index 00000000..ea77eaa6 --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.h @@ -0,0 +1,26 @@ +// +// XPArrangeMicTableViewCell.h +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class XPArrangeMicTableViewCell, ArrangeMicUserModel; +@protocol XPArrangeMicTableViewCellDelegate + +- (void)xPArrangeMicTableViewCell:(XPArrangeMicTableViewCell *)view inviteUser:(NSString *)uid; + +@end +@interface XPArrangeMicTableViewCell : UITableViewCell +///是否是管理 +@property (nonatomic,assign) BOOL isManager; +///代理 +@property (nonatomic,weak) id delegate; +///用户信息 +@property (nonatomic,strong) ArrangeMicUserModel *userInfo; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.m b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.m new file mode 100644 index 00000000..fda6a194 --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/View/Cell/XPArrangeMicTableViewCell.m @@ -0,0 +1,155 @@ +// +// XPArrangeMicTableViewCell.m +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "XPArrangeMicTableViewCell.h" +///Third +#import +///Tool +#import "ThemeColor.h" +#import "NetImageView.h" +#import "UIImage+Utils.h" +///Model +#import "ArrangeMicModel.h" +@interface XPArrangeMicTableViewCell() +///排名 +@property (nonatomic, strong) UILabel * rankLabel; +///头像 +@property (nonatomic, strong) NetImageView * avaratImageView; +///名称 +@property (nonatomic, strong) UILabel * nameLabel; +///性别 +@property (nonatomic,strong) UIImageView *sexImageView; +///排麦中 +@property (nonatomic, strong) UIButton * arrangeMicButton; +@end + +@implementation XPArrangeMicTableViewCell +#pragma mark - life cycle +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self initView]; + [self initConstrations]; + } + return self; +} + +#pragma mark - private method +- (void)initView{ + self.backgroundColor = [UIColor clearColor]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + [self.contentView addSubview:self.rankLabel]; + [self.contentView addSubview:self.avaratImageView]; + [self.contentView addSubview:self.nameLabel]; + [self.contentView addSubview:self.sexImageView]; + [self.contentView addSubview:self.arrangeMicButton]; +} + +- (void)initConstrations{ + [self.rankLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.contentView); + make.left.mas_equalTo(self.contentView).offset(15); + make.width.height.mas_equalTo(20); + }]; + + [self.avaratImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.width.mas_equalTo(46); + make.centerY.mas_equalTo(self.contentView); + make.left.mas_equalTo(self.rankLabel.mas_right).offset(13); + }]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.avaratImageView.mas_right).offset(10); + make.centerY.mas_equalTo(self.contentView); + }]; + + [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(12, 12)); + make.left.mas_equalTo(self.nameLabel.mas_right).offset(2); + make.centerY.mas_equalTo(self.nameLabel); + }]; + + [self.arrangeMicButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(69); + make.height.mas_equalTo(25); + make.right.mas_equalTo(self.contentView).offset(-15); + make.centerY.mas_equalTo(self.contentView); + }]; +} + +#pragma mark - Event Response +- (void)arrangeMicButtonAction:(UIButton *)sender { + if (self.isManager && self.delegate && [self.delegate respondsToSelector:@selector(xPArrangeMicTableViewCell:inviteUser:)]) { + [self.delegate xPArrangeMicTableViewCell:self inviteUser:self.userInfo.uid]; + } +} + +#pragma mark - setters and getters +- (void)setUserInfo:(ArrangeMicUserModel *)userInfo { + _userInfo = userInfo; + if (_userInfo) { + self.nameLabel.text= _userInfo.nick; + self.avaratImageView.imageUrl = _userInfo.avatar; + self.rankLabel.text = [NSString stringWithFormat:@"%ld", _userInfo.number]; + if (self.isManager) { + [self.arrangeMicButton setTitle:@"抱上麦" forState:UIControlStateNormal]; + [self.arrangeMicButton setTitleColor:[ThemeColor confirmButtonTextColor] forState:UIControlStateNormal]; + [self.arrangeMicButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[ThemeColor confirmButtonGradientStartColor], [ThemeColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; + }else { + [self.arrangeMicButton setTitle:@"排麦中" forState:UIControlStateNormal]; + [self.arrangeMicButton setTitleColor:[ThemeColor disableButtonTextColor] forState:UIControlStateNormal]; + [self.arrangeMicButton setBackgroundImage:[UIImage imageWithColor:[ThemeColor disableButtonColor]] forState:UIControlStateNormal]; + } + } +} + +- (UILabel *)rankLabel{ + if (!_rankLabel) { + _rankLabel = [[UILabel alloc] init]; + _rankLabel.textColor = [ThemeColor mainTextColor]; + _rankLabel.font = [UIFont systemFontOfSize:13]; + _rankLabel.backgroundColor = [ThemeColor appMainColor]; + _rankLabel.textAlignment = NSTextAlignmentCenter; + _rankLabel.layer.masksToBounds = YES; + _rankLabel.layer.cornerRadius = 10; + } + return _rankLabel; +} + + +- (UILabel *)nameLabel{ + if (!_nameLabel) { + _nameLabel = [[UILabel alloc] init]; + _nameLabel.textColor = [ThemeColor mainTextColor]; + _nameLabel.font = [UIFont systemFontOfSize:15]; + _nameLabel.textAlignment = NSTextAlignmentLeft; + } + return _nameLabel; +} + +- (UIButton *)arrangeMicButton{ + if (!_arrangeMicButton) { + _arrangeMicButton = [UIButton buttonWithType:UIButtonTypeCustom];; + _arrangeMicButton.titleLabel.font = [UIFont systemFontOfSize:13]; + _arrangeMicButton.layer.masksToBounds = YES; + _arrangeMicButton.layer.cornerRadius = 25/ 2; + [_arrangeMicButton addTarget:self action:@selector(arrangeMicButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _arrangeMicButton; +} + +- (NetImageView *)avaratImageView{ + if (!_avaratImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserIcon; + _avaratImageView = [[NetImageView alloc] initWithConfig:config]; + _avaratImageView.layer.masksToBounds = YES; + _avaratImageView.layer.cornerRadius = 23; + } + return _avaratImageView; +} +@end diff --git a/xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.h b/xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.h new file mode 100644 index 00000000..5889d3fe --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.h @@ -0,0 +1,18 @@ +// +// XPArrangeMicViewController.h +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "MvpViewController.h" +#import "XPArrangeMicInfoModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface XPArrangeMicViewController : MvpViewController + +- (instancetype)initWithInfo:(XPArrangeMicInfoModel *)info; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.m b/xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.m new file mode 100644 index 00000000..4e17ba2e --- /dev/null +++ b/xplan-ios/Main/Room/View/ArrangeMic/View/XPArrangeMicViewController.m @@ -0,0 +1,393 @@ +// +// XPArrangeMicViewController.m +// xplan-ios +// +// Created by 冯硕 on 2021/12/20. +// + +#import "XPArrangeMicViewController.h" +///Third +#import +#import +#import +///Tool +#import "TTPopup.h" +#import "ThemeColor.h" +#import "XPMacro.h" +#import "UIImage+Utils.h" +///Model +#import "ArrangeMicModel.h" +#import "AttachmentModel.h" +///View +#import "XPArrangeMicEmptyTableViewCell.h" +#import "XPArrangeMicTableViewCell.h" +///P +#import "XPArrangeMicPresenter.h" +#import "XPArrangeMicProtocol.h" + +@interface XPArrangeMicViewController () +///点击消失 +@property (nonatomic,strong) UIView * topView; +///内容区域 +@property (nonatomic,strong) UIView * contentView; +///显示标题 +@property (nonatomic,strong) UILabel *titleLabel; +///分割线 +@property (nonatomic,strong) UIView * lineView; +///列表 +@property (nonatomic,strong) UITableView *tableView; +///立即邀请或者点击报名 +@property (nonatomic,strong) UIButton *applyButton; +///数据源 +@property (nonatomic,strong) NSMutableArray *datasource; +///当前页数 +@property (nonatomic,assign) int page; +///是否有更多数据 +@property (nonatomic,assign) BOOL hasNoMoreData; +///需要的用户信息 +@property (nonatomic,strong) XPArrangeMicInfoModel *userInfo; +///排麦的信息 +@property (nonatomic,strong) ArrangeMicModel *arrangeMicInfo; +@end + +@implementation XPArrangeMicViewController + +- (void)dealloc { + [[NIMSDK sharedSDK].chatManager removeDelegate:self]; +} + +- (XPArrangeMicPresenter *)createPresenter { + return [[XPArrangeMicPresenter alloc] init]; +} + +- (instancetype)initWithInfo:(XPArrangeMicInfoModel *)info { + if (self = [super init]) { + self.modalPresentationStyle = UIModalPresentationOverFullScreen; + self.userInfo = info; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [[NIMSDK sharedSDK].chatManager addDelegate:self]; + [self initHeaderAndFooterRrfresh]; + [self initSubViews]; + [self initSubViewConstraints]; + [self configDefaultData]; + [self headerRefresh]; + +} +#pragma mark - 下拉刷新 +- (void)initHeaderAndFooterRrfresh { + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; + header.stateLabel.font = [UIFont systemFontOfSize:10.0]; + header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; + header.stateLabel.textColor = [ThemeColor secondTextColor]; + header.lastUpdatedTimeLabel.textColor = [ThemeColor secondTextColor]; + self.tableView.mj_header = header; + + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)]; + footer.stateLabel.textColor = [ThemeColor secondTextColor]; + footer.stateLabel.font = [UIFont systemFontOfSize:10.0]; + self.tableView.mj_footer = footer; +} + +#pragma mark - 刷新的fangfa +- (void)headerRefresh { + self.page = 1; + [self.presenter getRoomArrangeMicList:self.userInfo.roomUid page:self.page pageSize:20 state:0]; +} + +- (void)footerRefresh { + if (self.hasNoMoreData) { + [self showErrorToast:@"没有更多数据了"]; + return; + } + self.page++; + [self.presenter getRoomArrangeMicList:self.userInfo.roomUid page:self.page pageSize:20 state:1]; +} + + +#pragma mark - Private Method +- (void)configDefaultData { + if (self.userInfo.isManager) { + [self.applyButton setTitle:@"立即邀请" forState:UIControlStateNormal]; + } else { + [self.applyButton setTitle:@"点击报名" forState:UIControlStateNormal]; + } +} + +- (void)initSubViews { + self.view.backgroundColor = [UIColor clearColor]; + [self.view addSubview:self.topView]; + [self.view addSubview:self.contentView]; + + [self.contentView addSubview:self.titleLabel]; + [self.contentView addSubview:self.lineView]; + [self.contentView addSubview:self.tableView]; + [self.contentView addSubview:self.applyButton]; +} + +- (void)initSubViewConstraints { + [self.topView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.bottom.mas_equalTo(self.contentView.mas_top); + }]; + + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.mas_equalTo(self.view); + make.height.mas_equalTo(450); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.contentView); + make.height.mas_equalTo(44); + }]; + + [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.view); + make.top.mas_equalTo(self.titleLabel.mas_bottom); + make.height.mas_equalTo(1); + }]; + + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.mas_equalTo(self.contentView); + make.top.mas_equalTo(self.lineView.mas_bottom); + }]; + + [self.applyButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.view).inset(45); + make.height.mas_equalTo(38); + make.bottom.mas_equalTo(self.view).offset(-kSafeAreaBottomHeight - 20); + }]; +} + +- (NSMutableAttributedString *)createArrangeMicNavTitleWith:(NSString *)count{ + if (self.datasource.count == 0) { + if (self.userInfo.isManager) { + NSMutableAttributedString *attributString = [[NSMutableAttributedString alloc] initWithString:@"当前无人排麦" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[ThemeColor mainTextColor]}]; + return attributString; + }else{ + NSMutableAttributedString *attributString = [[NSMutableAttributedString alloc] initWithString:@"报名才能排麦哦~" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[ThemeColor mainTextColor]}]; + return attributString; + } + }else{ + if (self.userInfo.isManager) { + NSString * str = [NSString stringWithFormat:@"当前排麦的人数:%@", count]; + + NSMutableAttributedString *attributString = [[NSMutableAttributedString alloc] initWithString:str attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[ThemeColor mainTextColor]}]; + [attributString addAttribute:NSForegroundColorAttributeName value:[ThemeColor appEmphasizeColor] range:[str rangeOfString:count]]; + return attributString; + }else{ + if ([count intValue] > 0) { + count = count.length > 0 ? count : @"0"; + NSString * str = [NSString stringWithFormat:@"我在队列中排列位置:%ld", [count integerValue]]; + NSMutableAttributedString *attributString = [[NSMutableAttributedString alloc] initWithString:str attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[ThemeColor mainTextColor]}]; + [attributString addAttribute:NSForegroundColorAttributeName value:[ThemeColor appEmphasizeColor] range:[str rangeOfString:count]]; + return attributString; + }else{ + NSMutableAttributedString *attributString = [[NSMutableAttributedString alloc] initWithString:@"报名才能排麦哦~" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16], NSForegroundColorAttributeName:[ThemeColor mainTextColor]}]; + return attributString; + } + + } + } +} +#pragma mark - NIMChatManagerDelegate +- (void)onRecvMessages:(NSArray *)messages { + for (NIMMessage * message in messages) { + // 非房间内消息不处理 + if (message.session.sessionType != NIMSessionTypeChatroom) { + continue; + } + // 非本房间不处理 + if (![message.session.sessionId isEqualToString:self.userInfo.roomId]) { + continue; + } + if (message.messageType == NIMMessageTypeCustom) { + NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; + if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { + AttachmentModel * attachment = obj.attachment; + if (attachment.first == CustomMessageType_Arrange_Mic) { + switch (attachment.second) { + case Custom_Message_Sub_Arrange_Mic_Non_Empty: + case Custom_Message_Sub_Arrange_Mic_Empty: + [self headerRefresh]; + break; + case Custom_Message_Sub_Arrange_Mic_Mode_Close: + [self dismissViewControllerAnimated:YES completion:nil]; + break; + + default: + break; + } + } + } + } + } +} + +#pragma mark - XPArrangeMicProtocol +- (void)getRoomArrangeMicListSuccess:(ArrangeMicModel *)listModel state:(int)state{ + self.arrangeMicInfo = listModel; + if (state == 0) { + [self.datasource removeAllObjects]; + [self.tableView.mj_header endRefreshing]; + } else { + [self.tableView.mj_footer endRefreshing]; + } + if (listModel.queue.count > 0) { + self.hasNoMoreData = NO; + [self.datasource addObjectsFromArray:listModel.queue]; + } else { + self.hasNoMoreData = YES; + [self.tableView.mj_footer endRefreshingWithNoMoreData]; + } + [self.tableView reloadData]; + + if (!self.userInfo.isManager && listModel.myPos.integerValue > 0) { + [self.applyButton setTitle:@"取消报名" forState:UIControlStateNormal]; + } + self.titleLabel.attributedText = [self createArrangeMicNavTitleWith:listModel.count]; + self.titleLabel.textAlignment = NSTextAlignmentCenter; +} + +- (void)applyArrangeMicSuccess { + [self headerRefresh]; +} + +- (void)cancelArrangeMicSuccess { + [self headerRefresh]; +} +#pragma mark - XPArrangeMicTableViewCellDelegate +- (void)xPArrangeMicTableViewCell:(XPArrangeMicTableViewCell *)view inviteUser:(NSString *)uid { + +} +#pragma mark - UITableViewDelegate And UITableViewDataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.datasource.count > 0 ? self.datasource.count : 1; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + if (self.datasource.count > 0) { + XPArrangeMicTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPArrangeMicTableViewCell class])]; + if (cell == nil) { + cell = [[XPArrangeMicTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPArrangeMicTableViewCell class])]; + } + ArrangeMicUserModel * userInfo = [self.datasource objectAtIndex:indexPath.row]; + cell.isManager = self.userInfo.isManager; + userInfo.number = indexPath.row + 1; + cell.userInfo = userInfo; + return cell; + } + + XPArrangeMicEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPArrangeMicEmptyTableViewCell class])]; + if (cell == nil) { + cell = [[XPArrangeMicEmptyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPArrangeMicEmptyTableViewCell class])]; + } + cell.emptyTitle = self.userInfo.isManager ? @"冷冷清清的无人排麦哦~\n分享房间邀请好友加入一起嗨" : @"立即报名,你就是排麦第一人啦!"; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; +} + +#pragma mark - Event Response +- (void)applyButtonAction:(UIButton *)sender { + if (self.userInfo.isManager) { + //TODO: 邀请好友 + } else { + if (self.arrangeMicInfo.myPos.integerValue > 0) { + [TTPopup alertWithMessage:@"取消报名后再次报名需要重新排麦哦!确认取消报名吗?" confirmHandler:^{ + [self.presenter cancelRoomArrangeMic:self.userInfo.roomUid]; + } cancelHandler:^{ + }]; + } else { + [self.presenter applyRoomArrangeMic:self.userInfo.roomUid]; + } + } +} + +- (void)disMissArrangeMicRecognizer { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark - Getters And Setters +- (UIView *)topView { + if (!_topView) { + _topView = [[UIView alloc] init]; + _topView.backgroundColor = [UIColor clearColor]; + UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(disMissArrangeMicRecognizer)]; + [_topView addGestureRecognizer:tap]; + } + return _topView; +} +- (UIView *)contentView { + if (!_contentView) { + _contentView = [[UIView alloc] init]; + _contentView.backgroundColor = [UIColor whiteColor]; + CAShapeLayer * layer = [CAShapeLayer layer]; + UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KScreenWidth, 450) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(12, 12)]; + layer.path = path.CGPath; + _contentView.layer.mask = layer; + } + return _contentView; +} + +- (UIButton *)applyButton{ + if (!_applyButton) { + _applyButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_applyButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[ThemeColor confirmButtonGradientStartColor], [ThemeColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; + [_applyButton setTitle:@"点击报名" forState:UIControlStateNormal]; + _applyButton.titleLabel.font = [UIFont systemFontOfSize:16]; + _applyButton.layer.masksToBounds = YES; + _applyButton.layer.cornerRadius = 38 / 2; + [_applyButton addTarget:self action:@selector(applyButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _applyButton; +} + +- (UILabel *)titleLabel{ + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + } + return _titleLabel; +} + +- (UIView *)lineView{ + if (!_lineView) { + _lineView = [[UIView alloc] init]; + _lineView.backgroundColor = [ThemeColor dividerColor]; + } + return _lineView; +} + +- (UITableView *)tableView { + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.rowHeight = 65; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPArrangeMicTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPArrangeMicTableViewCell class])]; + [_tableView registerClass:[XPArrangeMicEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPArrangeMicEmptyTableViewCell class])]; + } + return _tableView; +} + +- (NSMutableArray *)datasource { + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; +} + + +@end diff --git a/xplan-ios/Main/Room/View/MenuContainerView/Model/XPRoomMenuItem.h b/xplan-ios/Main/Room/View/MenuContainerView/Model/XPRoomMenuItem.h index 09be2576..a49a7b1a 100644 --- a/xplan-ios/Main/Room/View/MenuContainerView/Model/XPRoomMenuItem.h +++ b/xplan-ios/Main/Room/View/MenuContainerView/Model/XPRoomMenuItem.h @@ -16,6 +16,7 @@ typedef NS_ENUM(NSInteger, XPRoomMenuItemType) { XPRoomMenuItemType_Face,///表情 XPRoomMenuItemType_Message,///房间私聊 XPRoomMenuItemType_More,///更多 + XPRoomMenuItemType_ArrangeMic,///排麦 XPRoomMenuItemType_Gift,///礼物 }; diff --git a/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m b/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m index 51bd90c8..a944b3a2 100644 --- a/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m +++ b/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m @@ -18,12 +18,13 @@ #import "UserInfoModel.h" #import "MicroStateModel.h" #import "RoomInfoModel.h" +#import "AttachmentModel.h" ///View #import "XPRoomSendTextView.h" #import "XPSendGiftView.h" #import "SessionListViewController.h" #import "XPRoomMoreMenuViewController.h" - +#import "XPArrangeMicViewController.h" @interface XPRoomMenuContainerView () /// @@ -42,6 +43,8 @@ @property (nonatomic,strong) UIButton *moreButton; ///礼物 @property (nonatomic,strong) UIButton *giftButton; +///排麦 +@property (nonatomic,strong) UIButton *arrangeMicButton; ///占位的 @property (nonatomic,strong) UIView * placeHolderView; ///代理 @@ -51,7 +54,6 @@ @implementation XPRoomMenuContainerView - - (instancetype)initWithDelegate:(id)delegate { self = [super init]; if (self) { @@ -97,6 +99,25 @@ case XPRoomMenuItemType_More: { XPRoomMoreMenuViewController * moreMenuVC = [[XPRoomMoreMenuViewController alloc] initRoomInfo:self.delegate.getRoomInfo]; [self.delegate.getCurrentNav presentViewController:moreMenuVC animated:YES completion:nil]; + } + case XPRoomMenuItemType_ArrangeMic:{ + self.arrangeMicButton.selected = NO; + NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; + request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; + request.userIds = @[[AccountInfoStorage instance].getUid]; + [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { + NIMChatroomMember * member; + if (error == nil) { + member = members.firstObject; + } + XPArrangeMicInfoModel * info = [[XPArrangeMicInfoModel alloc] init]; + info.roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; + info.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; + info.micQueue = [self.delegate getMicroQueue]; + info.isManager = (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager); + XPArrangeMicViewController * arrangeMicVC = [[XPArrangeMicViewController alloc] initWithInfo:info]; + [self.delegate.getCurrentNav presentViewController:arrangeMicVC animated:YES completion:nil]; + }]; } break; default: @@ -111,6 +132,7 @@ [self.stackView addArrangedSubview:self.micButton]; [self.stackView addArrangedSubview:self.voiceButton]; [self.stackView addArrangedSubview:self.faceButton]; + [self.stackView addArrangedSubview:self.arrangeMicButton]; [self.stackView addArrangedSubview:self.messageButton]; [self.stackView addArrangedSubview:self.moreButton]; [self.stackView addArrangedSubview:self.placeHolderView]; @@ -179,8 +201,30 @@ } - (void)onRoomUpdate { - self.moreButton.hidden = self.delegate.getRoomInfo.uid == [AccountInfoStorage instance].getUid.integerValue ? NO : YES; + RoomInfoModel * roomInfo = self.delegate.getRoomInfo; + self.moreButton.hidden = roomInfo.uid == [AccountInfoStorage instance].getUid.integerValue ? NO : YES; + self.arrangeMicButton.hidden = roomInfo.roomModeType != RoomModeType_Open_Micro_Mode; } + +- (void)handleNIMCustomMessage:(AttachmentModel *)attachment { + if (attachment.first == CustomMessageType_Arrange_Mic) { + if (attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty || attachment.second == Custom_Message_Sub_Arrange_Mic_Empty) { + NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; + request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; + request.userIds = @[[AccountInfoStorage instance].getUid]; + [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { + NIMChatroomMember * member; + if (error == nil) { + member = members.firstObject; + } + if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) { + self.arrangeMicButton.selected = attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty; + }; + }]; + } + } +} + #pragma mark - Getters And Setters - (UIButton *)inputButton { if (!_inputButton) { @@ -286,4 +330,16 @@ return _stackView; } +- (UIButton *)arrangeMicButton { + if (!_arrangeMicButton) { + _arrangeMicButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_arrangeMicButton setImage:[UIImage imageNamed:@"room_menu_arrange_mic"] forState:UIControlStateNormal]; + [_arrangeMicButton setImage:[UIImage imageNamed:@"room_menu_arrange_mic_new"] forState:UIControlStateSelected]; + _arrangeMicButton.tag = XPRoomMenuItemType_ArrangeMic; + [_arrangeMicButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + _arrangeMicButton.hidden = YES; + } + return _arrangeMicButton; +} + @end diff --git a/xplan-ios/Main/Room/View/XPRoomViewController.m b/xplan-ios/Main/Room/View/XPRoomViewController.m index 42d6034f..cab1c27a 100644 --- a/xplan-ios/Main/Room/View/XPRoomViewController.m +++ b/xplan-ios/Main/Room/View/XPRoomViewController.m @@ -313,6 +313,7 @@ if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { [self.stageView handleNIMCustomMessage:obj.attachment]; [self.animationView handleNIMCustomMessage:obj.attachment]; + [self.menuContainerView handleNIMCustomMessage:obj.attachment]; } } }