From 440dc212cf48afbc8b04e4e77284f57bbfeaf7e4 Mon Sep 17 00:00:00 2001 From: fengshuo <963787902@qq.com> Date: Wed, 10 Nov 2021 18:42:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=81=E7=A4=BC=E7=89=A9=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E5=88=9D=E5=A7=8B=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplan-ios.xcodeproj/project.pbxproj | 112 ++++++++++ xplan-ios/Assets.xcassets/Gift/Contents.json | 6 + .../Contents.json | 22 ++ .../gift_all_micro_normal@2x.png | Bin 0 -> 3640 bytes .../gift_all_micro_normal@3x.png | Bin 0 -> 9765 bytes .../Contents.json | 22 ++ .../gift_all_micro_select@2x.png | Bin 0 -> 3342 bytes .../gift_all_micro_select@3x.png | Bin 0 -> 8760 bytes .../Contents.json | 22 ++ .../gift_bar_count_arrow@2x.png | Bin 0 -> 157 bytes .../gift_bar_count_arrow@3x.png | Bin 0 -> 213 bytes .../Contents.json | 22 ++ .../gift_bar_count_up_arrow@2x.png | Bin 0 -> 197 bytes .../gift_bar_count_up_arrow@3x.png | Bin 0 -> 287 bytes .../Contents.json | 22 ++ .../gift_bar_recharge_arrow@2x.png | Bin 0 -> 186 bytes .../gift_bar_recharge_arrow@3x.png | Bin 0 -> 261 bytes xplan-ios/Base/UI/SendGiftView/Api/Api+Gift.h | 16 ++ xplan-ios/Base/UI/SendGiftView/Api/Api+Gift.m | 12 ++ .../SendGiftView/Model/XPGiftMicroUserModel.h | 19 ++ .../SendGiftView/Model/XPGiftMicroUserModel.m | 19 ++ .../SendGiftView/Presenter/XPGiftPresenter.h | 16 ++ .../SendGiftView/Presenter/XPGiftPresenter.m | 12 ++ .../UI/SendGiftView/Protocol/XPGiftProtocol.h | 16 ++ .../UI/SendGiftView/ThemeColor+SendGift.h | 21 ++ .../UI/SendGiftView/ThemeColor+SendGift.m | 27 +++ .../View/Cell/XPGiftUserCollectionViewCell.h | 17 ++ .../View/Cell/XPGiftUserCollectionViewCell.m | 120 +++++++++++ .../Base/UI/SendGiftView/View/XPGiftBarView.h | 16 ++ .../Base/UI/SendGiftView/View/XPGiftBarView.m | 200 ++++++++++++++++++ .../UI/SendGiftView/View/XPGiftInfoView.h | 16 ++ .../UI/SendGiftView/View/XPGiftInfoView.m | 36 ++++ .../UI/SendGiftView/View/XPGiftUsersView.h | 20 ++ .../UI/SendGiftView/View/XPGiftUsersView.m | 169 +++++++++++++++ .../UI/SendGiftView/View/XPSendGiftView.h | 31 +++ .../UI/SendGiftView/View/XPSendGiftView.m | 96 +++++++++ xplan-ios/Base/UI/ThemeColor.h | 1 + .../XPRoomMenuContainerView.m | 10 +- 38 files changed, 1117 insertions(+), 1 deletion(-) create mode 100644 xplan-ios/Assets.xcassets/Gift/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/gift_all_micro_normal@2x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/gift_all_micro_normal@3x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_all_micro_select.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_all_micro_select.imageset/gift_all_micro_select@2x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_all_micro_select.imageset/gift_all_micro_select@3x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_count_arrow.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_count_arrow.imageset/gift_bar_count_arrow@2x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_count_arrow.imageset/gift_bar_count_arrow@3x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/gift_bar_count_up_arrow@2x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/gift_bar_count_up_arrow@3x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/gift_bar_recharge_arrow@2x.png create mode 100644 xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/gift_bar_recharge_arrow@3x.png create mode 100644 xplan-ios/Base/UI/SendGiftView/Api/Api+Gift.h create mode 100644 xplan-ios/Base/UI/SendGiftView/Api/Api+Gift.m create mode 100644 xplan-ios/Base/UI/SendGiftView/Model/XPGiftMicroUserModel.h create mode 100644 xplan-ios/Base/UI/SendGiftView/Model/XPGiftMicroUserModel.m create mode 100644 xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.h create mode 100644 xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.m create mode 100644 xplan-ios/Base/UI/SendGiftView/Protocol/XPGiftProtocol.h create mode 100644 xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.h create mode 100644 xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.m create mode 100644 xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.h create mode 100644 xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.m create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.h create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.m create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.h create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.m create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.h create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.m create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.h create mode 100644 xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.m diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 86f38c2f..0e42c31c 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -150,6 +150,15 @@ E874B88827215D39003954B9 /* MicroStateModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88727215D39003954B9 /* MicroStateModel.m */; }; E874B88B27215EAF003954B9 /* MicroQueueModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88A27215EAF003954B9 /* MicroQueueModel.m */; }; E87888F42738C30E00BF1D57 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E87888F32738C30E00BF1D57 /* StoreKit.framework */; }; + E8788934273A53D700BF1D57 /* XPSendGiftView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8788933273A53D700BF1D57 /* XPSendGiftView.m */; }; + E878893C273A54C300BF1D57 /* Api+Gift.m in Sources */ = {isa = PBXBuildFile; fileRef = E878893B273A54C300BF1D57 /* Api+Gift.m */; }; + E878893F273A54F500BF1D57 /* XPGiftPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E878893E273A54F500BF1D57 /* XPGiftPresenter.m */; }; + E8788942273A55AD00BF1D57 /* XPGiftUsersView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8788941273A55AD00BF1D57 /* XPGiftUsersView.m */; }; + E8788945273A55C200BF1D57 /* XPGiftInfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8788944273A55C200BF1D57 /* XPGiftInfoView.m */; }; + E8788948273A55D000BF1D57 /* XPGiftBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8788947273A55D000BF1D57 /* XPGiftBarView.m */; }; + E878894C273A607C00BF1D57 /* XPGiftUserCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E878894B273A607C00BF1D57 /* XPGiftUserCollectionViewCell.m */; }; + E8788950273A699900BF1D57 /* ThemeColor+SendGift.m in Sources */ = {isa = PBXBuildFile; fileRef = E878894F273A699900BF1D57 /* ThemeColor+SendGift.m */; }; + E8788960273BB14200BF1D57 /* XPGiftMicroUserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E878895F273BB14200BF1D57 /* XPGiftMicroUserModel.m */; }; E87A24F1272935920086A794 /* XPMessageRemoteExtModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E87A24F0272935920086A794 /* XPMessageRemoteExtModel.m */; }; E88B5CA526FB088600DA9178 /* XPMineTeenagerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CA426FB088600DA9178 /* XPMineTeenagerViewController.m */; }; E88B5CA826FB089C00DA9178 /* XPMineTeenagePwdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E88B5CA726FB089C00DA9178 /* XPMineTeenagePwdViewController.m */; }; @@ -520,6 +529,25 @@ E87888F12738C23F00BF1D57 /* xplan-ios.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "xplan-ios.entitlements"; sourceTree = ""; }; E87888F22738C2D400BF1D57 /* xplan-iosRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "xplan-iosRelease.entitlements"; sourceTree = ""; }; E87888F32738C30E00BF1D57 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; + E8788932273A53D700BF1D57 /* XPSendGiftView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPSendGiftView.h; sourceTree = ""; }; + E8788933273A53D700BF1D57 /* XPSendGiftView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPSendGiftView.m; sourceTree = ""; }; + E878893A273A54C300BF1D57 /* Api+Gift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+Gift.h"; sourceTree = ""; }; + E878893B273A54C300BF1D57 /* Api+Gift.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+Gift.m"; sourceTree = ""; }; + E878893D273A54F500BF1D57 /* XPGiftPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftPresenter.h; sourceTree = ""; }; + E878893E273A54F500BF1D57 /* XPGiftPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftPresenter.m; sourceTree = ""; }; + E8788940273A55AD00BF1D57 /* XPGiftUsersView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftUsersView.h; sourceTree = ""; }; + E8788941273A55AD00BF1D57 /* XPGiftUsersView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftUsersView.m; sourceTree = ""; }; + E8788943273A55C200BF1D57 /* XPGiftInfoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftInfoView.h; sourceTree = ""; }; + E8788944273A55C200BF1D57 /* XPGiftInfoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftInfoView.m; sourceTree = ""; }; + E8788946273A55D000BF1D57 /* XPGiftBarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftBarView.h; sourceTree = ""; }; + E8788947273A55D000BF1D57 /* XPGiftBarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftBarView.m; sourceTree = ""; }; + E878894A273A607C00BF1D57 /* XPGiftUserCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftUserCollectionViewCell.h; sourceTree = ""; }; + E878894B273A607C00BF1D57 /* XPGiftUserCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftUserCollectionViewCell.m; sourceTree = ""; }; + E878894D273A672200BF1D57 /* XPGiftProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftProtocol.h; sourceTree = ""; }; + E878894E273A699900BF1D57 /* ThemeColor+SendGift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ThemeColor+SendGift.h"; sourceTree = ""; }; + E878894F273A699900BF1D57 /* ThemeColor+SendGift.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "ThemeColor+SendGift.m"; sourceTree = ""; }; + E878895E273BB14200BF1D57 /* XPGiftMicroUserModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftMicroUserModel.h; sourceTree = ""; }; + E878895F273BB14200BF1D57 /* XPGiftMicroUserModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftMicroUserModel.m; sourceTree = ""; }; E87A24EF272935920086A794 /* XPMessageRemoteExtModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMessageRemoteExtModel.h; sourceTree = ""; }; E87A24F0272935920086A794 /* XPMessageRemoteExtModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMessageRemoteExtModel.m; sourceTree = ""; }; E88B5CA326FB088600DA9178 /* XPMineTeenagerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineTeenagerViewController.h; sourceTree = ""; }; @@ -1023,6 +1051,7 @@ 189DD56C26DF5B5400AB55B1 /* UI */ = { isa = PBXGroup; children = ( + E8788931273A53B000BF1D57 /* SendGiftView */, E8659640270160F200846EBD /* VagueImageView */, E8AC720A26F435AF007D6E91 /* UIImageView */, E81366F926F0D27A0076364C /* UIButton */, @@ -1444,6 +1473,80 @@ path = Model; sourceTree = ""; }; + E8788931273A53B000BF1D57 /* SendGiftView */ = { + isa = PBXGroup; + children = ( + E8788935273A540400BF1D57 /* Model */, + E8788936273A541500BF1D57 /* Api */, + E8788937273A542700BF1D57 /* View */, + E8788938273A542E00BF1D57 /* Presenter */, + E8788939273A544000BF1D57 /* Protocol */, + E878894E273A699900BF1D57 /* ThemeColor+SendGift.h */, + E878894F273A699900BF1D57 /* ThemeColor+SendGift.m */, + ); + path = SendGiftView; + sourceTree = ""; + }; + E8788935273A540400BF1D57 /* Model */ = { + isa = PBXGroup; + children = ( + E878895E273BB14200BF1D57 /* XPGiftMicroUserModel.h */, + E878895F273BB14200BF1D57 /* XPGiftMicroUserModel.m */, + ); + path = Model; + sourceTree = ""; + }; + E8788936273A541500BF1D57 /* Api */ = { + isa = PBXGroup; + children = ( + E878893A273A54C300BF1D57 /* Api+Gift.h */, + E878893B273A54C300BF1D57 /* Api+Gift.m */, + ); + path = Api; + sourceTree = ""; + }; + E8788937273A542700BF1D57 /* View */ = { + isa = PBXGroup; + children = ( + E8788949273A594C00BF1D57 /* Cell */, + E8788932273A53D700BF1D57 /* XPSendGiftView.h */, + E8788933273A53D700BF1D57 /* XPSendGiftView.m */, + E8788940273A55AD00BF1D57 /* XPGiftUsersView.h */, + E8788941273A55AD00BF1D57 /* XPGiftUsersView.m */, + E8788943273A55C200BF1D57 /* XPGiftInfoView.h */, + E8788944273A55C200BF1D57 /* XPGiftInfoView.m */, + E8788946273A55D000BF1D57 /* XPGiftBarView.h */, + E8788947273A55D000BF1D57 /* XPGiftBarView.m */, + ); + path = View; + sourceTree = ""; + }; + E8788938273A542E00BF1D57 /* Presenter */ = { + isa = PBXGroup; + children = ( + E878893D273A54F500BF1D57 /* XPGiftPresenter.h */, + E878893E273A54F500BF1D57 /* XPGiftPresenter.m */, + ); + path = Presenter; + sourceTree = ""; + }; + E8788939273A544000BF1D57 /* Protocol */ = { + isa = PBXGroup; + children = ( + E878894D273A672200BF1D57 /* XPGiftProtocol.h */, + ); + path = Protocol; + sourceTree = ""; + }; + E8788949273A594C00BF1D57 /* Cell */ = { + isa = PBXGroup; + children = ( + E878894A273A607C00BF1D57 /* XPGiftUserCollectionViewCell.h */, + E878894B273A607C00BF1D57 /* XPGiftUserCollectionViewCell.m */, + ); + path = Cell; + sourceTree = ""; + }; E88B5CA926FB15B900DA9178 /* Teenager */ = { isa = PBXGroup; children = ( @@ -2046,6 +2149,7 @@ 189DD76226E60DDC00AB55B1 /* Api+Login.m in Sources */, 18E7B22626E8CDCF0064BC9B /* XplanFlutterBoostDelegate.m in Sources */, E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */, + E8788942273A55AD00BF1D57 /* XPGiftUsersView.m in Sources */, E8B846CB26FDD7CD00A777FE /* XPMineRechargeViewController.m in Sources */, E86596512701A1C000846EBD /* StatisticsService.m in Sources */, E824544026F58F9400BE8163 /* XPMinePayPwdViewController.m in Sources */, @@ -2063,12 +2167,14 @@ E84B0E3F2727EDF6008818C6 /* XPRoomMessageTableViewCell.m in Sources */, E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */, E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */, + E8788950273A699900BF1D57 /* ThemeColor+SendGift.m in Sources */, E81C279D26EEEC620031E639 /* XPConstant.m in Sources */, 187EEEFE26E8A82C002833B2 /* NSObject+AutoCoding.m in Sources */, E8AC721926F46E0B007D6E91 /* XPMineSettingItemModel.m in Sources */, 189DD55A26DE39D200AB55B1 /* BaseMvpPresenter.m in Sources */, 180806D827293794001FD836 /* NSObject+MJExtension.m in Sources */, 189DD6FF26E20E5900AB55B1 /* HttpRequestHelper.m in Sources */, + E8788945273A55C200BF1D57 /* XPGiftInfoView.m in Sources */, E8AEAED6271412EC0017FCE0 /* XPRoomViewController.m in Sources */, E8E70D9226F2F60C00F03460 /* XPMineItemModel.m in Sources */, 189DD74A26E21D8400AB55B1 /* SSKeychain.m in Sources */, @@ -2101,6 +2207,7 @@ E8EEB91726FC7B35007C6EBA /* XPMineUserInfoDesViewController.m in Sources */, 180806FB2729A354001FD836 /* ThemeColor+Room.m in Sources */, E8E70D8626F2F55C00F03460 /* XPMineAccountView.m in Sources */, + E878893C273A54C300BF1D57 /* Api+Gift.m in Sources */, E81C279026EB314D0031E639 /* LoginForgetEditView.m in Sources */, E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */, E81C27A026EEF83D0031E639 /* XPHtmlUrl.m in Sources */, @@ -2162,6 +2269,7 @@ 186A536926FC6F2E00D67B2C /* XCShareView.m in Sources */, 186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */, E8B825BF26E9E57D009E8E9F /* LoginTicketInfo.m in Sources */, + E878894C273A607C00BF1D57 /* XPGiftUserCollectionViewCell.m in Sources */, 181D7F212727D9DB00B7C059 /* SocialStageView.m in Sources */, 187EEEF026E89FE8002833B2 /* AccountInfoStorage.m in Sources */, 186A536B26FC6F2E00D67B2C /* XCShareItemCell.m in Sources */, @@ -2175,6 +2283,7 @@ E824546426F5FF1C00BE8163 /* XPMineResetPayPasswordPresenter.m in Sources */, E8B846BC26FD7C1200A777FE /* UploadImage.m in Sources */, 186A534D26FC6ED900D67B2C /* TTActionSheetView.m in Sources */, + E878893F273A54F500BF1D57 /* XPGiftPresenter.m in Sources */, E8AEAEED27141AE20017FCE0 /* XPRoomBackContainerView.m in Sources */, E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */, E824545926F5E65900BE8163 /* XPMineVerifIdentityView.m in Sources */, @@ -2196,6 +2305,7 @@ 18E7B29026EA0E6B0064BC9B /* FlutterBoost+Xplan.m in Sources */, E8B846DC26FDE24300A777FE /* RechargeListModel.m in Sources */, 189DD75926E6003C00AB55B1 /* Api.m in Sources */, + E8788934273A53D700BF1D57 /* XPSendGiftView.m in Sources */, E88B5CB826FB325200DA9178 /* XPMineTeenagerPwdPresenter.m in Sources */, E84B0E462727EF9D008818C6 /* XPRoomMessageParser.m in Sources */, E874B88827215D39003954B9 /* MicroStateModel.m in Sources */, @@ -2203,8 +2313,10 @@ E89DA66727006443008483C1 /* RechargeStorage.m in Sources */, 189DD53F26DE255600AB55B1 /* main.m in Sources */, E872308D26E89DAA00B90D4F /* LoginInputView.m in Sources */, + E8788948273A55D000BF1D57 /* XPGiftBarView.m in Sources */, 189DD58F26DF97E700AB55B1 /* LoginPresenter.m in Sources */, E89DA67227008D59008483C1 /* WalletInfoModel.m in Sources */, + E8788960273BB14200BF1D57 /* XPGiftMicroUserModel.m in Sources */, 189DD55026DE37F900AB55B1 /* MvpViewController.m in Sources */, E81366F326F0B7C80076364C /* LoginFullInfoViewController.m in Sources */, ); diff --git a/xplan-ios/Assets.xcassets/Gift/Contents.json b/xplan-ios/Assets.xcassets/Gift/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Gift/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/Contents.json b/xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/Contents.json new file mode 100644 index 00000000..41ff831e --- /dev/null +++ b/xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gift_all_micro_normal@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gift_all_micro_normal@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/gift_all_micro_normal@2x.png b/xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/gift_all_micro_normal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0188186d532e6d67bb50fdc13ba80ab0f836ad93 GIT binary patch literal 3640 zcmV-84#)9{P)D+Kz4PLsjEFKklo3Hjv_Q?!Qkm2eb6c=9bv+(IZCA}QPY)|AW%pRAfa0Uo zd|{hOy0%!hOJxb>CTJ%33S3h_Q$WN45r&z$-?!(xckaBHff+TeoH>VcE_d$SJM;Vg z@9+P82yXj}ptwaXp$wMxlp3)L00jcUomqku2(TP507L)ib1~+R`Ewwg7taaro3F+6 z4e?k!@8lfV+)sEL7>ogNsFguTk4#)65T+ggRm%*dYW<6=t88C71FaU@22;jT~xRbS^s+_I1$$FK2W=oyeXVIYBFqp5 zW0?rs0UGf>e70EWYXO4XN33XsViuxCpE)4+0<{SVfjN?KGURhdDQyF^*D?~r0!*R7r5C7J za}fQ9El>c4fgQ__hn3qxwF4TvgveU`;W@-XCofR@gvBoQHalp7$#sLFW$l`?(XAp> zJD`!7WE6v8xZu&f657^(*h{DYnS8taboke8fQDxgA1Q_fECD_@_X6!$LWSHP8BC4b z%9R&|f{H~#duNhI2!=#!h~$+}_aqbmI8wO0Jbb?u=uX1+u7Vc{0pFViI%_zi*;0th zoR#n1naXNED!?T_R&u(VDKL-K%G6a=MqT+CPG?C8ofVy36qsGrLx(@%qmCUUQ*V5u zp`cAlZBzKRCN<7f9)J*NuJ|!Da~CaTQ>wjIkr>3m6#EgeN@!>&P<%X{NiDeuWefg^ z3ml6hvxYI6=SDG;_MIk$3%481?+Yq3V!-0vL!(f_(mZb4Cr7vn@kef&D^2MehBS!_ z_3zqEYw%{e{V9;l*L+iAqnNmZhfReE10+M}M>5t3P;E8A70_snL^<|Jc|4dWIYj#= z!s{6=Q3r*w5kKs2Eu`1jdT9O_6S#KSr290hsl=I=w~fmYM@}y*58sJkCt-V4!9s)t zXVjj`zcLENrzN1|D@{-{Wi!s9P{n#^NB}5y&6Uj78$qA+u3()aaXlw0OX=6`dX zD_peASl}*Dm6BCtFH)oiDpBz6eAAws?ad{9qgdsu^L;0G@;2 z5k+T6akC!N`5Sm+tC6=?t|sZm4VS2&oh+M7@Av6GQ~s76`VvtZyLVv~EB@-sgZ{3_ zSeTi4L%5g4-rYr&#{g0ZY(^0)$xs%<7HG$PW8jBKLjj-eS zhZpF1d*ujJ6^Imbo{|k2F_2AcYKDfat@_+U-Ydi(mCkijR{d=yarJJ z?~BZK)rnK;7K9Y{50a^PwWlVA#*Xw$5r82{KJiigC2>2JU*9G=9zpd9FI+ctoc`oD zt-Q_dNJ8l~ERZiyuPpKeA~47kppH(-aSCMF6sdM}f0Q_Qp&{LFdRWu~2cT0QlWHc9 zktX>oAmIB`Tyb`ep`fmw)3-N`JRw=8d3vHEMJfe(X^E+L+Hmz&xRP94o^(#A?t4jt!;(l@piEPh6= zr7G`t4XmHva$OQwc)9sQL^Tnd{3uXbeQlLvLH*&+vXOCyJ8WpJ90~#I( z5!dz5&~O8EcMIs~u?ls+I9AQalQwavDvVWy_m;$5{K-^aTg6!i+(jJ9Yasw^eOXt~ z5m4R~-3m}=DnDTmQZGtjr*Hq3>{+!}kVH$*k_)FKIyG0lO*bQQS0;umo~E7@#_a$a7{n^xTpN(8?8*c;H<53Vq9rk9MTTNefdWE0kHaQc z68eD|X6Xe|I%B;t&o-Bji$HNFDoE+vy$oV?Jr33wKMkb$tokm86|@Sn<&&FZ8}s4z`Qis^s@iq(ytE~N^Db4%MYdL zClilmj+H3~50k3<4U}qV97-QU)&9SG^+oqRB-2oJr{}2sJa^n!R(`0p z;?O6}74CX@OZkr8q@x0Jb_%0S(m>+YVzMXWD`F|OW=>$Wk9kmO6208;D^>WQ9) zQh%Ev*NzzAS-NRW7VM9vB-aa-cMQ-cMxq=$ULLRREma40V^k8UkPT8Vf3nC>a&WJ{ zjM`KYSWqyl7@O)B-)Epy6BN!0wG9Ahyn<_*u3_DZNp-pH1@_hgvl~+&kM;r8>XSvqPuk_yO6x+@3zB+Kgn literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/gift_all_micro_normal@3x.png b/xplan-ios/Assets.xcassets/Gift/gift_all_micro_normal.imageset/gift_all_micro_normal@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e55cbf772b9e0af8aaeaad1d739132127482e716 GIT binary patch literal 9765 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 Y0|TdAL2oq!EC2ui07*qoM6N<$f<+`vQ2+n{ literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Gift/gift_all_micro_select.imageset/gift_all_micro_select@3x.png b/xplan-ios/Assets.xcassets/Gift/gift_all_micro_select.imageset/gift_all_micro_select@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc39b6888c90339ca653cf3efc1ec744058a538 GIT binary patch literal 8760 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 literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Gift/gift_bar_count_arrow.imageset/gift_bar_count_arrow@3x.png b/xplan-ios/Assets.xcassets/Gift/gift_bar_count_arrow.imageset/gift_bar_count_arrow@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..64ca49c5bf5c70cafda9d24f9847417de39d8536 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^av;pY3?xs=ZJr3EL<4+6T!Hj|4B&A-mjx)nUJ~RN z%uw&c#%)yP);lK)D3syp;us=vIeCG30$*vv=E#PeYbL1{_ce4I8chRFFdPdP;Ymmc z6bWf8n#r_Dz7p8?gYXsNvDe|Ts-0B$WRC-WUqIszxUtrVgwg^Rz pV$myH8%&rCR1cLX*H|eqFerxcehV`zkpSAs;OXk;vd$@?2>@|5NG|{Y literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/Contents.json b/xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/Contents.json new file mode 100644 index 00000000..577e884c --- /dev/null +++ b/xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gift_bar_count_up_arrow@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gift_bar_count_up_arrow@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/gift_bar_count_up_arrow@2x.png b/xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/gift_bar_count_up_arrow@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..61f2ef34500c5bc7e57afea2c9d279c7673f3010 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsxd5LKS0Mc#H&CgWJr$^et0c%T zn4y6yKRru;KS?mMEpP@<)W_4sF@)oK@&bkolYgYA$sHgAL6sGnvjh6diR)6nn^|z^(D-zyU!%!{t{ReZDg?Tz$Y<{#nDz Q6lgAkr>mdKI;Vst0IN_-2><{9 literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/gift_bar_count_up_arrow@3x.png b/xplan-ios/Assets.xcassets/Gift/gift_bar_count_up_arrow.imageset/gift_bar_count_up_arrow@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9977f7252e36634b16429e38823d1e800dcbe3e5 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^av;pY3?xs=ZJr3E3<7*YT!Hj|Qh>EDivduNKuM5a zFhfHfCtH|XRUn_0p^uYk<+AVUvw?Dbo-U3d5|@)DBo6Gk&Cq)On=NbWevg3bjGfub zG&D*i4yJmF_XvbIYkUX_G36B6#bj>dX)r0VZ2{jIuI)~N%xurx7K*HR=jwFO;Z$hg zb;hh6FIW_g-URB*sxXMS!<4~#q=31@Zh>gP;e!lGtmO+^7|+~u`^d|4$Ms-A`Oa1L m2?=$kjOU)mq#kfcXJ9D2BYnX!o8ceOWelFKelF{r5}E*taD2%C literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/Contents.json b/xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/Contents.json new file mode 100644 index 00000000..fc40b1b0 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gift_bar_recharge_arrow@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gift_bar_recharge_arrow@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/gift_bar_recharge_arrow@2x.png b/xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/gift_bar_recharge_arrow@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2a813a65d5b77bf560df6f5b35619c5093f73a86 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs#Q>iWS0Md=8yg61;r_pk^Z#Z} z5PK&VSdbk^`siFg3sl5a666=maQnKrjPymxGY2A_le~eVcAhSdAsp9}9T?}lEKs|> zh)H5{te2!-%#ITb$5LE{_>Snk=@3YpnB|bBByxat>PBv*oC8}LcoXf?jhL+%7;<}g V!ZY^wGy_dy@O1TaS?83{1OW6vJwgBg literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/gift_bar_recharge_arrow@3x.png b/xplan-ios/Assets.xcassets/Gift/gift_bar_recharge_arrow.imageset/gift_bar_recharge_arrow@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..538d3c863ac5a5cea734513409e19c8ece7a40dd GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX3?zBp#Z3TGW&u7Su0Z<#HrD@Jz~nYCxtRgR zWd%tAxm&>uARCB4Y&K)ItrkF?f+azI!3@8+=7`T1;G5c)B|Rzm(~=p#4;;S_l+5*X zaSYKofA(@TUxNaVOW?vitSR62NA7OyYddn}=iZY)v--=u7qd<}UZQ<_r{#hwV|GS? zT>H|7pZ^~H`}sut>*@Z#EA|Q0ue8tEmz`I=qo41^%#)M$Ptcy)dTLS8!XlsQ + +NS_ASSUME_NONNULL_BEGIN +@class MicroQueueModel; +@interface XPGiftMicroUserModel : NSObject +///是否选择 本地字段刷新页面使用 +@property (nonatomic,assign) BOOL isSelect; +///麦序信息 +@property (nonatomic,strong) MicroQueueModel *microQueue; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/Model/XPGiftMicroUserModel.m b/xplan-ios/Base/UI/SendGiftView/Model/XPGiftMicroUserModel.m new file mode 100644 index 00000000..4ef44095 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/Model/XPGiftMicroUserModel.m @@ -0,0 +1,19 @@ +// +// XPGiftMicroUserModel.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/10. +// + +#import "XPGiftMicroUserModel.h" + +@implementation XPGiftMicroUserModel + +- (instancetype)init { + if (self = [super init]) { + self.isSelect = NO; + } + return self; +} + +@end diff --git a/xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.h b/xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.h new file mode 100644 index 00000000..50f06f67 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.h @@ -0,0 +1,16 @@ +// +// XPGiftPresenter.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "BaseMvpPresenter.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPGiftPresenter : BaseMvpPresenter + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.m b/xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.m new file mode 100644 index 00000000..f6eabf5c --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/Presenter/XPGiftPresenter.m @@ -0,0 +1,12 @@ +// +// XPGiftPresenter.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "XPGiftPresenter.h" + +@implementation XPGiftPresenter + +@end diff --git a/xplan-ios/Base/UI/SendGiftView/Protocol/XPGiftProtocol.h b/xplan-ios/Base/UI/SendGiftView/Protocol/XPGiftProtocol.h new file mode 100644 index 00000000..5febedf5 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/Protocol/XPGiftProtocol.h @@ -0,0 +1,16 @@ +// +// XPGiftProtocol.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol XPGiftProtocol + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.h b/xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.h new file mode 100644 index 00000000..9361b6be --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.h @@ -0,0 +1,21 @@ +// +// ThemeColor+SendGift.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "ThemeColor.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ThemeColor (SendGift) +/// 没有选择送礼物的人的头像 UIColorRGBAlpha(0x000000, 0.3) ++ (UIColor *)avatarCoverColor; +/// 送礼物 充值 0xFF903E ++ (UIColor *)giftRechargeColor; +/// 礼物主背景色 #0B0B0D ++ (UIColor *)giftBackGroundColor; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.m b/xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.m new file mode 100644 index 00000000..2a68d5e5 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/ThemeColor+SendGift.m @@ -0,0 +1,27 @@ +// +// ThemeColor+SendGift.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "ThemeColor+SendGift.h" + +@implementation ThemeColor (SendGift) + +/// 没有选择送礼物的人的头像 UIColorRGBAlpha(0x000000, 0.3) ++ (UIColor *)avatarCoverColor { + return [UIColor colorWithWhite:0 alpha:0.3]; +} + +/// 送礼物 充值 0xFF903E ++ (UIColor *)giftRechargeColor { + return UIColorFromRGB(0xFF903E); +} + +/// 礼物主背景色 #0B0B0D ++ (UIColor *)giftBackGroundColor { + return UIColorRGBAlpha(0x0C0B0C, 0.9); +} + +@end diff --git a/xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.h b/xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.h new file mode 100644 index 00000000..3390c4f3 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.h @@ -0,0 +1,17 @@ +// +// XPGiftUserCollectionViewCell.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class XPGiftMicroUserModel; +@interface XPGiftUserCollectionViewCell : UICollectionViewCell +///数据模型 +@property (nonatomic,strong) XPGiftMicroUserModel *microModel; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.m b/xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.m new file mode 100644 index 00000000..ba3cb500 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/Cell/XPGiftUserCollectionViewCell.m @@ -0,0 +1,120 @@ +// +// XPGiftUserCollectionViewCell.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "XPGiftUserCollectionViewCell.h" +///Third +#import +///Tool +#import "ThemeColor+SendGift.h" +///Model +#import "MicroQueueModel.h" +#import "UserInfoModel.h" +#import "MicroStateModel.h" +#import "XPGiftMicroUserModel.h" +///View +#import "NetImageView.h" + +@interface XPGiftUserCollectionViewCell () +///头像 +@property (nonatomic,strong) NetImageView *avatarImageView; +///当前位置的 +@property (nonatomic,strong) UILabel *positionLabel; +///没有选中的时候覆盖的 +@property (nonatomic,strong) UIView * coverView; +@end + +@implementation XPGiftUserCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + self.coverView.layer.cornerRadius = self.coverView.frame.size.width / 2; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self.contentView addSubview:self.avatarImageView]; + [self.contentView addSubview:self.positionLabel]; + [self.contentView addSubview:self.coverView]; +} + +- (void)initSubViewConstraints { + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.contentView); + make.height.mas_equalTo(self.avatarImageView.mas_width); + }]; + + [self.positionLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(10); + make.centerY.mas_equalTo(self.avatarImageView.mas_bottom); + make.width.mas_equalTo(10); + }]; + + [self.coverView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.contentView); + }]; +} + +#pragma mark - Getters And Setters +- (void)setMicroModel:(XPGiftMicroUserModel *)microModel { + _microModel = microModel; + if (_microModel.microQueue.microState.position == -1) { + self.positionLabel.text = @"房主位"; + [self.positionLabel mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(23); + }]; + } else { + self.positionLabel.text = [NSString stringWithFormat:@"%d", microModel.microQueue.microState.position]; + [self.positionLabel mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(10); + }]; + } + UserInfoModel * userInfo = microModel.microQueue.userInfo; + self.avatarImageView.imageUrl = userInfo.avatar; + + self.coverView.hidden = microModel.isSelect; +} + +- (NetImageView *)avatarImageView { + if (!_avatarImageView) { + _avatarImageView = [[NetImageView alloc] init]; + _avatarImageView.layer.masksToBounds = YES; + _avatarImageView.layer.cornerRadius = 15; + _avatarImageView.imageType = ImageTypeUserIcon; + _avatarImageView.image = [UIImageConstant defaultAvatarPlaceholder]; + } + return _avatarImageView; +} + +- (UILabel *)positionLabel{ + if (!_positionLabel) { + _positionLabel = [[UILabel alloc] init]; + _positionLabel.font = [UIFont systemFontOfSize:14]; + _positionLabel.textColor = [ThemeColor mainTextColor]; + _positionLabel.textAlignment = NSTextAlignmentCenter; + } + return _positionLabel; +} + +- (UIView *)coverView { + if (!_coverView) { + _coverView = [[UIView alloc] init]; + _coverView.backgroundColor = [ThemeColor avatarCoverColor]; + _coverView.layer.masksToBounds = YES; + _coverView.layer.cornerRadius = 38/2; + } + return _coverView; +} + +@end diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.h b/xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.h new file mode 100644 index 00000000..0cbedfe5 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.h @@ -0,0 +1,16 @@ +// +// XPGiftBottomView.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPGiftBarView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.m b/xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.m new file mode 100644 index 00000000..e076e836 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPGiftBarView.m @@ -0,0 +1,200 @@ +// +// XPGiftBottomView.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "XPGiftBarView.h" +///Third +#import +///Tool +#import "ThemeColor+SendGift.h" +#import "UIImage+Utils.h" + +@interface XPGiftBarView () +///余额 +@property (nonatomic,strong) UILabel *balanceLabel; +/// +@property (nonatomic,strong) UIStackView *rechargeStackView; +///充值 +@property (nonatomic,strong) UILabel *rechargeLabel; +///去充值 +@property (nonatomic,strong) UIImageView *rechageImageView; +/// +@property (nonatomic,strong) UIView *sendOperationView; +///个数 +@property (nonatomic,strong) UILabel *countLabel; +///箭头 +@property (nonatomic,strong) UIButton *arrowButton; +///赠送 +@property (nonatomic,strong) UIButton *sendGiftButton; +@end + +@implementation XPGiftBarView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} +#pragma mark - Response +- (void)sendButtonAction:(UIButton *)sender { + +} + +- (void)rechargeButtonAction:(UIButton *)sender { + +} + +- (void)arrowButtonAction:(UIButton *)sender { + +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor= [UIColor clearColor]; + [self addSubview:self.balanceLabel]; + [self addSubview:self.rechargeStackView]; + [self addSubview:self.sendOperationView]; + + [self.rechargeStackView addArrangedSubview:self.rechargeLabel]; + [self.rechargeStackView addArrangedSubview:self.rechageImageView]; + + [self.sendOperationView addSubview:self.countLabel]; + [self.sendOperationView addSubview:self.arrowButton]; + [self.sendOperationView addSubview:self.sendGiftButton]; +} + +- (void)initSubViewConstraints { + [self mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(45); + }]; + + [self.balanceLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(15); + make.centerY.mas_equalTo(self.sendOperationView); + }]; + + [self.rechargeStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.sendOperationView); + make.left.mas_equalTo(self.balanceLabel.mas_right).offset(12); + }]; + + [self.sendOperationView mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self).offset(-15); + make.bottom.mas_equalTo(-11); + make.height.mas_equalTo(30); + make.left.mas_equalTo(self.countLabel.mas_left).offset(-13); + }]; + + [self.countLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.mas_equalTo(self.sendGiftButton); + make.right.mas_equalTo(self.arrowButton.mas_left).offset(-10); + }]; + + + [self.arrowButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(10, 10)); + make.centerY.mas_equalTo(self.sendGiftButton); + make.right.mas_equalTo(self.sendGiftButton.mas_left).offset(-10); + }]; + + [self.sendGiftButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(67, 30)); + make.right.centerY.mas_equalTo(self.sendOperationView); + }]; +} + +#pragma mark - Getters And Setters +- (UILabel *)balanceLabel { + if (!_balanceLabel) { + _balanceLabel = [[UILabel alloc] init]; + _balanceLabel.textColor = [ThemeColor mainTextColor]; + _balanceLabel.font = [UIFont systemFontOfSize:13]; + _balanceLabel.text = @"余额:10000"; + } + return _balanceLabel; +} + +- (UIStackView *)rechargeStackView { + if (!_rechargeStackView) { + _rechargeStackView = [[UIStackView alloc] init]; + _rechargeStackView.axis = UILayoutConstraintAxisHorizontal; + _rechargeStackView.distribution = UIStackViewDistributionFill; + _rechargeStackView.alignment = UIStackViewAlignmentCenter; + _rechargeStackView.spacing = 5; + } + return _rechargeStackView; +} + +- (UILabel *)rechargeLabel { + if (!_rechargeLabel) { + _rechargeLabel = [[UILabel alloc] init]; + _rechargeLabel.text = @"充值"; + _rechargeLabel.font = [UIFont systemFontOfSize:13]; + _rechargeLabel.textColor = [ThemeColor giftRechargeColor]; + } + return _rechargeLabel; +} + +- (UIImageView *)rechageImageView { + if (!_rechageImageView) { + _rechageImageView = [[UIImageView alloc] init]; + _rechageImageView.userInteractionEnabled = YES; + _rechageImageView.image = [UIImage imageNamed:@"gift_bar_recharge_arrow"]; + } + return _rechageImageView; +} + + +- (UIView *)sendOperationView { + if (!_sendOperationView) { + _sendOperationView = [[UIView alloc] init]; + _sendOperationView.layer.masksToBounds = YES; + _sendOperationView.layer.cornerRadius = 15; + _sendOperationView.layer.borderColor = [ThemeColor appMainColor].CGColor; + _sendOperationView.layer.borderWidth = 1; + } + return _sendOperationView; +} + +- (UILabel *)countLabel { + if (!_countLabel) { + _countLabel = [[UILabel alloc] init]; + _countLabel.textAlignment = NSTextAlignmentCenter; + _countLabel.textColor = [ThemeColor mainTextColor]; + _countLabel.text = @"1"; + _countLabel.font = [UIFont systemFontOfSize:13]; + } + return _countLabel; +} + +- (UIButton *)arrowButton { + if (!_arrowButton) { + _arrowButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_arrowButton setImage:[UIImage imageNamed:@"gift_bar_count_arrow"] forState:UIControlStateNormal]; + [_arrowButton setImage:[UIImage imageNamed:@"gift_bar_count_up_arrow"] forState:UIControlStateSelected]; + [_arrowButton addTarget:self action:@selector(arrowButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _arrowButton; +} + +- (UIButton *)sendGiftButton { + if (!_sendGiftButton) { + _sendGiftButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_sendGiftButton setTitle:@"赠送" forState:UIControlStateNormal]; + [_sendGiftButton setTitleColor:[ThemeColor mainTextColor] forState:UIControlStateNormal]; + [_sendGiftButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[ThemeColor confirmButtonGradientStartColor], [ThemeColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; + _sendGiftButton.titleLabel.font = [UIFont systemFontOfSize:13]; + _sendGiftButton.layer.masksToBounds = YES; + _sendGiftButton.layer.cornerRadius = 15; + [_sendGiftButton addTarget:self action:@selector(sendButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _sendGiftButton; +} + +@end diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.h b/xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.h new file mode 100644 index 00000000..b134b1c1 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.h @@ -0,0 +1,16 @@ +// +// XPGiftMiddleView.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPGiftInfoView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.m b/xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.m new file mode 100644 index 00000000..f81e1979 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPGiftInfoView.m @@ -0,0 +1,36 @@ +// +// XPGiftMiddleView.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "XPGiftInfoView.h" +///Third +#import + +@implementation XPGiftInfoView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor yellowColor]; +} + +- (void)initSubViewConstraints { + [self mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(250); + }]; +} + +@end diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.h b/xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.h new file mode 100644 index 00000000..938c2349 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.h @@ -0,0 +1,20 @@ +// +// XPGiftUsersView.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import +#import "XPSendGiftView.h" +#import "MicroQueueProtocol.h" +NS_ASSUME_NONNULL_BEGIN + +@interface XPGiftUsersView : UIView + +- (instancetype)initWithType:(SendGiftType)type; +///选中的人 送给谁礼物 +@property (nonatomic,strong, readonly) NSMutableArray *selectUserArray; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.m b/xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.m new file mode 100644 index 00000000..4e4b9196 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPGiftUsersView.m @@ -0,0 +1,169 @@ +// +// XPGiftUsersView.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "XPGiftUsersView.h" +///Third +#import +///Tool +#import "AccountInfoStorage.h" +///Model +#import "UserInfoModel.h" +#import "MicroQueueModel.h" +#import "XPGiftMicroUserModel.h" +///view +#import "XPGiftUserCollectionViewCell.h" +@interface XPGiftUsersView () +/// +@property (nonatomic,strong) UIStackView *stackView; +///全麦 +@property (nonatomic,strong) UIButton *allMicroButton; +///列表 +@property (nonatomic,strong) UICollectionView *collectionView; +///送礼物的类型 +@property (nonatomic,assign) SendGiftType type; +/// +@property (nonatomic,strong) NSArray *userArray; +///选中的人 +@property (nonatomic,strong) NSMutableArray *selectUserArray; +@end + +@implementation XPGiftUsersView + +- (instancetype)initWithType:(SendGiftType)type { + if (self = [super init]) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} +#pragma mark - Response +- (void)allMicroButtonAction:(UIButton *)sender { + sender.selected = !sender.selected; + [self.userArray enumerateObjectsUsingBlock:^(XPGiftMicroUserModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + obj.isSelect = YES; + }]; + [self.collectionView reloadData]; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor purpleColor]; + [self addSubview:self.stackView]; + [self.stackView addArrangedSubview:self.allMicroButton]; + [self.stackView addArrangedSubview:self.collectionView]; + if (self.type == SendGiftType_User) { + self.allMicroButton.hidden = YES; + } +} + +- (void)initSubViewConstraints { + [self mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(28 + 15 * 2); + }]; + + [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self); + }]; +} + +/// 查找麦序 坑位上有人的麦序 +/// @param users 麦序列表 +- (NSArray *)findSendGiftAllUsers:(NSArray *)users { + NSMutableArray * tempArray = [NSMutableArray array]; + NSString * uid = [AccountInfoStorage instance].getUid; + for (int i = 0; i < users.count; i++) { + MicroQueueModel * micModel = [users objectAtIndex:i]; + UserInfoModel * userInfo = micModel.userInfo; + if (userInfo && userInfo.uid > 0 && userInfo.uid != uid.integerValue) { ///自己在麦上不显示在送礼物列表中 + XPGiftMicroUserModel * giftUserModel = [[XPGiftMicroUserModel alloc] init]; + if ([self.selectUserArray containsObject:[NSString stringWithFormat:@"%ld", userInfo.uid]]){ + giftUserModel.isSelect = YES; + } + [tempArray addObject:giftUserModel]; + } + } + return [tempArray copy]; +} + +#pragma mark - MicroQueueProtocol +- (void)onMicroQueueUpdate:(NSMutableDictionary *)queue { + self.userArray = [self findSendGiftAllUsers:queue.allValues]; + [self.collectionView reloadData]; +} + +#pragma mark - UICollectionViewDataSource And UICollectionViewDelegate +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.userArray.count; +} + +-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + XPGiftUserCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPGiftUserCollectionViewCell class]) forIndexPath:indexPath]; + XPGiftMicroUserModel * queue = [self.userArray objectAtIndex:indexPath.row]; + cell.microModel = queue; + return cell; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + [collectionView deselectItemAtIndexPath:indexPath animated:YES]; + XPGiftMicroUserModel * queue = [self.userArray objectAtIndex:indexPath.row]; + queue.isSelect = !queue.isSelect; + [self.collectionView reloadData]; + NSString * selectUid = [NSString stringWithFormat:@"%ld", queue.microQueue.userInfo.uid]; + if (queue.isSelect) { + [self.selectUserArray addObject:selectUid]; + } else { + if ([self.selectUserArray containsObject:selectUid]) { + [self.selectUserArray removeObject:selectUid]; + } + } +} +#pragma mark - Getters And Setters +- (UIStackView *)stackView { + if (!_stackView) { + _stackView = [[UIStackView alloc] init]; + _stackView.axis = UILayoutConstraintAxisHorizontal; + _stackView.distribution = UIStackViewDistributionFill; + _stackView.alignment = UIStackViewAlignmentCenter; + _stackView.spacing = 10; + } + return _stackView; +} + +- (UIButton *)allMicroButton { + if (!_allMicroButton) { + _allMicroButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_allMicroButton setImage:[UIImage imageNamed:@"gift_all_micro_normal"] forState:UIControlStateNormal]; + [_allMicroButton setImage:[UIImage imageNamed:@"gift_all_micro_select"] forState:UIControlStateSelected]; + [_allMicroButton addTarget:self action:@selector(allMicroButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _allMicroButton; +} + +- (UICollectionView *)collectionView{ + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.itemSize = CGSizeMake(28, 35); + layout.minimumLineSpacing = 6; + layout.sectionInset = UIEdgeInsetsMake(0, 0, 0,0); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.backgroundColor = [UIColor clearColor]; + _collectionView.showsHorizontalScrollIndicator = NO; + [_collectionView registerClass:[XPGiftUserCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPGiftUserCollectionViewCell class])]; + } + return _collectionView; +} + +- (NSMutableArray *)selectUserArray { + if (!_selectUserArray) { + _selectUserArray = [NSMutableArray array]; + } + return _selectUserArray; +} + +@end diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.h b/xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.h new file mode 100644 index 00000000..2606cd8f --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.h @@ -0,0 +1,31 @@ +// +// XPSendGiftView.h +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +typedef NS_ENUM(NSInteger, SendGiftType) { + SendGiftType_Room = 1, ///房间内送礼物 + SendGiftType_User, ///送给某一个人 +}; + + +@interface XPSendGiftView : UIView + +/// 送礼物的 +/// @param type 送礼物的类型 +/// @param uid 送礼物的人 +- (instancetype)initWithType:(SendGiftType)type uid:(NSString *)uid; + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)copy NS_UNAVAILABLE; +- (instancetype)mutableCopy NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.m b/xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.m new file mode 100644 index 00000000..31bb32d4 --- /dev/null +++ b/xplan-ios/Base/UI/SendGiftView/View/XPSendGiftView.m @@ -0,0 +1,96 @@ +// +// XPSendGiftView.m +// xplan-ios +// +// Created by 冯硕 on 2021/11/9. +// + +#import "XPSendGiftView.h" +///Third +#import +///Tool +#import "XPMacro.h" +#import "ThemeColor+SendGift.h" +///View +#import "XPGiftUsersView.h" +#import "XPGiftInfoView.h" +#import "XPGiftBarView.h" + + +@interface XPSendGiftView () +/// +@property (nonatomic,strong) UIStackView *stackView; +///送礼物的人 +@property (nonatomic,strong) XPGiftUsersView *userView; +///送的什么礼物 +@property (nonatomic,strong) XPGiftInfoView *giftInfoView; +///送多少礼物 +@property (nonatomic,strong) XPGiftBarView *giftBarView; + +@end + +@implementation XPSendGiftView + +- (instancetype)initWithType:(SendGiftType)type uid:(NSString *)uid { + if (self = [super init]) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [ThemeColor giftBackGroundColor]; + [self addSubview:self.stackView]; + [self.stackView addArrangedSubview:self.userView]; + [self.stackView addArrangedSubview:self.giftInfoView]; + [self.stackView addArrangedSubview:self.giftBarView]; +} + +- (void)initSubViewConstraints { + [self mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(KScreenWidth); + make.bottom.mas_equalTo(self.stackView.mas_bottom); + }]; + + [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self); + }]; +} + +#pragma mark - Getters And Setters +- (XPGiftUsersView *)userView { + if (!_userView) { + _userView = [[XPGiftUsersView alloc] initWithType:SendGiftType_Room]; + } + return _userView; +} + +- (XPGiftInfoView *)giftInfoView { + if (!_giftInfoView) { + _giftInfoView = [[XPGiftInfoView alloc] init]; + } + return _giftInfoView; +} + +- (XPGiftBarView *)giftBarView { + if (!_giftBarView) { + _giftBarView = [[XPGiftBarView alloc] init]; + } + return _giftBarView; +} + +- (UIStackView *)stackView { + if (!_stackView) { + _stackView = [[UIStackView alloc] init]; + _stackView.axis = UILayoutConstraintAxisVertical; + _stackView.distribution = UIStackViewDistributionFill; + _stackView.alignment = UIStackViewAlignmentFill; + _stackView.spacing = 0; + _stackView.backgroundColor = [UIColor clearColor]; + } + return _stackView; +} + +@end diff --git a/xplan-ios/Base/UI/ThemeColor.h b/xplan-ios/Base/UI/ThemeColor.h index ba565051..4373455d 100644 --- a/xplan-ios/Base/UI/ThemeColor.h +++ b/xplan-ios/Base/UI/ThemeColor.h @@ -9,6 +9,7 @@ #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] +#define UIColorRGBAlpha(rgbValue,a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:(a)] NS_ASSUME_NONNULL_BEGIN @interface ThemeColor : NSObject diff --git a/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m b/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m index be4aca1e..e8bc4f35 100644 --- a/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m +++ b/xplan-ios/Main/Room/View/MenuContainerView/XPRoomMenuContainerView.m @@ -10,13 +10,16 @@ #import ///Tool #import "AccountInfoStorage.h" +#import "TTPopup.h" ///Model #import "XPRoomMenuItem.h" #import "MicroQueueModel.h" #import "UserInfoModel.h" #import "MicroStateModel.h" +#import "RoomInfoModel.h" ///View #import "XPRoomSendTextView.h" +#import "XPSendGiftView.h" #import "RtcManager.h" @@ -75,6 +78,12 @@ self.voiceButton.selected = [RtcManager instance].isRemoteMuted; } break; + case XPRoomMenuItemType_Gift: { + NSString * roomUid = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].uid]; + XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid]; + [TTPopup popupView:giftView style:TTPopupStyleActionSheet]; + } + break; default: break; @@ -214,7 +223,6 @@ [_giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateSelected]; _giftButton.tag = XPRoomMenuItemType_Gift; [_giftButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - _giftButton.hidden = YES; } return _giftButton; }