From 6c2c5d586a7d5254d3ed16747a10a6ec7008e3c4 Mon Sep 17 00:00:00 2001 From: liyuhua <15626451870@163.com> Date: Fri, 22 Mar 2024 11:54:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E6=8E=92=E5=90=8D=E5=92=8C?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=90=9C=E7=B4=A2=E6=88=BF=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 3 + yinmeng-ios.xcodeproj/project.pbxproj | 136 +++++++++++++- .../Contents.json | 22 +++ .../home_search_online_icon@2x.png | Bin 0 -> 187 bytes .../home_search_online_icon@3x.png | Bin 0 -> 222 bytes .../Contents.json | 22 +++ .../yin_home_voice_search_bg@2x.png | Bin 0 -> 515 bytes .../yin_home_voice_search_bg@3x.png | Bin 0 -> 881 bytes .../Contents.json | 22 +++ .../yin_home_voice_search_icon@2x.png | Bin 0 -> 830 bytes .../yin_home_voice_search_icon@3x.png | Bin 0 -> 1479 bytes .../yin_home_voice_top_icon@2x.png | Bin 3231 -> 3039 bytes .../yin_home_voice_top_icon@3x.png | Bin 5771 -> 5147 bytes .../Contents.json | 22 +++ .../yin_left_black_arrow@2x.png | Bin 0 -> 363 bytes .../yin_left_black_arrow@3x.png | Bin 0 -> 468 bytes .../Contents.json | 22 +++ .../yin_plane_star_send_gift_icon@2x.png | Bin 0 -> 2017 bytes .../yin_plane_star_send_gift_icon@3x.png | Bin 0 -> 2980 bytes .../yin_search_vc_iocn.imageset/Contents.json | 22 +++ .../yin_search_vc_iocn@2x.png | Bin 0 -> 570 bytes .../yin_search_vc_iocn@3x.png | Bin 0 -> 703 bytes .../Contents.json | 22 +++ .../room_send_gift_icon@2x.png | Bin 0 -> 2938 bytes .../room_send_gift_icon@3x.png | Bin 0 -> 4414 bytes .../Assets.xcassets/room/Rank/Contents.json | 6 + .../Contents.json | 22 +++ .../yin_room_rank_first@2x.png | Bin 0 -> 1768 bytes .../yin_room_rank_first@3x.png | Bin 0 -> 2064 bytes .../Contents.json | 22 +++ .../yin_room_rank_second@2x.png | Bin 0 -> 1702 bytes .../yin_room_rank_second@3x.png | Bin 0 -> 1978 bytes .../Contents.json | 22 +++ .../yin_room_rank_third@2x.png | Bin 0 -> 1753 bytes .../yin_room_rank_third@3x.png | Bin 0 -> 2097 bytes .../Security/yinmeng-ios-Bridging-Header.h | 2 + yinmeng-ios/Base/Utils/H5Utils.swift | 1 + yinmeng-ios/Base/Utils/Utils.swift | 1 + yinmeng-ios/Base/Web/WebViewController.swift | 61 +++++-- yinmeng-ios/Extension/Date/Date+.swift | 71 ++++++++ .../Extension/UIButton/UIButton+.swift | 17 +- yinmeng-ios/Extension/UILabel/UILabel+.swift | 14 +- .../Modules/Auth/VM/AuthViewModel.swift | 5 +- .../Modules/Auth/VM/YinClientInfoModel.swift | 12 ++ .../Modules/Auth/VM/YinRankH5UrlModel.swift | 13 ++ .../Modules/Home/HomeSearchNavView.swift | 115 ++++++++++++ .../Modules/Home/HomeSearchRoomCell.swift | 166 ++++++++++++++++++ .../Modules/Home/HomeSearchRoomModel.swift | 28 +++ .../Modules/Home/HomeSearchRoomVC.swift | 93 ++++++++++ yinmeng-ios/Modules/Home/HomeSearchVC.swift | 121 +++++++++++++ yinmeng-ios/Modules/Home/HomeVoiceModel.swift | 1 + .../Modules/Home/HomeVoiceSearchView.swift | 55 ++++++ .../Modules/Home/HomeVoiceUserInfoView.swift | 146 ++++++++++++--- yinmeng-ios/Modules/Home/HomeVoiceVC.swift | 39 +++- .../Room/Tool/YinRoomAudioManager.swift | 12 ++ .../Room/Tool/YinRoomTRTCManager.swift | 26 +++ yinmeng-ios/Modules/Room/VC/RoomVC.swift | 58 ++++-- .../NormalMicSeatSuperView.swift | 60 ++++--- .../View/RoomMenuView/View/RoomMenuView.swift | 17 +- .../RoomTopView/Model/YinRoomRankModel.swift | 26 +++ .../SendGift/Model/SendGiftUserModel.swift | 18 ++ .../SendGift/View/SendGiftFaceplateView.swift | 46 +++++ .../View/SendGift/View/SendGiftTopView.swift | 46 +++++ .../View/SendGift/View/SendGiftUserCell.swift | 71 ++++++++ .../View/SendGift/View/SendGiftUserView.swift | 46 +++++ yinmeng-ios/Modules/User/VM/UserObject.swift | 6 +- 66 files changed, 1644 insertions(+), 114 deletions(-) create mode 100644 yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@3x.png create mode 100644 yinmeng-ios/Modules/Auth/VM/YinClientInfoModel.swift create mode 100644 yinmeng-ios/Modules/Auth/VM/YinRankH5UrlModel.swift create mode 100644 yinmeng-ios/Modules/Home/HomeSearchNavView.swift create mode 100644 yinmeng-ios/Modules/Home/HomeSearchRoomCell.swift create mode 100644 yinmeng-ios/Modules/Home/HomeSearchRoomModel.swift create mode 100644 yinmeng-ios/Modules/Home/HomeSearchRoomVC.swift create mode 100644 yinmeng-ios/Modules/Home/HomeSearchVC.swift create mode 100644 yinmeng-ios/Modules/Home/HomeVoiceSearchView.swift create mode 100644 yinmeng-ios/Modules/Room/Tool/YinRoomAudioManager.swift create mode 100644 yinmeng-ios/Modules/Room/Tool/YinRoomTRTCManager.swift create mode 100644 yinmeng-ios/Modules/Room/View/RoomTopView/Model/YinRoomRankModel.swift create mode 100644 yinmeng-ios/Modules/Room/View/SendGift/Model/SendGiftUserModel.swift create mode 100644 yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftFaceplateView.swift create mode 100644 yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftTopView.swift create mode 100644 yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserCell.swift create mode 100644 yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserView.swift diff --git a/Podfile b/Podfile index d43d0da..b0d34e3 100644 --- a/Podfile +++ b/Podfile @@ -10,6 +10,9 @@ target 'yinmeng-ios' do pod 'Moya' pod 'MBProgressHUD' pod 'SVGAPlayer' +# 滑动标签栏 + pod 'JXCategoryView' + pod 'JXPagingView/Pager' #加载图片 pod 'Kingfisher' #cell diff --git a/yinmeng-ios.xcodeproj/project.pbxproj b/yinmeng-ios.xcodeproj/project.pbxproj index c6e8b6f..672caf6 100644 --- a/yinmeng-ios.xcodeproj/project.pbxproj +++ b/yinmeng-ios.xcodeproj/project.pbxproj @@ -37,7 +37,6 @@ 233E515B2B8C849600582F9C /* PlanetStarClickItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 233E515A2B8C849600582F9C /* PlanetStarClickItemView.swift */; }; 234E2DF02B98425800433CF7 /* RoomVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DEF2B98425800433CF7 /* RoomVC.swift */; }; 234E2DF42B9847A700433CF7 /* RoomBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DF32B9847A700433CF7 /* RoomBackgroundView.swift */; }; - 234E2DF72B984FB200433CF7 /* RoomTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DF62B984FB200433CF7 /* RoomTopView.swift */; }; 234E2DFA2B9851F000433CF7 /* UIButton+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DF92B9851F000433CF7 /* UIButton+.swift */; }; 234E2DFD2B985A7300433CF7 /* UILabel+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2DFC2B985A7300433CF7 /* UILabel+.swift */; }; 234E2E022B986D7600433CF7 /* RoomQuitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E012B986D7600433CF7 /* RoomQuitView.swift */; }; @@ -57,6 +56,20 @@ 234E2E312B9B001A00433CF7 /* RoomChatScreenView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E302B9B001A00433CF7 /* RoomChatScreenView.swift */; }; 234E2E332B9B019B00433CF7 /* RoomChatScreenHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E322B9B019B00433CF7 /* RoomChatScreenHeaderView.swift */; }; 234E2E352B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 234E2E342B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift */; }; + 23630B992BABCE52003AD25D /* HomeSearchVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630B982BABCE52003AD25D /* HomeSearchVC.swift */; }; + 23630B9B2BABCEA5003AD25D /* HomeSearchNavView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630B9A2BABCEA5003AD25D /* HomeSearchNavView.swift */; }; + 23630B9D2BAC0DEA003AD25D /* HomeSearchRoomVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630B9C2BAC0DEA003AD25D /* HomeSearchRoomVC.swift */; }; + 23630BA12BAC12F9003AD25D /* HomeSearchRoomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BA02BAC12F9003AD25D /* HomeSearchRoomCell.swift */; }; + 23630BA32BAC23BA003AD25D /* HomeSearchRoomModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BA22BAC23BA003AD25D /* HomeSearchRoomModel.swift */; }; + 23630BB02BAD2708003AD25D /* YinRoomRankModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BAF2BAD2708003AD25D /* YinRoomRankModel.swift */; }; + 23630BB52BAD2725003AD25D /* YinRoomRankView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB22BAD2725003AD25D /* YinRoomRankView.swift */; }; + 23630BB62BAD2725003AD25D /* RoomTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB32BAD2725003AD25D /* RoomTopView.swift */; }; + 23630BB72BAD2725003AD25D /* YinRoomRankItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB42BAD2725003AD25D /* YinRoomRankItemView.swift */; }; + 23630BB92BAD2CB8003AD25D /* YinRankH5UrlModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BB82BAD2CB8003AD25D /* YinRankH5UrlModel.swift */; }; + 23630BBB2BAD2EBB003AD25D /* YinClientInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BBA2BAD2EBB003AD25D /* YinClientInfoModel.swift */; }; + 23630BBD2BAD379C003AD25D /* YinRoomAudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BBC2BAD379C003AD25D /* YinRoomAudioManager.swift */; }; + 23630BBF2BAD37B7003AD25D /* YinRoomTRTCManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BBE2BAD37B7003AD25D /* YinRoomTRTCManager.swift */; }; + 238A900C2BAAC6C600828123 /* HomeVoiceSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */; }; 23EE96E02B9EB22100475D69 /* RoomMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96DF2B9EB22100475D69 /* RoomMenuView.swift */; }; 23EE96E22B9EB22F00475D69 /* RoomSendTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96E12B9EB22F00475D69 /* RoomSendTextView.swift */; }; 23EE96E62B9EE79A00475D69 /* RoomVCViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96E52B9EE79A00475D69 /* RoomVCViewModel.swift */; }; @@ -67,6 +80,11 @@ 23EE96F42BA048F100475D69 /* MicSeatGiftValueModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96F32BA048F100475D69 /* MicSeatGiftValueModel.swift */; }; 23EE96F62BA061DE00475D69 /* RoomMsgListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE96F52BA061DE00475D69 /* RoomMsgListModel.swift */; }; 23EE96FA2BA1A3A300475D69 /* YinSpeak.svga in Resources */ = {isa = PBXBuildFile; fileRef = 23EE96F92BA1A3A200475D69 /* YinSpeak.svga */; }; + 23EE97012BA29B3200475D69 /* SendGiftFaceplateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE97002BA29B3200475D69 /* SendGiftFaceplateView.swift */; }; + 23EE97032BA29F1E00475D69 /* SendGiftTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE97022BA29F1E00475D69 /* SendGiftTopView.swift */; }; + 23EE97052BA2A67300475D69 /* SendGiftUserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE97042BA2A67300475D69 /* SendGiftUserView.swift */; }; + 23EE97072BA2AC8300475D69 /* SendGiftUserCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE97062BA2AC8300475D69 /* SendGiftUserCell.swift */; }; + 23EE970F2BA3006800475D69 /* SendGiftUserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE970E2BA3006800475D69 /* SendGiftUserModel.swift */; }; 25C63BC8F805551E8754E409 /* Pods_yinmeng_ios.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2F175918AD0811681497739 /* Pods_yinmeng_ios.framework */; }; E81A7BAE2B885B20009E736E /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = E81A7BAA2B885B20009E736E /* Base64.m */; }; E81A7BAF2B885B20009E736E /* MAIDESEncryptTool.m in Sources */ = {isa = PBXBuildFile; fileRef = E81A7BAB2B885B20009E736E /* MAIDESEncryptTool.m */; }; @@ -169,7 +187,6 @@ 233E515A2B8C849600582F9C /* PlanetStarClickItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetStarClickItemView.swift; sourceTree = ""; }; 234E2DEF2B98425800433CF7 /* RoomVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomVC.swift; sourceTree = ""; }; 234E2DF32B9847A700433CF7 /* RoomBackgroundView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomBackgroundView.swift; sourceTree = ""; }; - 234E2DF62B984FB200433CF7 /* RoomTopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTopView.swift; sourceTree = ""; }; 234E2DF92B9851F000433CF7 /* UIButton+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+.swift"; sourceTree = ""; }; 234E2DFC2B985A7300433CF7 /* UILabel+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+.swift"; sourceTree = ""; }; 234E2E012B986D7600433CF7 /* RoomQuitView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomQuitView.swift; sourceTree = ""; }; @@ -189,6 +206,20 @@ 234E2E302B9B001A00433CF7 /* RoomChatScreenView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenView.swift; sourceTree = ""; }; 234E2E322B9B019B00433CF7 /* RoomChatScreenHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenHeaderView.swift; sourceTree = ""; }; 234E2E342B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChatScreenUserChatCell.swift; sourceTree = ""; }; + 23630B982BABCE52003AD25D /* HomeSearchVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchVC.swift; sourceTree = ""; }; + 23630B9A2BABCEA5003AD25D /* HomeSearchNavView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchNavView.swift; sourceTree = ""; }; + 23630B9C2BAC0DEA003AD25D /* HomeSearchRoomVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomVC.swift; sourceTree = ""; }; + 23630BA02BAC12F9003AD25D /* HomeSearchRoomCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomCell.swift; sourceTree = ""; }; + 23630BA22BAC23BA003AD25D /* HomeSearchRoomModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomModel.swift; sourceTree = ""; }; + 23630BAF2BAD2708003AD25D /* YinRoomRankModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRoomRankModel.swift; sourceTree = ""; }; + 23630BB22BAD2725003AD25D /* YinRoomRankView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YinRoomRankView.swift; sourceTree = ""; }; + 23630BB32BAD2725003AD25D /* RoomTopView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomTopView.swift; sourceTree = ""; }; + 23630BB42BAD2725003AD25D /* YinRoomRankItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YinRoomRankItemView.swift; sourceTree = ""; }; + 23630BB82BAD2CB8003AD25D /* YinRankH5UrlModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRankH5UrlModel.swift; sourceTree = ""; }; + 23630BBA2BAD2EBB003AD25D /* YinClientInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinClientInfoModel.swift; sourceTree = ""; }; + 23630BBC2BAD379C003AD25D /* YinRoomAudioManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRoomAudioManager.swift; sourceTree = ""; }; + 23630BBE2BAD37B7003AD25D /* YinRoomTRTCManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinRoomTRTCManager.swift; sourceTree = ""; }; + 238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceSearchView.swift; sourceTree = ""; }; 23EE96DF2B9EB22100475D69 /* RoomMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMenuView.swift; sourceTree = ""; }; 23EE96E12B9EB22F00475D69 /* RoomSendTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSendTextView.swift; sourceTree = ""; }; 23EE96E52B9EE79A00475D69 /* RoomVCViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomVCViewModel.swift; sourceTree = ""; }; @@ -199,6 +230,11 @@ 23EE96F32BA048F100475D69 /* MicSeatGiftValueModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MicSeatGiftValueModel.swift; sourceTree = ""; }; 23EE96F52BA061DE00475D69 /* RoomMsgListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMsgListModel.swift; sourceTree = ""; }; 23EE96F92BA1A3A200475D69 /* YinSpeak.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = YinSpeak.svga; sourceTree = ""; }; + 23EE97002BA29B3200475D69 /* SendGiftFaceplateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftFaceplateView.swift; sourceTree = ""; }; + 23EE97022BA29F1E00475D69 /* SendGiftTopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftTopView.swift; sourceTree = ""; }; + 23EE97042BA2A67300475D69 /* SendGiftUserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftUserView.swift; sourceTree = ""; }; + 23EE97062BA2AC8300475D69 /* SendGiftUserCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftUserCell.swift; sourceTree = ""; }; + 23EE970E2BA3006800475D69 /* SendGiftUserModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftUserModel.swift; sourceTree = ""; }; A9FB906EB4D17C552C15A2B3 /* Pods-yinmeng-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-yinmeng-ios.debug.xcconfig"; path = "Target Support Files/Pods-yinmeng-ios/Pods-yinmeng-ios.debug.xcconfig"; sourceTree = ""; }; B2F175918AD0811681497739 /* Pods_yinmeng_ios.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_yinmeng_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CB0AC98C54C1D41FA4CA102B /* Pods-yinmeng-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-yinmeng-ios.release.xcconfig"; path = "Target Support Files/Pods-yinmeng-ios/Pods-yinmeng-ios.release.xcconfig"; sourceTree = ""; }; @@ -341,6 +377,7 @@ 234E2DED2B98411800433CF7 /* View */ = { isa = PBXGroup; children = ( + 23EE96FB2BA29AFF00475D69 /* SendGift */, 23EE96DA2B9EB17D00475D69 /* RoomMenuView */, 234E2E2B2B9AFCDB00433CF7 /* RoomChatScreenView */, 234E2E122B99F21600433CF7 /* MicSeatView */, @@ -355,6 +392,8 @@ 234E2DEE2B98411800433CF7 /* Tool */ = { isa = PBXGroup; children = ( + 23630BBC2BAD379C003AD25D /* YinRoomAudioManager.swift */, + 23630BBE2BAD37B7003AD25D /* YinRoomTRTCManager.swift */, ); path = Tool; sourceTree = ""; @@ -377,7 +416,8 @@ 234E2DF52B984FA800433CF7 /* RoomTopView */ = { isa = PBXGroup; children = ( - 234E2DF62B984FB200433CF7 /* RoomTopView.swift */, + 23630BB12BAD2725003AD25D /* View */, + 23630BAE2BAD26F7003AD25D /* Model */, ); path = RoomTopView; sourceTree = ""; @@ -559,6 +599,24 @@ path = Tool; sourceTree = ""; }; + 23630BAE2BAD26F7003AD25D /* Model */ = { + isa = PBXGroup; + children = ( + 23630BAF2BAD2708003AD25D /* YinRoomRankModel.swift */, + ); + path = Model; + sourceTree = ""; + }; + 23630BB12BAD2725003AD25D /* View */ = { + isa = PBXGroup; + children = ( + 23630BB32BAD2725003AD25D /* RoomTopView.swift */, + 23630BB42BAD2725003AD25D /* YinRoomRankItemView.swift */, + 23630BB22BAD2725003AD25D /* YinRoomRankView.swift */, + ); + path = View; + sourceTree = ""; + }; 23EE96DA2B9EB17D00475D69 /* RoomMenuView */ = { isa = PBXGroup; children = ( @@ -600,6 +658,50 @@ path = Tool; sourceTree = ""; }; + 23EE96FB2BA29AFF00475D69 /* SendGift */ = { + isa = PBXGroup; + children = ( + 23EE96FC2BA29AFF00475D69 /* ViewModel */, + 23EE96FD2BA29AFF00475D69 /* Model */, + 23EE96FE2BA29AFF00475D69 /* View */, + 23EE96FF2BA29AFF00475D69 /* Tool */, + ); + path = SendGift; + sourceTree = ""; + }; + 23EE96FC2BA29AFF00475D69 /* ViewModel */ = { + isa = PBXGroup; + children = ( + ); + path = ViewModel; + sourceTree = ""; + }; + 23EE96FD2BA29AFF00475D69 /* Model */ = { + isa = PBXGroup; + children = ( + 23EE970E2BA3006800475D69 /* SendGiftUserModel.swift */, + ); + path = Model; + sourceTree = ""; + }; + 23EE96FE2BA29AFF00475D69 /* View */ = { + isa = PBXGroup; + children = ( + 23EE97002BA29B3200475D69 /* SendGiftFaceplateView.swift */, + 23EE97022BA29F1E00475D69 /* SendGiftTopView.swift */, + 23EE97042BA2A67300475D69 /* SendGiftUserView.swift */, + 23EE97062BA2AC8300475D69 /* SendGiftUserCell.swift */, + ); + path = View; + sourceTree = ""; + }; + 23EE96FF2BA29AFF00475D69 /* Tool */ = { + isa = PBXGroup; + children = ( + ); + path = Tool; + sourceTree = ""; + }; 4B36689ACEFDA475774E1FD5 /* Pods */ = { isa = PBXGroup; children = ( @@ -760,6 +862,8 @@ isa = PBXGroup; children = ( E86A43D42B8774B70084C04D /* AuthViewModel.swift */, + 23630BB82BAD2CB8003AD25D /* YinRankH5UrlModel.swift */, + 23630BBA2BAD2EBB003AD25D /* YinClientInfoModel.swift */, E8D15A9E2B89AED500369467 /* AuthManager.swift */, E8D15AA02B89AF4F00369467 /* UserTokenObject.swift */, E8E4AAB62B8F95CA0096D77C /* AuthAppleManager.swift */, @@ -877,6 +981,12 @@ isa = PBXGroup; children = ( E8D15AAF2B8AFFCE00369467 /* HomeVoiceVC.swift */, + 238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */, + 23630B982BABCE52003AD25D /* HomeSearchVC.swift */, + 23630B9C2BAC0DEA003AD25D /* HomeSearchRoomVC.swift */, + 23630BA02BAC12F9003AD25D /* HomeSearchRoomCell.swift */, + 23630BA22BAC23BA003AD25D /* HomeSearchRoomModel.swift */, + 23630B9A2BABCEA5003AD25D /* HomeSearchNavView.swift */, 2311D6AC2B9058AA001C70AB /* HomeVoiceModel.swift */, 2311D6A62B8F2CFA001C70AB /* HomeVoiceChooseItemVeiw.swift */, 2311D6A82B8F405F001C70AB /* HomeVoiceChooseTypeView.swift */, @@ -1137,11 +1247,15 @@ E86A43AE2B85DFEA0084C04D /* Color+.swift in Sources */, E8479E482B8DD6E1009AF878 /* ChatTextCell.swift in Sources */, E8D15A9F2B89AED600369467 /* AuthManager.swift in Sources */, + 23630BB02BAD2708003AD25D /* YinRoomRankModel.swift in Sources */, E8479E382B8DC5CD009AF878 /* ChatListVC.swift in Sources */, E89F19AF2B91C00F0098E797 /* BindMobileVC.swift in Sources */, + 23EE970F2BA3006800475D69 /* SendGiftUserModel.swift in Sources */, + 23EE97012BA29B3200475D69 /* SendGiftFaceplateView.swift in Sources */, 234E2DFA2B9851F000433CF7 /* UIButton+.swift in Sources */, E86A43B02B85E11B0084C04D /* BaseNavigationViewController.swift in Sources */, E86A43E82B884C5E0084C04D /* String+.swift in Sources */, + 23630BBD2BAD379C003AD25D /* YinRoomAudioManager.swift in Sources */, 2311D6D12B91DDDF001C70AB /* UserPayViewModel.swift in Sources */, 2311D6B12B9062A3001C70AB /* HomeVoiceFollowCell.swift in Sources */, 234E2E312B9B001A00433CF7 /* RoomChatScreenView.swift in Sources */, @@ -1150,18 +1264,23 @@ E8E4AAB72B8F95CA0096D77C /* AuthAppleManager.swift in Sources */, E89F19452B917DBA0098E797 /* ChatSendVoiceView.swift in Sources */, 23EE96EE2B9F27E200475D69 /* MicSequenceModel.swift in Sources */, + 23630BBB2BAD2EBB003AD25D /* YinClientInfoModel.swift in Sources */, E8D15AC22B8C703C00369467 /* UserFunctionView.swift in Sources */, 234E2E1E2B9AB43700433CF7 /* RoomNormalMicSeatView.swift in Sources */, 2311D6AF2B906148001C70AB /* HomeVoiceFollowView.swift in Sources */, + 23630B9D2BAC0DEA003AD25D /* HomeSearchRoomVC.swift in Sources */, E86A43DA2B877A840084C04D /* AppConfigObject.swift in Sources */, 2311D6BC2B909A4F001C70AB /* HomeVoicePublishView.swift in Sources */, + 23630BB52BAD2725003AD25D /* YinRoomRankView.swift in Sources */, 2311D6AD2B9058AA001C70AB /* HomeVoiceModel.swift in Sources */, 2311D6AB2B9024A9001C70AB /* HomeVoicePlayMusicItemView.swift in Sources */, E8D15AA62B89B0C600369467 /* List+.swift in Sources */, 234E2E042B986D8400433CF7 /* RoomQuitModel.swift in Sources */, 234E2E0A2B98779900433CF7 /* RoomQuitUserInfoEmptyCell.swift in Sources */, + 238A900C2BAAC6C600828123 /* HomeVoiceSearchView.swift in Sources */, E81A7BAE2B885B20009E736E /* Base64.m in Sources */, 2311D6D72B91EF62001C70AB /* PlanetStarPopUpView.swift in Sources */, + 23630BB92BAD2CB8003AD25D /* YinRankH5UrlModel.swift in Sources */, 234E2E352B9B06E800433CF7 /* RoomChatScreenUserChatCell.swift in Sources */, E8479E462B8DD5BF009AF878 /* Date+.swift in Sources */, E81A7BB22B886299009E736E /* HUDTool.swift in Sources */, @@ -1184,7 +1303,6 @@ E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */, 234E2E202B9AB44800433CF7 /* MicSeatSuperView.swift in Sources */, E8D15AB82B8B003C00369467 /* UserInfoVC.swift in Sources */, - 234E2DF72B984FB200433CF7 /* RoomTopView.swift in Sources */, E86A43B82B85F0B80084C04D /* AuthLaunchVC.swift in Sources */, E8E4AB252B901E400096D77C /* ChatMoreMenuCell.swift in Sources */, 2311D6BA2B908D01001C70AB /* UserPayViewController.swift in Sources */, @@ -1205,14 +1323,19 @@ E89F19492B919EB80098E797 /* ChatVoiceCell.swift in Sources */, 234E2E062B986E2100433CF7 /* Enum.swift in Sources */, 23EE96EC2B9F273A00475D69 /* MicSeatModel.swift in Sources */, + 23630BB72BAD2725003AD25D /* YinRoomRankItemView.swift in Sources */, + 23630BA12BAC12F9003AD25D /* HomeSearchRoomCell.swift in Sources */, E8D15AB62B8B002700369467 /* ChatVC.swift in Sources */, E8E4AB182B9019E50096D77C /* ChatKeyboardView.swift in Sources */, + 23630BBF2BAD37B7003AD25D /* YinRoomTRTCManager.swift in Sources */, + 23630BA32BAC23BA003AD25D /* HomeSearchRoomModel.swift in Sources */, E8E4AB232B901E0C0096D77C /* ChatMoreMnueConfig.swift in Sources */, E86A43C62B862CC70084C04D /* UIImage+.swift in Sources */, E8E4AB212B901CD50096D77C /* ChatMoreMenuView.swift in Sources */, E86A43D32B8773C90084C04D /* APPUtils.swift in Sources */, 23EE96E62B9EE79A00475D69 /* RoomVCViewModel.swift in Sources */, E86A43CB2B874C6F0084C04D /* AuthPrivacyView.swift in Sources */, + 23630BB62BAD2725003AD25D /* RoomTopView.swift in Sources */, 234E2E0C2B9879D400433CF7 /* RoomQuitClickCell.swift in Sources */, 234E2DFD2B985A7300433CF7 /* UILabel+.swift in Sources */, E8D15AC52B8C90D400369467 /* AboutUsVC.swift in Sources */, @@ -1224,12 +1347,15 @@ E86A43BA2B85F1360084C04D /* AuthLoginVC.swift in Sources */, E8D15ABC2B8B87BA00369467 /* UserViewModel.swift in Sources */, E8479E432B8DD077009AF878 /* ChatUIConfig.swift in Sources */, + 23EE97032BA29F1E00475D69 /* SendGiftTopView.swift in Sources */, 234E2E252B9AB64700433CF7 /* NormalMicSeatCell.swift in Sources */, E8479E4D2B8DDBC5009AF878 /* ChatAttributeTool.swift in Sources */, E81A7BAF2B885B20009E736E /* MAIDESEncryptTool.m in Sources */, + 23630B9B2BABCEA5003AD25D /* HomeSearchNavView.swift in Sources */, E8D15AA82B89B74700369467 /* YMRequestX.swift in Sources */, E8E4AB1D2B901B9D0096D77C /* ChatKeyboard+.swift in Sources */, 2311D6C62B917949001C70AB /* HomeVoiceRecordBtnView.swift in Sources */, + 23EE97072BA2AC8300475D69 /* SendGiftUserCell.swift in Sources */, 234E2DF02B98425800433CF7 /* RoomVC.swift in Sources */, 2311D6A72B8F2CFA001C70AB /* HomeVoiceChooseItemVeiw.swift in Sources */, E8D15AB02B8AFFCE00369467 /* HomeVoiceVC.swift in Sources */, @@ -1247,7 +1373,9 @@ 2311D69D2B8DC311001C70AB /* PlanetStarModel.swift in Sources */, E89F19B32B91E2C00098E797 /* PasswordSetVC.swift in Sources */, 2311D6CB2B91BBF2001C70AB /* RecordVoiceManager.m in Sources */, + 23630B992BABCE52003AD25D /* HomeSearchVC.swift in Sources */, 2311D6C42B917619001C70AB /* HomeVoiceRecordView.swift in Sources */, + 23EE97052BA2A67300475D69 /* SendGiftUserView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/Contents.json new file mode 100644 index 0000000..488fc7f --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "home_search_online_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "home_search_online_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@2x.png b/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..30181cdd0da95512088861d3fb8c92e62dba1455 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^B0wy}!VDx={(Gzpq!a^uLR^8g@$BEmvwoY*{sSb9 zX8kgr^~Y$|Z{wMNjKCsMIWt&+invOG{DK*tKlS>)e5PZ3jMAa5LqJh`PZ!4!j_b(` zjLwN{5*MO4($__`cAt!6NKeykHr_kUVP?V^L&kGGQC!JPR}ai^aN!ev;viubl9ph= dl;oVsaNk^S#=VQ$M}bB$c)I$ztaD0e0svFGK+pgH literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@3x.png b/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f350dd43cf78ecb0958dda7f568bf5b4edd8bf7c GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^azHH2!VDy5URF{9QtAOdA+A8$c-9}|nZL~E{xY8V z+i1=Yvl+jQXF<>}qgg<~|3EH_W2y;IDNjj|UogY#X2FRnQXej@T*MW*S79$uJj&C> zF+}2Wasz|1V=7z9g5qZaT=CD&IEwt6X`FuILGkijhlk5cb}al*drrpj;q^I|eGi;H zc4Ka)E+S1eB5o$^uDgIXMUt5)uL`6K7qM4b(4O666=m@bieHILG_f_s{L!ymbE5 z%7RcntyaM_puNeSE{-7;x8B~3%sXtr;~MBS#pe8-|8ch$F<-jo`8m@5&SutwY^q-U zW$S)fJzwYBSg*e|c3$}UZ(BB{hJ7mvy4PiU*gfp~qDwEniJx!eKAqP;MYEtVc;oJG zY6X>N^PayFny?|nx{!xa@NnY(DRv5r^}iiH_{-}h|LcxyhcDvT9rf-z4b~u+8 z&-FXr(RZW&oOsV!Z<^UvcJ5ugUqS0LV|Q`2F`G;8w^bMJPoLT~GnX+^T6NmCoUotH z+}=~AqGsQg64-W2M!+mMIrH>2)|S$1Y%N=l>3K#aHEva{yLcr$JSz^qOG6ix+1#&al#n#mmD)Q;9_d~j&iT#x$H;6#n~4R3m` sUYzQdZZK_)b@N7v-15qP_uG3J)Rknf-n-y#3XBZ~Pgg&ebxsLQ0C^(MGXMYp literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@3x.png b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..81dde877aa59cc0af549daef539f135f3e7273e9 GIT binary patch literal 881 zcmV-%1CIQOP)ba9~~YZ9UUJX9v~hb zARiwe9v&VZ9v&SXARQeY000^t9v>YZARQhb%<{_m0000RbW%=J0Pg17s0R=h_l`3w zAK$#WoPl^_UQI_n1UaE{NEW2fqJG$-Iwy%AG__fiK`0ycdOW3x81QHbJCaP^Pz1jumDYaIA?uD z-v&-)EXXRfz5Y=?aWrFrnp4*2jr(;47HPd7^*NVasK8={-9?W}bF9Fk#X0FgLtBBx zYX?1KqS}B7VbXo6tAG(*(j8?}0W&s5A1d4iVM;9ez(Dy7W5S?!4V=#~Ck}c?;e3Wc zp-?}=leg>WM7{x|Hc79MKf|m}uS^v%Ya+0NCojXhL_ZQtYm;ux6)bHFb%-idi%=>OQu+DmNs(=G0Jz<^ZU;A-%p+Mi(k8|jz>x!kX5h%`%qTE85;DUY;YiCkU3k(n@Endb ztfYV^Czb}mk#%OR8ywlQcoU9WXJM)I1(?qF;~E}SiM6tX**6pP+exER8qQ1p(0GaBZ^K{p8RVB2$GM;#6O zV$p{RSqBW+6y1@?qhUsubl*fF4HLqohYWNo!GLzqgVN015DORQq{m%$)E)TV&Yk1{ z2m(PAZKf6o1{p%+{ulKK23gpPdWWc8eZkaq)0$N91qY$dl4u=w6lg#o)0sYsR-sJ_ zf_P;k?ch-@h8jdLwhpFk?ntqPJdMU$!w|k3?#4J%UH$0z^D-56XFWwo;Y#h;K75341l6opE6}iLqo&SqeqV%IkIQZ9-!d#>C@}#>XMU_=gpfpfByXa`}gkzgYDb5Z`rbC z$&w`-H*Q?FZr$R=i#KoH3}gUBX3w6zd-v|%-rmZ}%JTB^zP`RmlO_R81A<+wjE;^DpnJ;7%BD@5mY$xT zn3z~nQUWx2^5n_d+S)){fEt0yfEt11(xpp*wgVjrbSh9};lhPL_S&^;H*DAdv<^rD zWq}N!k9O?X0a09ATievs)Ya7m6r3<&LUwj`VPPTA#xrNmoIZWJC#pUW7)Eg=L4Lsu z|Ni{b)6rD?`|E37sFR(v@b9lL?%%t8;^=`b^ZVLbVq)z0*?)a_`QrMuD`(H1TDNND z@+I?nnu;SLTwE+nl*EO;zj^uS*7YL?_if+0Y5kI^lRDd5>k11J!h(Iw)l@h{Vkd0} z#!9}Yi(`nz>8+Qq2OV;dXnQCUxUxy%((1jJMV8#Ge*g9E@BQ4yk2kca@X5U>|MvIu z8T;Ln*L>3F{AJWRb?W6F{U6GbzUR0Y1m<~9SJqs1XT~GH+FNIjtYWa8b&i$k>z9RW zNtK7v#2k8`SDVU*3$lxantW?9J1d-j;zp>9gE>>Kx8#Xpj-Y3bw|lj|pNQ3Z7Z~h+ zXkwDL%%s0zGhDyl4vb4T(zv}^VU>kS*N2lu{GsY0t+RBpKRjtE+Mwpmvu$nw!?M(w z|9HI|&T(Ez%y(@_OllH23EPiK~Lcuef6@ljT`2i wo+s#R81t4f{FH%cTXbqfjP!NKr~IE;xmbc^-s&{+0VA2g)78&qol`;+0G2AH5&!@I literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@3x.png b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..37b2d30705ca21755c20ece0fd2b33da291ba50f GIT binary patch literal 1479 zcmXAo3pA8z7{@=CDH%e?rDZv7iXy2NsZ>j2-7jevt<4TyTtgZe!ZLE1Wn3~b#(gpv z<1(7T*r8^SYm7^1Q&OuP$*DvUVxMiFbH49=zxTZV|MPpE=X_*WXB$O%O?d=C6zyy= zZm^pD_sGe>TTnoMk04SXT^+I3@QKIcU0hrk3`S>XXGTUwa&j^njpp%q6%`e*4-E}v zu~GEkVi#DMMp=+#>SSFm9@9G3x&ee)YPh~ zD!6m|Th!Flz?zwv$z(FARBBREQfX z1dWZ2-~;EiwY4D0&(8-o2yjkJOsuc32g8_{81T%_&IbRitSkT1xk+3d8m zG_XxcNr3_Z44MPAH#IeZ5K;pJ00SpPUS3{tadCQjI&|QF7(fLE=n|xBXlMWikke>1 z@Bx1S19K1p4-^Q%VPRp=tDKx1P{B~*;^Lr7etv%L?(RWBLC}i+{{Df10kK#-GBPqc zI@;UY+tt-IJUraf(*qcfA3ugMK`rCs<06p=df3|93VC6~hfK2gF!daQoAWtDSy6Li zj|ysOGyr#4LwyTseQo8#yRnBwQ3My+FJGo7`?{J6Vu;uM@ecNu#``rCHda@b7Z)TF z$&05?Ct$>_f)+l9!)BJ>Eh@;%pd=E4z1+{7JZ|`drjn9^{OZcb`FY99smZa?A#s0y zZ+E*$$mjF8^~`ccSz!S^|8`bZW(q0fGTsY^b#gK{Fwm2uJ~K>45a|Uwj3w5#do1^I zq^6H@Qp2uoSwCm-1p>2?@@rSi19T%`NO}2@c_=I1CbvURzY;A#FL@pOZQ8qd`O)C~ zcK^?nM<~%j3$~V`ySv#_wC{{QF+cRFi?3TQNcp{#$PE8@ggFy&MTe-F(RJE(OsrD_O^RyBN>}Q+Te?8ix zGNCgUH?U>8E&xjvOI;dBrWv1%-;g(*pVcFE8^!A6hV0^SHQiqmrHr-q=5EMpn=&(; zwqb`3lii*4uXeF6UJH`@wXxISwNydy9PN1m$J?Nx>zFX{mk7roOHb`Q&%|37DDiJX zcHHpvRaDN^*!FgNM;F5=+|k!*F@F2aTe&S$ogqvLjHFuMTI9+nUYz8>Fh@!$}901(PY%j}fug z&1%Uv_=9E>xNg)*jN0IafpFiIo&J4VblT3o6OBm>72?o=aMp_%FOR9d&KMVw(!67o z?|RpuIFMw4Tbt)0ayPA%={D)A<)}_w%^y|u*4R}O>2ED0pTgIV({HB5%}?3rN6uki zne;D(Ry^R=)^Z;_sjh#{{rjl(LGoO>U4Y&0yxS_e8YQjgDo=R~D$lGa(KlH+ce?*L oThuzyQbj(G4z<@XU9Z|l0wpc{B>(^b literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@2x.png index caef05dd12cc327a87ff36ac2fc68781e7564969..33e515641fdd6a83b978fb43545c80985800ddb3 100644 GIT binary patch literal 3039 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 M*4oL6V~MBy563imV*mgE literal 3231 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 literal 5771 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 JrKg-D{|69jUp)W- diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/Contents.json new file mode 100644 index 0000000..4d38b74 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_left_black_arrow@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_left_black_arrow@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..586a822e3cbca2d145b9622b794a2133ba39768e GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q3?%1AoYnzSQ2{<7u0UEtLqlC%T}w*~$Up{a zYHF&gs`B#kKv^^Zlmd#t6+>i!T%foL7y#LUnf;DH(`8G7{DK*NKVkcNbX~f?t~~F@ z*SD@ruk_fqxII4H(b7~|@=d*?6Hwt|PZ!4!kK=DIdkeJ~aJU8v{om%+Tc7)F|5>rH z3pUGleh%ggbyyklYJS#xqLvW%n727V`^=Z^wo2j??|Oc7 zoA{IQ#MH*m*VU$4D`-y@RWMfHpaL{CK#f2EQB(Kk!cL$CawS22!3@=`Ki@wU{Blu&dspA<2hr~O zYnP{l*xsBYe$+2l>o|v>2Ll5mho_5UNW|f{*CYFy4Mbc5`6Y}k&hR;3y7%8Gn)m7d ze;P|XD$5z&r#Y$yOj7Zj^yTT)Tb8kt&fZ*>VtRefrTD(Ayv{zegY%bNbt&HbGDoj+ zS=-HbCYN6@rLE1#^fo_xJ3j5};tbvX(>894B0rqJc{pai&F8Ck6CT-FFZx+xz`iIl z(M9RJjO>}ljCIo^zu0WHOVDd;PnuF2a^%A$_QNh8pR8`|{B~pa@$L?(w+r142hUzp zX8U$(H-ZnV@>Qm&xAgK+@%}nO658H7)KFVdQ&MBb@00yYL8UO$Q literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/Contents.json new file mode 100644 index 0000000..93e2f9e --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_plane_star_send_gift_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_plane_star_send_gift_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..790af3543a6786d7925ef0e1e56a790e8c52d406 GIT binary patch literal 2017 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 X1-8|qervt}(+7j6tDnm{r-UW|r#)Bo literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/Contents.json new file mode 100644 index 0000000..45d2931 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "room_send_gift_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "room_send_gift_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@2x.png b/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e29a190b312018f567d22f3fa1a4d6e66920dcb9 GIT binary patch literal 2938 zcmV-=3x)KFP)5})%!u!j;`uU6a`HJ|<%lp`$`0$SQ|GPu9FaMxE|Eo3s z|EoP{s{dx8|No&knneG`EB*iKWoLf>j!XY%i~s&^9{-jI@3Gx`6- zGS4mg?_~DoPWJzvMQE7+|D;K1bpP^m_WorT=xz3Ah5vcI{;R|LmB0M`iT&b2_pmwr z!8ZHzjrz+t`v0s;xHkOSPWS6s_HwNLaiadNMf{(^``tPC@UUC|wladh{o-8q$H@QG zqyBM${_cYK%g_Jeng4Z}{&$W3f?)lLTK&kp{I^f~!b1AHjrsq?M1iCIkx~7N!2E-5 z{F_t!x1##ELHf9E`Po4D@#A&4$NZ6L`@>WD&qVnBuSWl|F3__5dw%_hxBQf_{D_MD z#IgINq5GF!`=(F(#D4gGu>FLV{i8+wqpka-V*B}k`p%2_w0!xuU-`{X`2M*}bZ`B5 zW&MY&{F0*lk$wEKxBIlN`mUAwpmzGFZu-h?_`_rP|Mc7MzGMBAE9{g1ad!Tdmi)$> z`_EkX;d=MxiTtFu`k=ZQ_7*-^;F;=E-#Roi_i8Ab)}0|9=?fn|AS^Rd9p!n4HSc zs)z5GPVSLN?21B-v)GKA*urbRrlz^R%cZ`GrPJ1t{KQ|Tl)taVwz99Vt&*cTBf4b( z001C#QchC<7$6MmdU#<@CFjn~v!$a}J>=rol+W|nk>|{`vXjXQpDnTg00?GDL_t(o z!=2doU(Hb*$MJjJwuY!|E-sO5nPtn)Ol7YqL|aNjNl_{zq$pBWh>(>T*?aFl#rt#4 zx!?2ci^!||aL?n>)90M~?fbotbPZ?gY~^I%G7`0PbFy-_)%|b!X07epgoH#=+1c5V zkr^3n+*;e{8!s7}IkgB03E6!0>S5{#D?2+QBcr*KjiGTvS=ooI1vGp1d1?=D$Bs=1 zpqrJx5mbw{A)6sBTefV@c2@EB;^N{Rh`ckQ8O{HdYep1FbLPz1h7M61Hf#WQ`t<2* z*Gfylg*LbT2g>587{bYG^O4Sq)e{S+I(@Rz{k`ukS)@ z#R8?-qMVDGHf`LvqN0Nb<5N@1nASmSHPcw~UDV743)rB+2M>man>B0A;kO8pmUfG< zWBYZJ(juzs z#}p5b&$YeGTl|2RDK9|5Vpw0oa`Kas@-C`3su!DtCAav|!^6Yd`@uV5efRdDUJO#K zzJ0?ZFj{_6`K5EM`CHmN?YZ$$Zcd3|{?la8y-2YGvYq&(&pFcd+f6(n7{c*?T= zVB0X4ydvJh0#%rvUibmW^)j{)d3pJGKPZwGu(*W$3k4X>POlmaw?SBfLZ3ani88tO zIqCl6`Ad_#yUCOe*~{mvu<$*4G_ZsV1;@&j(G2!9n6QXiTw7b4;_U;Aus(gB)y z&4yu4A&1Xz2ez17+-U$4Bx$2P1y){p%8?y^n@C_gcP?JcuLy5VH!rhpYL-3fU=h|m zH#h27c{P6vn$ci~U;)F)Kk(6X>n7`#cKrcao}NPpOFLFw$@bY=U}O>IrRnx9)@|+j z30MrT?}&zi0#O&>=j5_≀ z(Nw=LcUWIE%f=I)o}*y_Te>tV?JN$hiO!h~wqXe{vPL{Gn%wJE=*23mziKi*^+d4D zSY?p2&MNYVz}PLd*N0e>_QzP-)!0vFi(@sFL6$lvV8t7NnQw!2v9U&V!CP6u^-nDJ zWgM*fn4``un_=tLDYw)YFY6s!ut>dDSodDc)xC4)flCt;fz4RcO4l;`$c|!I>p+QH z>f@77dQVr{>dV?XUH0USr?fbB;KqzK79889wiqTeW76*p3>3G31tdlvAS_6iAuw)% z`XeSIOj=#k*rpw)ckNoQJb{2cd^EH{?9m%Rku@*?*cLU0PdD=&WTgb4M3=`H&vZmdC_-L5Kf=5!olz=I7VUqz10)effH^7asto7?x zuT~zi_aB}dCL_!jnDmDM6LYb_%$SSLDPvRV>8vcmghkjGHHHY2oqP?5TO6B57%o~X zVAry;GJ%1D#W9%~lm3{KucXxpR^S$fS?Zh>tb!;s2-pB5FeAr|k_RTOPGYc$e)vVV zZGNWoT2)qNW(6?*?7wevA0RXKC#%2F{CdoQ0l+}PVpt&GrJn^pL%M|mDDyR^`=hj3`j^{SHi_=5xqZ0cmCSUy>-c!~dHGBC2bkOgdf@}xz6{*It%pBRlW zX#C^N3e)_lN*WBAf}ir^>eLU|gz?F9#V(PdDX^odr1b@bKKZ84pRdIvZ!*4zg;p)vc9LJJQEMBd#MMra~4rYxlUJ`FHiaxhDh_*(!iH8mU>D0FXyuhCq8 zk+R_XG?7ul8b6l?qbpW5n$QqFD&76G!rTdw`SsKH>bWM2UoHn@>6=0;D@#p{h=^bs z9B5KPf}+$EVba22);d)VVf*$cag9-<@g>LV zuC|c0#3tJr)R?UuMq^rBTpWjplDB$pafyygTJrSeM#J{yB_-wO=OiS6lcyz*OS$Ng zu;eB+br4ztf+H!pMMia!)^cIF>a-agm{xG%0yHq3(r!^u($XB5ygtG%axFJE7t(Gq zRlTt!rC4qC(vUTQcB%YWK>=yIk)%{($>S0h4!=PyDrzZZhS-EIKc}?vEKjse-}&aun`$-9PQw(@q;JwLy#;S@u$^B*TlxPqeT#jF!67%e~?96R~tE0qd{j& kM;8)b%707*qoM6N<$f)~Ced;kCd literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@3x.png b/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f2cfbcb7c3ddd2ae997ee5fa11e39c5112f95fd5 GIT binary patch literal 4414 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 Ef)yIVFaQ7m literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/Contents.json b/yinmeng-ios/Assets.xcassets/room/Rank/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/room/Rank/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/Contents.json new file mode 100644 index 0000000..3182f61 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_room_rank_first@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_room_rank_first@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@2x.png b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f79973aad584322bf18603c3ebf4b8e313bd0665 GIT binary patch literal 1768 zcmX|B3piBi8=pmXnrBJNN;_#0*(9+p#ZVf?C1x_rxEt-1ePWfhgw`gsQIafT&7c-* zODmO{)TWZ1l8`YM3{A)+VwRaPbLRT(8N2`gdEWDWzwi5g@9(`l=Q-!X2!TeZ&rt{j z!YDY%KOA1Y;1`S3hrNrLI|G5x`z|b$goC$WC=75(fJ1`4niHzSu<;@Qj|_M)CjWP< zBai_nLdRrBz=ui>9-bOl3v92^Ct6!p}8^=!CSN?8>o!^*13{ZfvvW{e0{ zs6Y}2`tjiJXw@`cJsm22>86~*OP=jivM~xl5Ht}a8^Y+sB@|e5h2<@NV!zVw0aR4g z$X@LbUj3dZXZrvpRrag@HR#OauZ2RX4*|L4X$tXID<(#68>PBfbhy5I?eqID3JZ0+uMyu(#?%B#5z}qHbIVfq7hpOT zOvQllC|&!LF<>GJ2%;s=odGy3?Q>n~vIAq0a_-)hK~M2hN5Bb(#&OW7pN!=t?e`Ef zoxpSqEGT39EI-)>W@3RPS~sf&qWT>X%n>v!JlwKY;4ka-ln=T~m^;BNUO9~iQ$b2W zkZK@6%lFlcU{?NemppZr_t?Wj0MOR}qG*Q+^1eN)0hinv!;j!^j-DA#h(Msm`;rZx zb$%*+Gc;Hk=;!0S!`{LKsTOv3)YX<1e({N7e)wf+)=?^vfcN!uMSrFeiQe(o-WbcDA3HnLrRElg$f-Gc!|@ z0>Q*6yZ0Hh=TXP)wzfZ7FVioTpDivtm6M%*gc=)u03Yh_zYpW- zy29wPDvw{g(BWF!p=!vu1!%)1_X~5g>SEjiGtVuL_a$WbC7#^X;u!dPQ`K>edpu*( z^80#f(=sHwe-|1$5?V0ixUS{SkI$L2uB_s_^q6Dof1!xet|}Hku0By{j*dVH2yOf2 zM(b*F3ct}rk3Ep7E7w>sj$UQVHrT&!5rRrKxKBYGd& z9N%=xH&v+gYP74b53I7-8MHC_hdzA#cg^~?6E zu9`XV11IeH`{o}UHoyBY)0;tR9nX#1Y}nktFwC_^^|y&Dcr#ypb93kk(?p7x#mLOp z{(jIU#5-eYD(r`CMYc{i7>`p~cMO(~zB<${yA{%WnrYFf=bQhUNG}v#y?W8JYEAKV zTgKje{;hSbz>X2}KhQT1U z(zABwuGcWTqn7>}Jc)me&r)|Abs` zG9M$V3&g**NsiYe4Tb!kV!H-uK2uZ4Hw^lDtE+>@Af_7aH0qBy^-=4A$LnegA`EF( y!G#`S*s?vF{WctEsJ9Njv3$UoE!?drg!JFFDo#!W6R*I(4@5AI;C};qu<##uc;-I< literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@3x.png b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..27ef2f97d6e5cb982e59179464d0db25a60fc48d GIT binary patch literal 2064 zcmYLJ30P9;8m7fG%_Y}#OfyTzOcZf92Q~K;5ioK=%`9_CQ<*!{Ue? z;bB2&@QwqoLt5)V993m=A&|9>s7P!u_y`POSHGY^RP+Y5W#r4u1SswW^xQqE!J>?lB%sD2y5WIowWO!Ee}DQMph{oFRpaASq=0X(?6CY!6UjKNJ z_O8?-a@KZOQ3#AuN^u!sjBGt*{^sdN5%Ux+;CA8pZH5V*w`;4(1~KMPZL>)wGlh0~ zVQI932&eKlymKR1oaW6xk_yTD(Ka_?2NcW%+jS@D$d8O^MMx=kul0`S#`o8iXI<(x zKX~j>1#{0};D^Dl-NTXCi=O93rkTlguQJwq!^T`AX!|y`nTYu{t=t!Jf6&i7X%7f@ z$R{H2WrT>9t$#oebF%S6ndiPpwS~f3U8JQl5`U||VI^YHcROR^Smx|#?Z~IVDoUCm zT{^^DSU9lTw9jZ``T6qH8yQ?$wtWD@H!{NgHuvzcVND0P6nbEKs<{5>DTR{Nyo&rUvpTeHYNxmn**uKUE=W3l`X`DaW+r%;)?`)hK8fvq5gy)gKzp{g0GUEg%5ka zly1AFS+j>@YV`ne6|WPB4dY!TAO_3k;f%EO8|@Fu@p!iR?3VN*0~46@fZl9xm!0TN zG4~u%)!tZmHW>Yfu8Kg*Q8nutZ?+$QN%SvmM%xFtjYAwZlFFh3?Co}1bzU1-X5l=R zJ&u-Ou4&ep?sW_rSbk2^4|ua-v~b84mR6&IVb`0@pZd%&=GZt~aLKuQ#bOHcYs>5I zLqRSkHdk)~SuaDF9?wg(5*Q{~PH88GD2Xmpw$1F04SBC`x4Tg5pMJgtWWuYNmkw^z@~u1I zy0OB}#<=3wFsI629R9kVNW9{U%TYxOOA@|B>@N$pa-`+y+v+S#j5=HU-|=1Aj)2a# z>GWOjEa1aGNPA(EjL?rWB2z}C_;l^8Phs)#H(N8AV+~QlW94qSIgSS6qpf7E z)FxA0o0;vL(E-wnHLRF3ekpf`y8LVB7@A#~eHurwljf{OcRd2B6@R|TeT@v8Y;BOK z3$fKX?~sgncaa424fw&u&`9zj%$bkaTDQqzuI0&kc@oFc)yI=tqwmmqw?>!=-MEQk zXbRcv9XeZ3YqX{NOm97BfF6x}(Kns>vwn-k$hy)+r|jPcCjY!HzK6u+I`0t_Lg%f! zPd!Xp^gF>Dax7tEr`P9o6<02?uwO0o{*_^#_UF3sLveZqm6rA0US(^N{_{iLHsn60 zJX`-Q`EvA5Z`}T~=&g{%l9q9jNjMaTY^@&mN=0>VHfm07Oz?DSD=I|M{PuqGb8Mt% z`glJej~9%UaGtxnJx@OSI=`~ua4ifmP3gDBy}bMa@w-OJ>)5vUSw6W785maWC62_{ p-G?!lvXH+OJQH&T`8kT?%se%C{Bo9a+5)?reC9;Z$ zKv{+@fI!I3E-`FkfkFbKf+%7D9n==b(yT9e^J3?m|1SS`zW@8bd(S;L*B^Vv)Y!%t zfk2r0V9JAStBLjFoZ24^$0

4-#6$qoL*{GL~=IBTos9}h~aDiJPo`jbKp>t z*$NUz0dO_?6bALUQXgCuz)>c^Gw&nt83%Z3fU72R6#p;e!ZbBmUkKJsY2t-ooInHc zKP!J0k7dImF#j)_5>_L#<#Bvv%M1t`fSJuRYC!Knq4&d4G9@rsZvZCz)uKtNW=b@0 zAskhcAc-f}^SMeu0LF6U_0!t=+4X--K%uQryg*kysYwuOKPxEX_#nMc*Cf&0eFP@= z==8=os+L(TiLESo1Oi-T*@QNh4Y!szNmV4SqFJgT>+eKC=BXNfRg*dtP1DLIiK>2F z)i4FM%xEho!Al%%vlI-v4_)g6+vjxIVqN+JkR;GC#2~H(O6>z%{|z#w>f57wsS6#@ zjX`aTRFglVC2>{7BkE?UmfQh10t1?$%mFCl0hBkSDIb$l_}Z}hU}8T+?S!P_jGEYt7s1rJ&xK1dr8OF8wV^Bng?tHuMhFE)jK%3O9 zrF3bp^@AzBU{nXlUVxgPKs8b*xCOf0qbnH$bB92H4>m|NF>Ez&32J=;)k&ed;}A^* z1-C;)fv)TqFiQl&M<^K9R86QE!%)gYC`|+3DBX4i4+>p;mladOj>3U^doOl@_EE z2;o6L9{=u$ql1}=TA^59|M33Zo7I)Y+0kw;tG>20FO{C0OeOkZj(=sNQ_9~hF3!!4 zih2cn*1h7qTa24osZ>f-xZjUx&wn`Vk4m`n3j$$~?SnoUgcx;?j_EN`U+&GOIFa!&X?!wvHrZ#O&$nuxZ~)O#aHl zrub|vz3$IPj#h&Lx0*kkTVn-H1Haczhd8f0zI{2`anpk?0hSFTucht0PofWz-q9^OfPd zN())0Y-uG3IuZVgcEs`9L#{sNgWG0z6~(L&2@AUEFi*KHws2`_W8B=>oMyh$5+6>8 z9&t1B9CHin3!mEk5ap=o;jQgCVzU>xGm`jfXQFn**1;~+lF;|hN=A#TIRD(r@|Pih zq{b#i0M~%W9``>;0?no#r}*u-iryACeVlw%qgFquY~yc#@w#WwWgrS$R5oARfVnq^ z5foW&RJGMsblTC072mN!E4F8y+Vldy)$*s3pXo^gv$t;;rl*KEi729 zr>sSp)T22xid8cEH0sW;!K?`6p{sjc3J8sDA5$*w!`k=VVYLs`-7H+$F0^7=APa~7 zerxAi_VUueBeZR%NbMG(-e+`b37ci}$g0HExgBC_KHfG%)y-YmD zFzCt`MKCikj5ESc`x;qkl!0nbEsp9detInTsG$<+{*)>@L6u3id|{aAXj1QQR7BkM zxAzB(z4tz-5j{o^+WUMsmDgDl{k^2e=9_bQ$cxc4w9SlkThxht_GgQIE8U4+Y4ZWj zMYF`iC9ExFh9CF!?|C~8W!i5Z+&F95`R?$3^p4;qL+79i@i}$X(;R;)^W3Lb*AcrG WS0@i$$1cF%1j6Su7R~mG$oe0*MzYKR literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@3x.png b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ed275cb25a8909e7118f12734b3d97fd9720e752 GIT binary patch literal 1978 zcmX|B2{@E%8~&`tp~Y55T8>gUCoPf@(V`-U3_^|wscFX0U~JQ&EHO!C$kHxmWH2+I z>={c9S;jJz6Iqi%)(W$Iv;3dVf1T@kzxTV}=f0o&d7kUNu9xWSbV^-SR}}yNb$dHo z7x?c1e*vo%;JsfG#03C3$oWsV6Yw##N`j#ag35$J48bj?6hjxH>4J;JVmSD73DGnm z1{9(}9!y~wydb&&7KGLQ%knX0!r;;sjAn>}KoQJhXo6q{KZwT9YK8tYfpakoA%@1s zmWi-1C>CKDu#&%G4g-cTuw1sH`B`+O1gxR+$vvW{-LUO4tSRXEzZ=ZLad@F={FRnK z5t#$Q%~LpVbs-!t_?M*%VL<5-7I4JR+5~ysVlqb*TlaHV5X$csQ8*C!=N`lm#xiA* zHImdf;zu1&8VgEll)!@9EI0+$2=6sRx$UCdb||+^6j?2$ycf9_$s$3%3t5J%kUU;V z5yvtmzNNCeEGV8S##h2s_^yRA-(rbJp$rCaE?oU04RR@vkzltDD5nidZx+Ybi^Hm9 zE)*H5MTDXAGFzb32I%f<7_ZFeN|9ZpOMQ!_A?1>YYDs9N1p88w+$2VUQomB^gLcTP zNP6v+B#tS5(kX(Q!IVk8snX~gNn*o_b3my$uUmwoiQu_1-$Lmv&>a>OQ!DX!Aq%UL zcrVJu!q=Y??&9PMC<^t%Ro+S0a3x*QNA-9*gOloCaa%SmQHjZ?EmldV-_Xb?|J}wL zhuialtyO<8Yp{Wyh+VqU`O%?|^t@Cw((#l~xXc}HCY;-=t05WbtGI^?_B*3LH#64H zX1%F;_~6!MyJI#M8+bh4^88os_~+5#UQSPUM;!>#i}Q0cullF~$A0c%&lkbzQ;ii~?Oz4xbXCEuG zK071C6N__~CZ9lauLz4I)2NWu-hrXJMj1bIn);vX+f71oD~ zTezY(=tDDJt?Li5XL=JYUtbBh{;6*&!m?tJ`QYYFj#IwORMTlPsgpj)RF2uD`!}X! zb2X!;;&9i{0QM4UGtCq!K-5<-LB?KN94})3r)7NAVlOL_J1$8}s%U5!h_N6nmusKm zvZT-|=*rAHrxC5oA*)UX7WCO{KkrqsFx1JN$D6v8)AF>*yc*xdI2Xj$Z^_4zk?wP0 zC_JL1O@lTZIk1WSV(JAU+$|Z8#Jgh<6Xh z$;$B~>E~RZkg}g39FQ-GU!#qX89s8=JF*W`@Ys!Y{0}qYApsAJymkcSc7DHLLJC# zW<1_+wmg2p?O+QU7cIxK5UYi%X*GB%j}=}?RA1h`=dkg~+PXS@WxI9HmZSD7ssMGT z{|UU~VO3r_JOBKHKbYtKN&9qT~gX>Ol0K%`|6H7owkb594OY-2``%rwd+!v?Rq4PT6IhQ&oBkO1MzDbDbHj< z5X#K3K21k70F^Zz=`h(tN$pfci5(dIk-1p)CK%iB5X{Vwv@jHPRMWR{ixs#UXmN1 zvt9Ma*?Q`50(F5h{ivvR19cvx*5^~tP-kbx^h9oZleO56N?|^&21XXyT9bxOok)Y4 zJx>#ko^mq}Z(Eq6@^z5E26nfXhZ=OxC3$SME6_xTtmk9G-gG;M2kQL@NZM6>-@=$Quk7sTpbpWw`=aslZBDSOo)E=H@Dx zfRYJ-zLJSkfK#Af0f0#v6Z<|t8FWBfrei^5jfG#Wz$ro7Nn({dI(QWmM6fC*PF9Xt zZKlgBh$}QaxM0UBa3Bj(Uy#rGJDDB40#Gslkd^I(U=k;<$yZkr*V%-zjBAS(1dv)| z6Tot-|KK>)=ejD^XNAuluG}wC@Jhc3t~M}MS%9pX41%f#y1Y8?ONVo`EL9_Yg^82U zcj|&_pu)}qUg=PB$Xac|Oc5FkC-8CW9O5J~L0MleCc_1!#QAdUEGVc?k7m)&vkUU6>B;Vk9+miVRn`R4j5xlA<&vuS8ap zzuwH0R*{z(z#I+pKI7^N0}vOY=BOE~jSOied4`rLsmxQ=myIGqMfoUYJzYeGPmZtY}b*uYjU=0b2Z#-@I!4?lg2SOWwg6;4oOoo7C9B+=MeuMLn1y2WLP6?mK4OlN zB*Mjxp?@7mhj))a6TllrMFd{D0@2smZ@tIIaGKxSRu1*DH_?4FXnRQgS6_2Uer#~S zxikMhsJHcTRVMC!%AjD8x8ovzKIO8xxuH?7%I2pg-;KQLe8gpuGVk2D=5%CZPT1Aa zSk0}>#=#RjE%t0}s6WUhlEvBCnHiBlF!BEF>zCbKf3&x>G(W6jvzTSn!U9ruHjsvb zUl05d>VN*UyZiBDR)?WB!&?xDHr4mMN6>{=GFnWSsmH!o_e|aNtVtMB2kk|DQ~Y)G za>u&h&hnYxQM>ePVks|!tM1pfC4TKZrx5Pbjf@d=N@a;LFytrIX`jtD2gb?hq@F*} z@{zw@4!SI{{S7)cT2nI35Gp>gm}hkwCT`y)bmh6Zqnf5WrTitAe&cT>qS%R|uC}Ak zd^CGpbtZm;=cR0KeLou6Z)i3DQ-cdT0il31JOX8I`4O!ZJHVToIw(L=cH2CUiEG3*9 z+K$N+NSEvm{W<70<#S*Sc=VMawIuGfkxZ}zXanoPw|CETnQ9e8PY0|wF#upka$l+Nj=?CfJElWLrG=n$T z>-SMm`rk=QuPR|uHqOt%QOnV@;h4AExA7W9A=_NeVu=Kmc0v5=0p3H4E5=ewyRWxQ zBH_~-0<#3Z*e#=rt>?|Lh^Xv zoQHO@s~aQG>6y(u!quj(*o4KeB2+aYv<}ozlY%^~9G{Ie?ngQvs5i0i3J_!PW8qN; z%?28K%GQ2(k`$B+^;Zn>_MP+PS?3Iu@X`ck);85g&H~iRzRS+$(H{jrVbe@0lw)Ki z)IQ>RAE7ejg2d%f%55sA(Z)#DV4SaW^7`@r-O}MD5qzB>vy;L5uhOt1!Cvn!P@J>} z%yyfYbM4Ybt!;(ExJ9erqmy8;xC@M-{K#7*x|um$9?Mi zQ9b$*og0*#=fkf#k**E_)vjUPy(cc>{T#h=E(Soa6&`-qt7lzOQ}Ec>9+-xbb&bwA zp*0EV4?SW11-aHG)+e<8Y^{xn-QSd#Jp8!0S#+c)_ms|r#pCu=`V1Z)mDB$sX4j^6 YSgPDP( z6f}>DUZKXW)I9wekKM|R7f{eYX*UrNc+_}7E(-AOs=EZ(|1Bb*VCM)=gn9qB@X2T% z2_>ZL0sw-4w!`p9NIor#O+g7rXhAiJ2NbCRI8u;<6_Bui<$sa8DXeGFJPL9bOeGO; zF_IokBn7kc69v`T6G>2jFH#c)wCsu0;58ChgYS}I7UV?|RYTbjYj zLQbW@fNFzbx2Dp=7O6?IgeYK^c>n;7B%qO(3e$wUeKErbA6^BKQ<(Y_Fp5v342F9N zYbevWP+mEqKhzyaT+B~gDoh=Ha)(otJ_x@xLyVpwMAA`y^T3{K$O{=^K>8RKG7##{ zDS5g;#*D`Jva(_r36Ey8kz;6oK`lv0BhzCcL*5$-^8hd`S71xzV}32`=xJlWgHf$1XffKAG4C&m`#j_{eF6tJAJxrXk30XanwFjXz}-fLGs$Gur`)-wf8wz8=EnLWYi7Eyx4W~W zp{9x)i3kma2L0(^q<8-O#@gyKXMw>O9Uc7gx%pLHZAC@db3$T#aDbnay}s_X?*u6j zNKE~P*)?Z>#uCxZPSHW;I(PZoNU_4SItC(nLp9wPd0X{>iNtY)bc=?*C1HgTsdDc9 zh_mT@OY98uo;+4rBA{lt8Om_g$k|?|_bLa!|E*_Y`KB!<#m@`H)$+%0eb12cm2 z3ZosQcOuB+UdtS-PD5XwqwFig&;1!4{-OG3b*il5PxdUR(N3HaZ%NGaT5kD>!1sSt z>pRoG8IkSUTyR2DFG0}uU8?;can0$vuAbS>w@$Bi6&JTJBCEKE$?s&lnH4tH-HQ@+ z+b5X5BnnZuUcA1|c;m8pt0^Ya1^>b?hESXQmOhoi~|H( zm5ueE)^hxVU(?;0qCv9z*VBv7GY8Dd@YeyiZeIUn)%)jHs7&eeOaf#Zahk z=j|+=t@bgppRNtqd5P`q-0^qoL_S|5h)WiA>}YMx@4Z?T3e!^LzV)=Nbp8>tlU>UZGp6_4xVt@TE~%+z zW&V_ITY{|*^DrNG!!!fW* z+Lc#_O3KSKRngrHt`C!Ip{zVU!YOyYF4c8N!ati}kYv%<3vO$&kdB>%47zVUf1?-* zi-3t&MXQ}B1goXTZitxeJ^q;Ro5|d_>n^yyS^i%>4_#}~Bj##;7d}`@{2JTXAk@L( z)`P(J%aSjKEU^nTwDJoEvB}+;_go=AHukL?t;{ zG6h>JomHd5hP9`WiAs#cHuZe);e?#7FCtiI=bZr)P)xgx<6e74%CvWJDmvkKPaRI& zxG?D|>h$5(j`)hxYkRe9DClSClC0H>sQm!>ETnylVtMu;3_vB zfP6b4z95o@TmL0cS!+b~M9^7yCi$|AxyXjK?AS!!8|~hUk7{O})r|AgWo5C4u?e?D zyiD@&?tKA)T*u0O)OyB(yALvjISq75pMrkZ4G(>eJ`nk70w%EaZRS_JByBx8PdZA9b zLsYBBiPkyx5*(x zDPXu+em1a)t4qv3S)-`w+_ZW$>7zt_`yXnUg$9G}i>mlP%vv7H;y=Th7^l24_^0S~ zwy#~C--;Pz+6dzc1L;F4q_~EaVAmI`gEw)n%eaSzFD%VOAH!P(8FCD!Hx1y#OX~G@ zb{^H_ov20PYDjgn|0>cufKNZOxbCgT0o#?}CtL4}#hjy1OjMQTa!%Wdw0BmbPgy9;DS;J{A~x?yf>Ml-pM{s-jxbOrzb literal 0 HcmV?d00001 diff --git a/yinmeng-ios/Base/Security/yinmeng-ios-Bridging-Header.h b/yinmeng-ios/Base/Security/yinmeng-ios-Bridging-Header.h index e78d925..4772c04 100644 --- a/yinmeng-ios/Base/Security/yinmeng-ios-Bridging-Header.h +++ b/yinmeng-ios/Base/Security/yinmeng-ios-Bridging-Header.h @@ -10,3 +10,5 @@ #import #import #import +#import +#import diff --git a/yinmeng-ios/Base/Utils/H5Utils.swift b/yinmeng-ios/Base/Utils/H5Utils.swift index 8a0f054..3691b00 100644 --- a/yinmeng-ios/Base/Utils/H5Utils.swift +++ b/yinmeng-ios/Base/Utils/H5Utils.swift @@ -12,4 +12,5 @@ enum H5Utils:String { case user = "modules/rule/protocol.html" case logoff = "modules/logout/index.html" case pay = "mew/modules/rule/rechargeAgreement.html" + case rank = "modules/room_rank/index.html" } diff --git a/yinmeng-ios/Base/Utils/Utils.swift b/yinmeng-ios/Base/Utils/Utils.swift index 96e8b62..162cbe8 100644 --- a/yinmeng-ios/Base/Utils/Utils.swift +++ b/yinmeng-ios/Base/Utils/Utils.swift @@ -25,6 +25,7 @@ let H5_URL = "http://beta.h5.ymlive.fun" + extension UIFont{ static func getScaleFont(ofSize:CGFloat,weight:Weight)->UIFont{ return UIFont.systemFont(ofSize: UIDevice.scaleWidth(width: ofSize), weight: weight) diff --git a/yinmeng-ios/Base/Web/WebViewController.swift b/yinmeng-ios/Base/Web/WebViewController.swift index 9fdb925..f88763a 100644 --- a/yinmeng-ios/Base/Web/WebViewController.swift +++ b/yinmeng-ios/Base/Web/WebViewController.swift @@ -37,13 +37,14 @@ class WebViewController: BaseViewController { private(set) weak var navigationDelegate: WKNavigationDelegate? private(set) var url: String? - + var isHalf:Bool = false convenience init( url: String?, - navigationDelegate: WKNavigationDelegate? = nil + navigationDelegate: WKNavigationDelegate? = nil,isHalf:Bool = false ) { self.init(nibName: nil, bundle: nil) self.url = url + self.isHalf = isHalf if var url = url { if !url.hasPrefix("http") { url = "\(H5_URL)/\(url)" @@ -76,23 +77,51 @@ class WebViewController: BaseViewController { } private func loadSubViews() { - view.addSubview(webview) - view.addSubview(progressView) - progressView.snp.makeConstraints { make in - make.top.equalTo(view).offset(0) - make.left.right.equalTo(view).offset(0) - make.height.equalTo(1) - } - - webview.snp.makeConstraints { make in - make.top.equalTo(view).offset(1) - make.left.right.bottom.equalTo(view) - } + + if self.isHalf{ + let bakcBtn = UIButton() + bakcBtn.addTarget(self, action: #selector(dissViewAction), for: .touchUpInside) + view.addSubview(bakcBtn) + bakcBtn.snp.makeConstraints { make in + make.edges.equalTo(view) + } + view.addSubview(webview) + view.addSubview(progressView) + progressView.snp.makeConstraints { make in + make.top.equalTo(view).offset(0) + make.left.right.equalTo(view).offset(0) + make.height.equalTo(1) + } + view.backgroundColor = .clear + webview.snp.makeConstraints { make in + + make.left.bottom.right.equalTo(view) + make.height.equalTo(ScreenHeight * 0.65) + } + }else{ + view.addSubview(webview) + view.addSubview(progressView) + progressView.snp.makeConstraints { make in + make.top.equalTo(view).offset(0) + make.left.right.equalTo(view).offset(0) + make.height.equalTo(1) + } + webview.snp.makeConstraints { make in + make.top.equalTo(view).offset(1) + make.left.right.bottom.equalTo(view) + } + } + + progressView.trackTintColor = .clear progressView.transform = .init(scaleX: 1, y: 1.5) progressView.alpha = 0 } - + + @objc func dissViewAction(){ + self.dismiss(animated: true) + } + override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if let object = object as? WKWebView, object == webview { if keyPath == "estimatedProgress" { @@ -164,7 +193,7 @@ class WebViewController: BaseViewController { let str = String(data: data!,encoding:String.Encoding.utf8) return str } - + } extension WebViewController: WKScriptMessageHandler { diff --git a/yinmeng-ios/Extension/Date/Date+.swift b/yinmeng-ios/Extension/Date/Date+.swift index 5080dfc..b517d9e 100644 --- a/yinmeng-ios/Extension/Date/Date+.swift +++ b/yinmeng-ios/Extension/Date/Date+.swift @@ -106,5 +106,76 @@ extension Date { dateformatter.dateFormat = dateFormat return dateformatter.string(from: self) } + private enum ConstellationType:String { + case 白羊座, 金牛座, 双子座, 巨蟹座, 狮子座, 处女座, + 天秤座, 天蝎座, 射手座, 摩羯座, 水瓶座, 双鱼座 + } + + private static let constellationDict:[ConstellationType :String] = [.白羊座: "3.21-4.19", + .金牛座: "4.20-5.20", + .双子座: "5.21-6.21", + .巨蟹座: "6.22-7.22", + .狮子座: "7.23-8.22", + .处女座: "8.23-9.22", + .天秤座: "9.23-10.23", + .天蝎座: "10.24-11.22", + .射手座: "11.23-12.21", + .摩羯座: "12.22-1.19", + .水瓶座: "1.20-2.18", + .双鱼座: "2.19-3.20"] + + /// 日期 -> 星座 + /// - parameter date: 日期 + /// - returns: 星座名称 + public static func getCalculateWithDate(date: Date) -> String? { + + let timeInterval = date.timeIntervalSince1970 + let OneDay:Double = 86400 + + let currConstellation = constellationDict.filter { + + let timeRange = getTimeRange(date: date, timeRange: $1) + let startTime = timeRange.0 + let endTime = timeRange.1 + OneDay + + return timeInterval > startTime && timeInterval < endTime + } // 摩羯座这家伙跨年必定不满足 + + return currConstellation.first?.key.rawValue ?? "摩羯座" + } + + /// f.获取开始、结束时间 + private static func getTimeRange(date:Date, timeRange: String) -> (TimeInterval, TimeInterval) { + + /// f.1 获取当前年份 + func getCurrYear(date:Date) -> String { + + let dm = DateFormatter() + dm.dateFormat = "yyyy." + let currYear = dm.string(from: date) + return currYear + } + /// f.2 日期转换当前时间戳 + func toTimeInterval(dateStr: String) -> TimeInterval? { + + let dm = DateFormatter() + dm.dateFormat = "yyyy.MM.dd" + + let date = dm.date(from: dateStr) + let interval = date?.timeIntervalSince1970 + + return interval + } + + let timeStrArr = timeRange.components(separatedBy: "-") + let dateYear = getCurrYear(date: date) + let startTimeStr = dateYear + timeStrArr.first! + let endTimeStr = dateYear + timeStrArr.last! + + let startTime = toTimeInterval(dateStr: startTimeStr)! + let endTime = toTimeInterval(dateStr: endTimeStr)! + + return (startTime, endTime) + } } diff --git a/yinmeng-ios/Extension/UIButton/UIButton+.swift b/yinmeng-ios/Extension/UIButton/UIButton+.swift index 12a4909..c819944 100644 --- a/yinmeng-ios/Extension/UIButton/UIButton+.swift +++ b/yinmeng-ios/Extension/UIButton/UIButton+.swift @@ -35,22 +35,22 @@ extension UIButton { return bounds.contains(point) } - static func getCustomBtn(text:String? = nil,selectedText:String? = nil,font:UIFont? = nil,color:UIColor? = nil,selectedColor:UIColor? = nil,image:UIImage? = nil,selectedImage:UIImage? = nil,bgImage:UIImage? = nil) -> UIButton{ - let customBtn = UIButton() + static func getCustomBtn(type:UIButton.ButtonType = .custom, text:String? = nil,selectedText:String? = nil,font:UIFont? = nil,color:UIColor? = nil,selectedColor:UIColor? = nil,image:UIImage? = nil,selectedImage:UIImage? = nil,bgImage:UIImage? = nil,selectedBgImage:UIImage? = nil) -> UIButton{ + let customBtn = UIButton(type: type) if let _text = text{ - customBtn.setTitle(text, for: .normal) + customBtn.setTitle(_text, for: .normal) } if let _selectedText = selectedText{ - customBtn.setTitle(selectedText, for: .selected) + customBtn.setTitle(_selectedText, for: .selected) } if let _font = font{ - customBtn.titleLabel?.font = font + customBtn.titleLabel?.font = _font } if let _color = color{ - customBtn.setTitleColor(color, for: .normal) + customBtn.setTitleColor(_color, for: .normal) } if let _selectedColor = selectedColor{ - customBtn.setTitleColor(selectedColor, for: .selected) + customBtn.setTitleColor(_selectedColor, for: .selected) } if let _image = image{ customBtn.setImage(_image, for: .normal) @@ -61,6 +61,9 @@ extension UIButton { if let _bgImage = bgImage{ customBtn.setBackgroundImage(_bgImage, for: .normal) } + if let _selectedBgImage = selectedBgImage{ + customBtn.setBackgroundImage(_selectedBgImage, for: .selected) + } return customBtn } diff --git a/yinmeng-ios/Extension/UILabel/UILabel+.swift b/yinmeng-ios/Extension/UILabel/UILabel+.swift index c7e9cc3..83eeb25 100644 --- a/yinmeng-ios/Extension/UILabel/UILabel+.swift +++ b/yinmeng-ios/Extension/UILabel/UILabel+.swift @@ -7,10 +7,17 @@ import Foundation extension UILabel{ - static func getCustomLabel(text:String? = "",font:UIFont? = nil,color:UIColor? = nil,textAlignment:NSTextAlignment? = .left,numberOfLines:Int? = 1)->UILabel{ + static func getCustomLabel(text:String? = "",font:UIFont? = nil,color:UIColor? = nil,textAlignment:NSTextAlignment? = .left,numberOfLines:Int? = 1,backgroundColor:UIColor? = nil,masksToBounds:Bool = false,cornerRadius:CGFloat = 0,borderWidth:CGFloat = 0,borderColor:UIColor? = nil)->UILabel{ let customView = UILabel() + customView.layer.masksToBounds = masksToBounds + customView.layer.cornerRadius = cornerRadius + customView.layer.borderWidth = borderWidth + if let _borderColor = borderColor{ + customView.layer.borderColor = _borderColor.cgColor + } + if let _text = text { - customView.text = text + customView.text = _text } if let _font = font { customView.font = _font @@ -24,6 +31,9 @@ extension UILabel{ if let _numberOfLines = numberOfLines{ customView.numberOfLines = _numberOfLines } + if let _backgroundColor = backgroundColor{ + customView.backgroundColor = _backgroundColor + } return customView } static func getLabelHeigth(text:String,width:CGFloat,font:UIFont)-> CGFloat{ diff --git a/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift b/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift index ff41004..d7b0cc5 100644 --- a/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift +++ b/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift @@ -16,10 +16,13 @@ class AuthViewModel: NSObject { var appId = "" let loginSuccess = BehaviorSubject(value: false) let resetPwd = PublishSubject() - + var clientInfoModel:YinClientInfoModel? func appClientConfig() { RequestGet(path: "client/init", parma: [:]) { data in + if let account = Deserialized.toModel(with: data) { + self.clientInfoModel = account + } if let _data = data as? [String:Any],let appId = _data["trtcAppId"] { AuthViewModel.authVM.appId = "\(appId)" } diff --git a/yinmeng-ios/Modules/Auth/VM/YinClientInfoModel.swift b/yinmeng-ios/Modules/Auth/VM/YinClientInfoModel.swift new file mode 100644 index 0000000..4e6760e --- /dev/null +++ b/yinmeng-ios/Modules/Auth/VM/YinClientInfoModel.swift @@ -0,0 +1,12 @@ +// +// YinClientInfoModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/22. +// + +import UIKit +import HandyJSON +struct YinClientInfoModel: HandyJSON { + var h5Uris:[YinRankH5UrlModel] = [] +} diff --git a/yinmeng-ios/Modules/Auth/VM/YinRankH5UrlModel.swift b/yinmeng-ios/Modules/Auth/VM/YinRankH5UrlModel.swift new file mode 100644 index 0000000..e7a8d18 --- /dev/null +++ b/yinmeng-ios/Modules/Auth/VM/YinRankH5UrlModel.swift @@ -0,0 +1,13 @@ +// +// YinRankH5UrlModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/22. +// + +import UIKit +import HandyJSON +struct YinRankH5UrlModel: HandyJSON { + var code = "" + var uri = "" +} diff --git a/yinmeng-ios/Modules/Home/HomeSearchNavView.swift b/yinmeng-ios/Modules/Home/HomeSearchNavView.swift new file mode 100644 index 0000000..a23d1c0 --- /dev/null +++ b/yinmeng-ios/Modules/Home/HomeSearchNavView.swift @@ -0,0 +1,115 @@ +// +// HomeSearchNavView.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/21. +// + +import UIKit + + +typealias ClickSearchBlcok = (_ type:Int)->Void + +class HomeSearchNavView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + addSubview(leftArrowBtn) + addSubview(bgSearchView) + addSubview(searchBtn) + bgSearchView.addSubview(searchIconView) + bgSearchView.addSubview(textField) + + leftArrowBtn.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 22)) + make.leading.equalTo(UIDevice.scaleWidth(width: 8)) + make.centerY.equalTo(bgSearchView) + } + bgSearchView.snp.makeConstraints { make in + make.height.equalTo(UIDevice.scaleWidth(width: 30)) + make.leading.equalTo(leftArrowBtn.snp.trailing).offset((UIDevice.scaleWidth(width: 5))) + make.trailing.equalTo(searchBtn.snp.leading).offset(-UIDevice.scaleWidth(width: 13)) + make.top.equalTo(UIDevice.scaleWidth(width: StatusBarHeight + 10)) + } + searchBtn.snp.makeConstraints { make in + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(bgSearchView) + make.height.equalTo(UIDevice.scaleWidth(width: 30)) + + } + searchIconView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 28)) + make.centerY.equalTo(bgSearchView) + make.leading.equalTo(UIDevice.scaleWidth(width: 9)) + } + textField.snp.makeConstraints { make in + make.leading.equalTo(searchIconView.snp.trailing).offset((UIDevice.scaleWidth(width: 0))) + make.trailing.top.bottom.equalTo(bgSearchView) + } + leftArrowBtn.addTarget(self, action: #selector(leftArroAction), for: .touchUpInside) + searchBtn.addTarget(self, action: #selector(searchBtnAction), for: .touchUpInside) + } + @objc func leftArroAction(){ + if let clickSearchBlcok = self.clickSearchBlcok{ + clickSearchBlcok(0) + } + } + @objc func searchBtnAction(){ + textField.resignFirstResponder() + if let clickSearchBlcok = self.clickSearchBlcok{ + clickSearchBlcok(1) + } + } + + //MARK: - 懒加载 + var clickSearchBlcok:ClickSearchBlcok? + private lazy var leftArrowBtn:UIButton = { + let _leftArrowBtn = UIButton.getCustomBtn(image: UIImage(named: "yin_left_black_arrow")) + _leftArrowBtn.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + return _leftArrowBtn + }() + private lazy var bgSearchView:UIView = { + let _bgSearchView = UIView() + _bgSearchView.backgroundColor = .white + _bgSearchView.layer.cornerRadius = UIDevice.scaleWidth(width: 30)/2 + _bgSearchView.layer.masksToBounds = true + + return _bgSearchView + }() + private lazy var searchIconView:UIImageView = { + let _searchIconView = UIImageView() + _searchIconView.isUserInteractionEnabled = true + + _searchIconView.image = UIImage(named: "yin_search_vc_iocn") + return _searchIconView + }() + lazy var textField:UITextField = { + let _textField = UITextField() + _textField.layer.cornerRadius = UIDevice.scaleWidth(width: 30)/2 + _textField.layer.masksToBounds = true + _textField.tintColor = ThemeColor(hexStr: "#878B9C") + _textField.textColor = ThemeColor(hexStr: "#282828") + _textField.backgroundColor = .clear + _textField.font = UIFont.getScaleFont(ofSize: 13, weight: .regular) + let att = NSAttributedString(string: "搜索昵称/ID/房间名",attributes: [.font:UIFont.getScaleFont(ofSize: 13, weight: .regular),.foregroundColor:ThemeColor(hexStr: "#878B9C")]) + _textField.attributedPlaceholder = att + _textField.clearButtonMode = .whileEditing + _textField.returnKeyType = .search + _textField.enablesReturnKeyAutomatically = true + return _textField + }() + private lazy var searchBtn:UIButton = { + let _searchBtn = UIButton.getCustomBtn(text: "搜索",font: UIFont.getScaleFont(ofSize: 16, weight: .medium),color: ThemeColor(hexStr: "#878B9C")) + _searchBtn.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + + return _searchBtn + }() +} diff --git a/yinmeng-ios/Modules/Home/HomeSearchRoomCell.swift b/yinmeng-ios/Modules/Home/HomeSearchRoomCell.swift new file mode 100644 index 0000000..94721b3 --- /dev/null +++ b/yinmeng-ios/Modules/Home/HomeSearchRoomCell.swift @@ -0,0 +1,166 @@ +// +// HomeSearchRoomCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/21. +// + +import UIKit +import Nuke + +class HomeSearchRoomCell: UITableViewCell { + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + selectionStyle = .none + backgroundColor = .clear + contentView.addSubview(avatarView) + contentView.addSubview(nickStackView) + contentView.addSubview(idView) + contentView.addSubview(numView) + contentView.addSubview(dividerView) + numView.addSubview(onlienTextView) + numView.addSubview(bgOnlineView) + + + nickStackView.addArrangedSubview(textVeiw) + nickStackView.addArrangedSubview(genderView) + + avatarView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 45)) + make.leading.equalTo(UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(contentView) + } + nickStackView.snp.makeConstraints { make in + make.leading.equalTo(avatarView.snp.trailing).offset((UIDevice.scaleWidth(width: 13))) + make.height.equalTo(UIDevice.scaleWidth(width: 20)) + make.bottom.equalTo(avatarView.snp.centerY).offset(-UIDevice.scaleWidth(width: 1.5)) + } + idView.snp.makeConstraints { make in + make.leading.equalTo(nickStackView) + make.top.equalTo(avatarView.snp.centerY).offset(UIDevice.scaleWidth(width: 1.5)) + } + + dividerView.snp.makeConstraints { make in + make.leading.equalTo(nickStackView) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.bottom.equalTo(contentView) + make.height.equalTo(UIDevice.scaleWidth(width: 1)) + + } + + numView.snp.makeConstraints { make in + make.height.equalTo(UIDevice.scaleWidth(width: 18)) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(contentView) + make.leading.equalTo(bgOnlineView.snp.leading).offset(-UIDevice.scaleWidth(width: 8)) + } + + onlienTextView.snp.makeConstraints { make in + make.centerY.equalTo(numView) + make.trailing.equalTo(numView.snp.trailing).offset(-UIDevice.scaleWidth(width:5)) + } + bgOnlineView.snp.makeConstraints { make in + make.width.equalTo(UIDevice.scaleWidth(width: 10)) + make.height.equalTo(UIDevice.scaleWidth(width: 9)) + make.centerY.equalTo(numView) + make.trailing.equalTo(onlienTextView.snp.leading).offset(-UIDevice.scaleWidth(width:3)) + } + } + + func setModel(model:HomeSearchRoomModel,type:Int){ + Nuke.loadImage(with: model.avatar, into: avatarView, completion: nil) + textVeiw.text = type == 0 ? model.title : model.nick + idView.text = "ID:" + model.erbanNo + genderView.image = model.gender == .Boy ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman") + if type == 0{ + if model.onlineNum > 100{ + onlienTextView.text = "\(model.onlineNum)" + }else{ + onlienTextView.text = " \(model.onlineNum) " + } + numView.isHidden = !model.valid + return + } + onlienTextView.text = "直播中" + numView.isHidden = model.roomUid.count <= 0 + } + + //MARK: - 懒加载 + private lazy var avatarView:UIImageView = { + let _avatarView = UIImageView() + _avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 45)/2 + _avatarView.layer.masksToBounds = true + _avatarView.contentMode = .scaleAspectFill + return _avatarView + }() + private lazy var nickStackView:UIStackView = { + let _nickStackView = UIStackView() + _nickStackView.axis = .horizontal + _nickStackView.distribution = .fill + _nickStackView.alignment = .center + _nickStackView.spacing = UIDevice.scaleWidth(width: 2) + + return _nickStackView + }() + private lazy var textVeiw:UILabel = { + let _textVeiw = UILabel.getCustomLabel(font: UIFont.getScaleFont(ofSize: 15, weight: .regular),color: ThemeColor(hexStr: "#878B9C")) + return _textVeiw + }() + private lazy var genderView:UIImageView = { + let _genderView = UIImageView() + _genderView.isUserInteractionEnabled = true + return _genderView + }() + + private lazy var idView:UILabel = { + let _idView = UILabel.getCustomLabel(font: UIFont.getScaleFont(ofSize: 13, weight: .regular),color: ThemeColor(hexStr: "#BDBFD0")) + + return _idView + }() + private lazy var dividerView:UIView = { + let _dividerView = UIView() + _dividerView.backgroundColor = ThemeColor(hexStr: "#E8E8E8") + + return _dividerView + }() + + private lazy var numView:UIView = { + let _numView = UIView() + _numView.backgroundColor = .clear + _numView.layer.masksToBounds = true + _numView.layer.cornerRadius = UIDevice.scaleWidth(width: 18)/2 + _numView.layer.borderColor = ThemeColor(hexStr: "#248CFE").cgColor + _numView.layer.borderWidth = 1 + + return _numView + }() + + private lazy var bgOnlineView:UIImageView = { + let _bgOnlineView = UIImageView() + _bgOnlineView.image = UIImage(named: "home_search_online_icon") + return _bgOnlineView + }() + private lazy var onlienTextView:UILabel = { + let _onlienTextView = UILabel.getCustomLabel(text: "直播中",font: UIFont.getScaleFont(ofSize: 10, weight: .regular),color: ThemeColor(hexStr: "#248CFE")) + return _onlienTextView + }() + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/yinmeng-ios/Modules/Home/HomeSearchRoomModel.swift b/yinmeng-ios/Modules/Home/HomeSearchRoomModel.swift new file mode 100644 index 0000000..6027969 --- /dev/null +++ b/yinmeng-ios/Modules/Home/HomeSearchRoomModel.swift @@ -0,0 +1,28 @@ +// +// HomeSearchRoomModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/21. +// + +import Foundation +import HandyJSON +struct HomeSearchRoomModel:HandyJSON{ + var avatar = "" + + var onlineNum:Int = 0 + + var uid = "" + + var title = "" + + var nick = "" + + var erbanNo = "" + + var valid = false + + var gender:UserSexType = .Boy + + var roomUid = "" +} diff --git a/yinmeng-ios/Modules/Home/HomeSearchRoomVC.swift b/yinmeng-ios/Modules/Home/HomeSearchRoomVC.swift new file mode 100644 index 0000000..a12c78f --- /dev/null +++ b/yinmeng-ios/Modules/Home/HomeSearchRoomVC.swift @@ -0,0 +1,93 @@ +// +// HomeSearchRoomVC.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/21. +// + +import UIKit + +class HomeSearchRoomVC: BaseViewController { + + init(type:Int){ + super.init(nibName: nil, bundle: nil) + self.type = type + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + setUILayout() + + } + private func setUILayout(){ + view.addSubview(tableView) + view.backgroundColor = .clear + tableView.snp.makeConstraints { make in + make.edges.equalTo(view) + } + tableView.delegate = self + tableView.dataSource = self + tableView.register(HomeSearchRoomCell.self, forCellReuseIdentifier: "HomeSearchRoomCell") + } + func requestData(text:String){ + let params = ["page":"1","pageSize":"50","key":text,"type":"\(type+1)"] + RequestGet(path: "search/room", parma: params) { data in + if let list = Deserialized.toArray(with: data) { + self.listData = list + self.tableView.reloadData() + } + } fail: { code, message in + HUDTool.show(with: message) + } + } + var listData:[HomeSearchRoomModel] = [] + var type:Int = 0 + //MARK: - 懒加载 + private lazy var tableView:UITableView = { + let _tableView = UITableView(frame: .zero, style: .plain) + _tableView.tableHeaderView = UIView() + _tableView.tableFooterView = UIView() + _tableView.separatorStyle = .none + _tableView.backgroundColor = .clear + return _tableView + }() + +} +extension HomeSearchRoomVC:JXCategoryListContentViewDelegate,UITableViewDelegate,UITableViewDataSource{ + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return listData.count + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return UIDevice.scaleWidth(width: 74) + } + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "HomeSearchRoomCell", for: indexPath) as! HomeSearchRoomCell + cell.setModel(model: listData[indexPath.row], type: type) + return cell + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + if type == 1 {return} + let model = listData[indexPath.row] + if model.valid { + self.dismiss(animated: true) { + let vc = RoomVC(roomUid: model.uid) + vc.roomText = model.title + "的房间" + let nav = BaseNavigationViewController.init(rootViewController: vc) + nav.modalPresentationStyle = .fullScreen + keyWindow.rootViewController?.present(nav, animated: true, completion: nil) + } + + return + } + HUDTool.show(with: "该用户的房间已失效") + } + func listView() -> UIView! { + return self.view + } + + +} diff --git a/yinmeng-ios/Modules/Home/HomeSearchVC.swift b/yinmeng-ios/Modules/Home/HomeSearchVC.swift new file mode 100644 index 0000000..5a97aa2 --- /dev/null +++ b/yinmeng-ios/Modules/Home/HomeSearchVC.swift @@ -0,0 +1,121 @@ +// +// HomeSearchVC.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/21. +// + +import UIKit + +class HomeSearchVC: BaseViewController,HiddenNavigationBarProtocol { + + + + override func viewDidLoad() { + super.viewDidLoad() + setUILayout() + requestData() + } + private func setUILayout(){ + view.addSubview(navView) + view.addSubview(pageTitleView) + view.addSubview(containerView) + view.backgroundColor = ThemeColor(hexStr: "#F8F8FB") + navView.snp.makeConstraints { make in + make.leading.trailing.top.equalTo(view) + make.height.equalTo(NavHeight) + } + + pageTitleView.snp.makeConstraints { make in + make.leading.trailing.equalTo(view).inset(UIDevice.scaleWidth(width: 0)) + make.top.equalTo(navView.snp.bottom).offset(UIDevice.scaleWidth(width: 10)) + make.height.equalTo(UIDevice.scaleWidth(width: 50)) + } + containerView.snp.makeConstraints { make in + make.top.equalTo(pageTitleView.snp.bottom).offset(UIDevice.scaleWidth(width: 10)) + make.leading.trailing.bottom.equalTo(view) + } + navView.textField.delegate = self + navView.clickSearchBlcok = {[weak self] type in + guard let self = self else { return } + if type == 0{ + self.dismiss(animated: true, completion: nil) + return + } + self.roomView.requestData(text:self.navView.textField.text ?? "") + self.userView.requestData(text: self.navView.textField.text ?? "") + + } + pageTitleView.listContainer = containerView + } + private func requestData(){ + + } + //MARK: - 懒加载 + private lazy var navView:HomeSearchNavView = { + let _navView = HomeSearchNavView(frame: .zero) + + return _navView + }() + + private lazy var pageTitleView:JXCategoryTitleView = { + let _pageTitleView = JXCategoryTitleView() + _pageTitleView.delegate = self + _pageTitleView.titles = ["房间","用户"] + _pageTitleView.titleColor = ThemeColor(hexStr: "#878B9C") + _pageTitleView.titleSelectedColor = ThemeColor(hexStr: "#282828") + _pageTitleView.titleFont = UIFont.getScaleFont(ofSize: 16, weight: .medium) + _pageTitleView.titleSelectedFont = UIFont.getScaleFont(ofSize: 16, weight: .medium) + _pageTitleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyle.center + _pageTitleView.isContentScrollViewClickTransitionAnimationEnabled = false + _pageTitleView.defaultSelectedIndex = 0 + let lineView = JXCategoryIndicatorLineView() + lineView.indicatorColor = ThemeColor(hexStr: "#FFE710") + lineView.indicatorWidth = UIDevice.scaleWidth(width: 8) + lineView.indicatorHeight = UIDevice.scaleWidth(width: 8) / 2 + lineView.indicatorCornerRadius = UIDevice.scaleWidth(width: 8) / 4 + _pageTitleView.indicators = [lineView] + return _pageTitleView + }() + private lazy var containerView:JXCategoryListContainerView = { + let _containerView = JXCategoryListContainerView.init(type: .scrollView, delegate: self)! + _containerView.setDefaultSelectedIndex(0) + return _containerView + }() + private lazy var roomView:HomeSearchRoomVC = { + let _roomView = HomeSearchRoomVC(type: 0) + + return _roomView + }() + private lazy var userView:HomeSearchRoomVC = { + let _userView = HomeSearchRoomVC(type: 1) + + return _userView + }() +} +extension HomeSearchVC:JXCategoryListContainerViewDelegate,JXCategoryViewDelegate,UITextFieldDelegate{ + func number(ofListsInlistContainerView listContainerView: JXCategoryListContainerView!) -> Int { + return 2 + } + + func listContainerView(_ listContainerView: JXCategoryListContainerView!, initListFor index: Int) -> JXCategoryListContentViewDelegate! { + return index == 0 ? roomView : userView + } + + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + guard let text = textField.text else { + HUDTool.show(with: "请输入需要搜索的内容") + return true + } + if text.count > 0{ + textField.resignFirstResponder() + roomView.requestData(text: text) + userView.requestData(text: text) + }else{ + HUDTool.show(with: "请输入需要搜索的内容") + } + + return true + } +} diff --git a/yinmeng-ios/Modules/Home/HomeVoiceModel.swift b/yinmeng-ios/Modules/Home/HomeVoiceModel.swift index df709cb..e7b42fa 100644 --- a/yinmeng-ios/Modules/Home/HomeVoiceModel.swift +++ b/yinmeng-ios/Modules/Home/HomeVoiceModel.swift @@ -21,4 +21,5 @@ struct HomeVoiceModel : HandyJSON, Codable { var userVoice = "" var voiceDura = "" var userDesc = "" + var birth:Int64 = 0 } diff --git a/yinmeng-ios/Modules/Home/HomeVoiceSearchView.swift b/yinmeng-ios/Modules/Home/HomeVoiceSearchView.swift new file mode 100644 index 0000000..46c984b --- /dev/null +++ b/yinmeng-ios/Modules/Home/HomeVoiceSearchView.swift @@ -0,0 +1,55 @@ +// +// HomeVoiceSearchView.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/20. +// + +import UIKit + +class HomeVoiceSearchView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + addSubview(bgImageView) + addSubview(iconView) + addSubview(textVeiw) + bgImageView.snp.makeConstraints { make in + make.edges.equalTo(self) + } + iconView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 18)) + make.leading.equalTo(UIDevice.scaleWidth(width: 9)) + make.centerY.equalTo(self) + } + textVeiw.snp.makeConstraints { make in + make.leading.equalTo(UIDevice.scaleWidth(width: 31)) + make.centerY.equalTo(self) + } + } + //MARK: - 懒加载 + private lazy var bgImageView:UIImageView = { + let _bgImageView = UIImageView() + _bgImageView.image = UIImage(named: "yin_home_voice_search_bg") + return _bgImageView + }() + private lazy var iconView:UIImageView = { + let _iconView = UIImageView() + _iconView.image = UIImage(named: "yin_home_voice_search_icon") + + return _iconView + }() + private lazy var textVeiw:UILabel = { + let _textVeiw = UILabel.getCustomLabel(text: "搜索房间",font: UIFont.getScaleFont(ofSize: 14, weight: .regular),color: ThemeColor(hexStr: "#CCCCCC")) + + return _textVeiw + }() +} diff --git a/yinmeng-ios/Modules/Home/HomeVoiceUserInfoView.swift b/yinmeng-ios/Modules/Home/HomeVoiceUserInfoView.swift index 043d111..cce03f5 100644 --- a/yinmeng-ios/Modules/Home/HomeVoiceUserInfoView.swift +++ b/yinmeng-ios/Modules/Home/HomeVoiceUserInfoView.swift @@ -9,7 +9,7 @@ import UIKit import Nuke -typealias ClickBtnBlock = (_ type: Int ,_ model:HomeVoiceModel)->Void +typealias ClickBtnBlock = (_ type: Int ,_ uid:String)->Void class HomeVoiceUserInfoView: UIView { @@ -33,12 +33,16 @@ class HomeVoiceUserInfoView: UIView { bgVoiceVeiw.addSubview(playBtn) bgVoiceVeiw.addSubview(waveView) bgVoiceVeiw.addSubview(playTimeView) - + backgroundView.addSubview(lineView) - backgroundView.addSubview(attentionBtn) - backgroundView.addSubview(lineView1) - backgroundView.addSubview(chatBtn) + backgroundView.addSubview(tagStackView) + tagStackView.addArrangedSubview(attentionBtn) + tagStackView.addArrangedSubview(lineView1) + tagStackView.addArrangedSubview(sendGfitBtn) + tagStackView.addArrangedSubview(lineView2) + tagStackView.addArrangedSubview(chatBtn) + dissView.snp.makeConstraints { make in make.edges.equalTo(self) } @@ -79,7 +83,7 @@ class HomeVoiceUserInfoView: UIView { make.height.equalTo(128) } signatureView.snp.makeConstraints { make in - make.left.top.right.equalTo(16) + make.left.top.right.equalTo(self.bgSignatureView).inset(16) make.height.equalTo(54) } @@ -112,21 +116,22 @@ class HomeVoiceUserInfoView: UIView { make.top.equalTo(self.bgSignatureView.snp.bottom).offset(16) } + + tagStackView.snp.makeConstraints { make in + make.leading.bottom.trailing.equalTo(backgroundView) + make.top.equalTo(230) + } lineView1.snp.makeConstraints { make in make.width.equalTo(1) make.height.equalTo(18) - make.top.equalTo(237) - make.centerX.equalTo(self.backgroundView) + } - attentionBtn.snp.makeConstraints { make in - make.top.equalTo(self.lineView) - make.bottom.left.equalTo(self.backgroundView) - make.right.equalTo(self.lineView1.snp.left) - } - chatBtn.snp.makeConstraints { make in - make.top.height.width.equalTo(self.attentionBtn) - make.left.equalTo(self.lineView1.snp.right) + lineView2.snp.makeConstraints { make in + make.width.equalTo(1) + make.height.equalTo(18) + } + let layer = CAShapeLayer() let path = UIBezierPath.init(roundedRect: CGRect(x: 0, y: 0, width: 130, height: 28), byRoundingCorners: [.topRight , .bottomRight,.bottomLeft] , cornerRadii: CGSize(width: 14, height: 14)) layer.path = path.cgPath @@ -137,16 +142,17 @@ class HomeVoiceUserInfoView: UIView { } @objc func attentionBtnAction(){ if self.type == 1{ - if let _clickBtnBlock = clickBtnBlock,let _model = self.model{ - _clickBtnBlock(3,_model) + if let _clickBtnBlock = clickBtnBlock,let uid = self.model?.uid{ + _clickBtnBlock(3,"\(uid)") } return } self.attentionBtn.isSelected = !self.attentionBtn.isSelected let type = self.attentionBtn.isSelected ? "1" : "2" - guard let uid = self.model?.uid else{return} - let params = ["uid":"\(AuthManager.userUid)","ticket":AuthManager.ticket,"type":type,"likedUid":"\(uid)"] as [String : Any] + let uid = self.model != nil ? self.model?.uid : self.user?.uid + guard let getUid = uid else{return} + let params = ["uid":"\(AuthManager.userUid)","ticket":AuthManager.ticket,"type":type,"likedUid":"\(getUid)"] as [String : Any] RequestPost(path: "fans/like", parma: params) { data in if(self.attentionBtn.isSelected){ @@ -160,14 +166,17 @@ class HomeVoiceUserInfoView: UIView { } @objc func chatBtnAction(){ if self.type == 1{ - if let _clickBtnBlock = clickBtnBlock,let _model = self.model{ - _clickBtnBlock(4,_model) + if let _clickBtnBlock = clickBtnBlock,let uid = self.model?.uid{ + _clickBtnBlock(4,"\(uid)") } return } - if let _clickBtnBlock = clickBtnBlock,let _model = self.model{ - _clickBtnBlock(0,_model) + if let _clickBtnBlock = clickBtnBlock, let uid = self.model?.uid{ + _clickBtnBlock(0,"\(uid)") + } + if let _clickBtnBlock = clickBtnBlock,let uid = self.user?.uid{ + _clickBtnBlock(0,"\(uid)") } } @objc func playVoiceAction(){ @@ -182,6 +191,42 @@ class HomeVoiceUserInfoView: UIView { } } + var user:UserObject? = nil{ + didSet{ + guard let _user = user else { return } + Nuke.loadImage(with: _user.avatar, into: avatarView) + nameTextView.text = _user.nick + sexImageView.image = _user.gender == .Boy ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman") + + + signatureView.text = _user.userDesc.isEmpty ? "这个人很懒还没有签名" : _user.userDesc + bgVoiceVeiw.isHidden = true + guard let uid = _user.uid else{return} + let params = ["uid":uid] + RequestGet(path: "user/get", parma: params) { data in + if let info = Deserialized.toModel(with: data) { + self.signatureView.text = info.userDesc.isEmpty ? "这个人很懒还没有签名" : info.userDesc + let timeStamp = info.birth / 1000 + + let timeInterval:TimeInterval = TimeInterval(timeStamp) + + let date = NSDate(timeIntervalSince1970: timeInterval) as Date + self.starView.text = Date.getCalculateWithDate(date: date) + self.starView.isHidden = false + } + } fail: { code, message in + + } + RequestGet(path: "fans/islike", parma: ["uid":"\(AuthManager.userUid)","isLikeUid":"\(uid)"]) { data in + if let isLike = data as? Bool{ + self.attentionBtn.isSelected = isLike + } + + } fail: { code, data in + + } + } + } var model:HomeVoiceModel? = nil { didSet{ guard let _model = model else { @@ -190,8 +235,16 @@ class HomeVoiceUserInfoView: UIView { Nuke.loadImage(with: _model.avatar, into: avatarView) nameTextView.text = _model.nick sexImageView.image = _model.gender == 1 ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman") + let timeStamp = _model.birth / 1000 + + let timeInterval:TimeInterval = TimeInterval(timeStamp) + + let date = NSDate(timeIntervalSince1970: timeInterval) as Date + starView.text = Date.getCalculateWithDate(date: date) - starView.text = "天蠍座" + + + starView.isHidden = false signatureView.text = _model.userDesc.isEmpty ? "这个人很懒还没有签名" : _model.userDesc bgVoiceVeiw.isHidden = _model.userVoice.isEmpty playTimeView.text = "\(_model.voiceDura)\"" @@ -255,6 +308,7 @@ class HomeVoiceUserInfoView: UIView { _starView.backgroundColor = ThemeColor(hexStr: "#E9E1FF") _starView.layer.cornerRadius = 9 _starView.layer.masksToBounds = true + _starView.isHidden = true return _starView }() var bgSignatureView:UIView = { @@ -269,6 +323,7 @@ class HomeVoiceUserInfoView: UIView { _signatureView.font = UIFont.systemFont(ofSize: 13, weight: .regular) _signatureView.textColor = ThemeColor(hexStr: "#1F1B4F") _signatureView.text = "" + _signatureView.numberOfLines = 0 return _signatureView }() @@ -298,21 +353,39 @@ class HomeVoiceUserInfoView: UIView { _playTimeView.font = UIFont.systemFont(ofSize: 14, weight: .medium) return _playTimeView }() + var type:Int = 0 { didSet{ + lineView2.isHidden = true + sendGfitBtn.isHidden = true if type == 0{ attentionBtn.setImage(UIImage(named: "yin_plane_star_no_attention_icon"), for: .normal) attentionBtn.setTitle(" 关注", for: .normal) chatBtn.setImage(UIImage(named: "yin_home_voice_chat_icon"), for: .normal) chatBtn.setTitle(" 私聊", for: .normal) - }else{ + }else if type == 1{ attentionBtn.setImage(UIImage(named: "yin_plane_star_pay_icon"), for: .normal) attentionBtn.setTitle(" 充值", for: .normal) chatBtn.setImage(UIImage(named: "yin_home_voice_collect_icon"), for: .normal) chatBtn.setTitle(" 收藏", for: .normal) + }else{ + attentionBtn.setImage(UIImage(named: "yin_plane_star_no_attention_icon"), for: .normal) + attentionBtn.setTitle(" 关注", for: .normal) + chatBtn.setImage(UIImage(named: "yin_home_voice_chat_icon"), for: .normal) + chatBtn.setTitle(" 私聊", for: .normal) + lineView2.isHidden = false + sendGfitBtn.isHidden = false } } } + private lazy var tagStackView:UIStackView = { + let _tagStackView = UIStackView() + _tagStackView.axis = .horizontal + _tagStackView.distribution = .fillProportionally + _tagStackView.alignment = .center + _tagStackView.spacing = UIDevice.scaleWidth(width: 0) + return _tagStackView + }() var attentionBtn:UIButton = { let _attentionBtn = UIButton() @@ -326,6 +399,20 @@ class HomeVoiceUserInfoView: UIView { return _attentionBtn + }() + var sendGfitBtn:UIButton = { + let _sendGfitBtn = UIButton() + + _sendGfitBtn.setImage(UIImage(named: "yin_plane_star_send_gift_icon"), for: .normal) + _sendGfitBtn.setTitle(" 送礼", for: .normal) + _sendGfitBtn.setTitleColor(.white, for: .normal) + + _sendGfitBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .medium) + _sendGfitBtn.setImage(UIImage(named: "yin_plane_star_send_gift_icon"), for: .selected) + _sendGfitBtn.addTarget(self, action: #selector(attentionBtnAction), for: .touchUpInside) + return _sendGfitBtn + + }() var chatBtn:UIButton = { let _chatBtn = UIButton() @@ -350,5 +437,12 @@ class HomeVoiceUserInfoView: UIView { return _lineView1 + }() + var lineView2:UIView = { + let _lineView2 = UIView() + _lineView2.backgroundColor = UIColor.init(white: 1, alpha: 0.2) + return _lineView2 + + }() } diff --git a/yinmeng-ios/Modules/Home/HomeVoiceVC.swift b/yinmeng-ios/Modules/Home/HomeVoiceVC.swift index abf7d09..c62fbfc 100644 --- a/yinmeng-ios/Modules/Home/HomeVoiceVC.swift +++ b/yinmeng-ios/Modules/Home/HomeVoiceVC.swift @@ -35,13 +35,13 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol { } @objc func userInfoBtnAction(){ let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero) - userInfoView.clickBtnBlock = {[weak self] (type,model) in + userInfoView.clickBtnBlock = {[weak self] (type,uid) in guard let weakSelf = self else { return } if type == 3{ let vc = UserPayViewController() - self?.navigationController?.pushViewController(vc, animated: true) + weakSelf.navigationController?.pushViewController(vc, animated: true) return } } @@ -69,6 +69,7 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol { view.addSubview(backgroundView) view.addSubview(scrollView) scrollView.addSubview(topLogoIcon) + scrollView.addSubview(searchView) scrollView.addSubview(chooseItemVeiw) scrollView.addSubview(changeItemView) scrollView.addSubview(userInfoBtn) @@ -89,9 +90,16 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol { topLogoIcon.snp.makeConstraints { make in make.left.equalTo(20) make.top.equalTo(14 + NavHeight) - make.width.equalTo(260) + make.width.equalTo(76) make.height.equalTo(23) } + searchView.snp.makeConstraints { make in + make.leading.equalTo(topLogoIcon.snp.trailing).offset((UIDevice.scaleWidth(width: 18))) + make.height.equalTo(UIDevice.scaleWidth(width: 30)) + make.width.equalTo(UIDevice.scaleWidth(width: 240)) + make.centerY.equalTo(topLogoIcon) + } + chooseItemVeiw.snp.makeConstraints { make in make.left.equalTo(20) make.top.equalTo(self.topLogoIcon.snp.bottom).offset(18) @@ -172,13 +180,14 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol { return } let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero) - userInfoView.clickBtnBlock = {[weak self] (type,model) in + userInfoView.clickBtnBlock = {[weak self] (type,uid) in - let session = NIMSession("\(model.uid)", type: .P2P) + let session = NIMSession(uid, type: .P2P) let chatVC = ChatVC.init(session: session) self?.navigationController?.pushViewController(chatVC, animated: true) } userInfoView.model = model + userInfoView.type = 0 weakSelf.view.addSubview(userInfoView) userInfoView.snp.makeConstraints { make in make.edges.equalTo(weakSelf.view) @@ -192,8 +201,15 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol { make.edges.equalTo((self?.view)!) } } + + let searchTap = UITapGestureRecognizer(target: self, action: #selector(clickSearchAction)) + searchView.addGestureRecognizer(searchTap) + } + @objc func clickSearchAction(){ + let searchVC = HomeSearchVC() + searchVC.modalPresentationStyle = .fullScreen + navigationController?.present(searchVC, animated: true, completion: nil) } - @objc func clickLongTapAction(sender:UIPanGestureRecognizer){ let i = (sender.view?.tag ?? 100) - 100 if sender.state == .began{ @@ -233,12 +249,13 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol { } let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero) - userInfoView.clickBtnBlock = {[weak self] (type,model) in + userInfoView.clickBtnBlock = {[weak self] (type,uid) in - let session = NIMSession("\(model.uid)", type: .P2P) + let session = NIMSession(uid, type: .P2P) let chatVC = ChatVC.init(session: session) self?.navigationController?.pushViewController(chatVC, animated: true) } + userInfoView.type = 0 userInfoView.model = view.model self.view.addSubview(userInfoView) userInfoView.snp.makeConstraints { make in @@ -321,7 +338,11 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol { _changeItemView.text = "换一换" return _changeItemView }() - + private lazy var searchView:HomeVoiceSearchView = { + let _searchView = HomeVoiceSearchView(frame: .zero) + + return _searchView + }() var userInfoBtn:UIButton = { let _userInfoBtn = UIButton() _userInfoBtn.setBackgroundImage(UIImage(named: "yin_home_voice_user_info_bg"), for: .normal) diff --git a/yinmeng-ios/Modules/Room/Tool/YinRoomAudioManager.swift b/yinmeng-ios/Modules/Room/Tool/YinRoomAudioManager.swift new file mode 100644 index 0000000..2901e42 --- /dev/null +++ b/yinmeng-ios/Modules/Room/Tool/YinRoomAudioManager.swift @@ -0,0 +1,12 @@ +// +// YinRoomAudioanager.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/22. +// + +import UIKit + +class YinRoomAudMioanager: NSObject { + +} diff --git a/yinmeng-ios/Modules/Room/Tool/YinRoomTRTCManager.swift b/yinmeng-ios/Modules/Room/Tool/YinRoomTRTCManager.swift new file mode 100644 index 0000000..2d07769 --- /dev/null +++ b/yinmeng-ios/Modules/Room/Tool/YinRoomTRTCManager.swift @@ -0,0 +1,26 @@ +// +// YinRoomTRTCManager.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/22. +// + +import UIKit + +class YinRoomTRTCManager: NSObject { + override init() { + + } + private func initRTRC(){ + let cloud = TRTCCloud.sharedInstance() + let params = TRTCAudioVolumeEvaluateParams() + params.interval = 900 + cloud.enableAudioVolumeEvaluation(true, with: params) + TRTCCloud.setConsoleEnabled(false) + TRTCCloud.sharedInstance().addDelegate(self) + } +} + +extension YinRoomTRTCManager:TRTCCloudDelegate{ + +} diff --git a/yinmeng-ios/Modules/Room/VC/RoomVC.swift b/yinmeng-ios/Modules/Room/VC/RoomVC.swift index 792ecc0..cc4cc63 100644 --- a/yinmeng-ios/Modules/Room/VC/RoomVC.swift +++ b/yinmeng-ios/Modules/Room/VC/RoomVC.swift @@ -49,21 +49,31 @@ class RoomVC: BaseViewController, HiddenNavigationBarProtocol { RoomVCViewModel.roomVM.isMute = true NIMSDK.shared().chatroomManager.exitChatroom(self.roomInfo?.roomId ?? "") self.dismiss(animated: true, completion: nil) - return - } - TRTCCloud.sharedInstance().exitRoom() - TRTCCloud.sharedInstance().muteAllRemoteAudio(false) - TRTCCloud.sharedInstance().muteLocalAudio(false) - RoomVCViewModel.roomVM.isMute = true - NIMSDK.shared().chatroomManager.exitChatroom(self.roomInfo?.roomId ?? "") - self.dismiss(animated: true, completion: nil) - DispatchQueue.main.asyncAfter(deadline: .now() + 1) { - let vc = RoomVC(roomUid: uid) - let nav = BaseNavigationViewController.init(rootViewController: vc) - nav.modalPresentationStyle = .fullScreen - keyWindow.rootViewController?.present(nav, animated: true, completion: nil) + + }else if type == 1 { + + TRTCCloud.sharedInstance().exitRoom() + TRTCCloud.sharedInstance().muteAllRemoteAudio(false) + TRTCCloud.sharedInstance().muteLocalAudio(false) + RoomVCViewModel.roomVM.isMute = true + NIMSDK.shared().chatroomManager.exitChatroom(self.roomInfo?.roomId ?? "") + self.dismiss(animated: true, completion: nil) + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + let vc = RoomVC(roomUid: uid) + let nav = BaseNavigationViewController.init(rootViewController: vc) + nav.modalPresentationStyle = .fullScreen + keyWindow.rootViewController?.present(nav, animated: true, completion: nil) + } + + }else{ + let web = WebViewController(url: uid,isHalf: true) + self.present(web, animated: true, completion: nil) + + + } + } } private func addNIMSDKManager(){ @@ -102,7 +112,27 @@ class RoomVC: BaseViewController, HiddenNavigationBarProtocol { make.bottom.equalTo(-bottom) make.height.equalTo(UIDevice.scaleWidth(width: 40)) } - + micSeatView.showUserInfoBlock = {[weak self] user in + guard let weakSelf = self else { return } + let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero) + userInfoView.clickBtnBlock = {[weak self] (type,uid) in + guard let weakSelf = self else { + return + } + if type == 0{ + let session = NIMSession(uid, type: .P2P) + let chatVC = ChatVC.init(session: session) + weakSelf.navigationController?.pushViewController(chatVC, animated: true) + } + + } + userInfoView.type = 2 + userInfoView.user = user + weakSelf.view.addSubview(userInfoView) + userInfoView.snp.makeConstraints { make in + make.edges.equalTo(weakSelf.view) + } + } } private func requestData(){ diff --git a/yinmeng-ios/Modules/Room/View/MicSeatView/View/MicSeatSuperView/NormalMicSeatSuperView.swift b/yinmeng-ios/Modules/Room/View/MicSeatView/View/MicSeatSuperView/NormalMicSeatSuperView.swift index c9600dc..03d94fc 100644 --- a/yinmeng-ios/Modules/Room/View/MicSeatView/View/MicSeatSuperView/NormalMicSeatSuperView.swift +++ b/yinmeng-ios/Modules/Room/View/MicSeatView/View/MicSeatSuperView/NormalMicSeatSuperView.swift @@ -9,8 +9,11 @@ import UIKit import NIMSDK import MJExtension -class NormalMicSeatSuperView: MicSeatSuperView { +typealias ShowUserInfoBlock = (_ user:UserObject)->Void + +class NormalMicSeatSuperView: MicSeatSuperView { + var showUserInfoBlock:ShowUserInfoBlock? override init(frame: CGRect) { super.init(frame: frame) setUILayout() @@ -127,20 +130,20 @@ class NormalMicSeatSuperView: MicSeatSuperView { let params = TRTCAudioVolumeEvaluateParams() params.interval = 900 cloud.enableAudioVolumeEvaluation(true, with: params) - let mewParams = TRTCParams() + let yinParams = TRTCParams() if AuthViewModel.authVM.appId.isEmpty{ - mewParams.sdkAppId = UInt32("1400798783") ?? 0 + yinParams.sdkAppId = UInt32("1400798783") ?? 0 }else{ - mewParams.sdkAppId = UInt32(AuthViewModel.authVM.appId) ?? 0 + yinParams.sdkAppId = UInt32(AuthViewModel.authVM.appId) ?? 0 } - mewParams.roomId = UInt32(curRoomId) ?? 0 + yinParams.roomId = UInt32(curRoomId) ?? 0 let uid = "\(AuthManager.userUid)" - mewParams.userId = uid + yinParams.userId = uid let sign = self.roomData?.trtcSig ?? "" - mewParams.userSig = sign - mewParams.role = TRTCRoleType.audience - TRTCCloud.sharedInstance().enterRoom(mewParams, appScene: TRTCAppScene.LIVE) + yinParams.userSig = sign + yinParams.role = TRTCRoleType.audience + TRTCCloud.sharedInstance().enterRoom(yinParams, appScene: TRTCAppScene.LIVE) TRTCCloud.sharedInstance().muteAllRemoteAudio(false) TRTCCloud.sharedInstance().muteLocalAudio(false) RoomVCViewModel.roomVM.isMute = false @@ -235,28 +238,27 @@ extension NormalMicSeatSuperView:UICollectionViewDelegate,UICollectionViewDataSo } if user.user != nil{ if user.user?.uid == AuthManager.userUid{ - let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight)) + let popUpView = PlanetStarPopUpView(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight)) keyWindow.addSubview(popUpView) popUpView.textView.text = "确定下麦旁听吗?" popUpView.senderView.setTitle("确定", for: .normal) popUpView.bgPointView.isHidden = true popUpView.pointTextView.isHidden = true - popUpView.clickSendBlcok = {[weak self] in + popUpView.clickSendBlcok = { let downRequest = NIMChatroomQueueRemoveRequest() downRequest.key = "\(indexPath.row)" downRequest.roomId = roomUid - NIMSDK.shared().chatroomManager.removeChatroomQueueObject(downRequest) {[weak self] (error, info) in - guard let self = self else{return} - if error == nil{ - - } + NIMSDK.shared().chatroomManager.removeChatroomQueueObject(downRequest) { (error, info) in + } } return } + if let showUserInfoBlock = self.showUserInfoBlock,let user = user.user{ + showUserInfoBlock(user) + } - HUDTool.show(with: "该麦位已经有人了哦~") }else{ if (index == -2){ upMicAction(index: "\(indexPath.row)") @@ -299,9 +301,10 @@ extension NormalMicSeatSuperView:UICollectionViewDelegate,UICollectionViewDataSo user.user = userData }else if changeType == 2,let i = Int(pos){ let user = roomUserList[i] - let cell = collectionView.cellForItem(at: IndexPath(row: i, section: 0)) as! NormalMicSeatCell - cell.micSeatView.speakView.isHidden = true - user.user = nil + if let cell = collectionView.cellForItem(at: IndexPath(row: i, section: 0)) as? NormalMicSeatCell{ + cell.micSeatView.speakView.isHidden = true + user.user = nil + } } } @@ -393,9 +396,11 @@ extension NormalMicSeatSuperView:TRTCCloudDelegate{ } roomOwnerView.speakView.isHidden = true for i in 0..<8 { - let cell = collectionView.cellForItem(at: IndexPath(row: i, section: 0)) as! NormalMicSeatCell - + if let cell = collectionView.cellForItem(at: IndexPath(row: i, section: 0)) as? NormalMicSeatCell{ cell.micSeatView.speakView.isHidden = true + } + + } for uid in uidList { @@ -409,11 +414,12 @@ extension NormalMicSeatSuperView:TRTCCloudDelegate{ } for i in 0..<8 { - let cell = collectionView.cellForItem(at: IndexPath(row: i, section: 0)) as! NormalMicSeatCell - if let user = cell.user,let curUid = user.uid,"\(curUid)" == uid{ - cell.micSeatView.speakView.isHidden = false - }else{ - cell.micSeatView.speakView.isHidden = true + if let cell = collectionView.cellForItem(at: IndexPath(row: i, section: 0)) as? NormalMicSeatCell{ + if let user = cell.user,let curUid = user.uid,"\(curUid)" == uid{ + cell.micSeatView.speakView.isHidden = false + }else{ + cell.micSeatView.speakView.isHidden = true + } } } } diff --git a/yinmeng-ios/Modules/Room/View/RoomMenuView/View/RoomMenuView.swift b/yinmeng-ios/Modules/Room/View/RoomMenuView/View/RoomMenuView.swift index c9c32aa..638222b 100644 --- a/yinmeng-ios/Modules/Room/View/RoomMenuView/View/RoomMenuView.swift +++ b/yinmeng-ios/Modules/Room/View/RoomMenuView/View/RoomMenuView.swift @@ -25,6 +25,7 @@ class RoomMenuView: UIView { addSubview(sendBtn) addSubview(chatBtn) addSubview(micBtn) + addSubview(sendGiftBtn) sendBtn.snp.makeConstraints { make in make.leading.equalTo(UIDevice.scaleWidth(width: 15)) make.top.equalTo(self) @@ -42,7 +43,11 @@ class RoomMenuView: UIView { make.centerY.equalTo(chatBtn) make.leading.equalTo(chatBtn.snp.trailing).offset((UIDevice.scaleWidth(width: 8))) } - + sendGiftBtn.snp.makeConstraints { make in + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.width.height.equalTo(UIDevice.scaleWidth(width: 38)) + make.centerY.equalTo(chatBtn) + } } @@ -163,9 +168,9 @@ class RoomMenuView: UIView { _micBtn.isHidden = true return _micBtn }() -// private lazy var sendGiftBtn :UIButton = { -// let _sendGiftBtn = UIButton() -// _sendGiftBtn.setImage(UIImage(named: room_send_gift_icon), for: .normal) -// return _sendGiftBtn -// }() + private lazy var sendGiftBtn :UIButton = { + let _sendGiftBtn = UIButton() + _sendGiftBtn.setImage(UIImage(named: "room_send_gift_icon"), for: .normal) + return _sendGiftBtn + }() } diff --git a/yinmeng-ios/Modules/Room/View/RoomTopView/Model/YinRoomRankModel.swift b/yinmeng-ios/Modules/Room/View/RoomTopView/Model/YinRoomRankModel.swift new file mode 100644 index 0000000..c094145 --- /dev/null +++ b/yinmeng-ios/Modules/Room/View/RoomTopView/Model/YinRoomRankModel.swift @@ -0,0 +1,26 @@ +// +// YinRoomRankModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/22. +// + +import UIKit +import HandyJSON + +struct YinRoomRankModel: HandyJSON{ + var avatar = "" + var charmSeq = 0 + var charmUrl = "" + var experNewUrl = "" + var charmNewUrl = "" + var erbanNo = 0 + var experSeq = 0 + var experUrl = "" + var gender:UserSexType = .Boy + var goldAmount = 0 + var hide = false + var nick = "" + var ranking = 0 + var uid = 0 +} diff --git a/yinmeng-ios/Modules/Room/View/SendGift/Model/SendGiftUserModel.swift b/yinmeng-ios/Modules/Room/View/SendGift/Model/SendGiftUserModel.swift new file mode 100644 index 0000000..43c78cd --- /dev/null +++ b/yinmeng-ios/Modules/Room/View/SendGift/Model/SendGiftUserModel.swift @@ -0,0 +1,18 @@ +// +// SendGiftUserModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/14. +// + +import UIKit +import HandyJSON + +struct SendGiftUserModel: HandyJSON{ + var avatar = "" + var nick = "" + var position = "" + var vipMic = false + var isChoose = false + var uid = 0 +} diff --git a/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftFaceplateView.swift b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftFaceplateView.swift new file mode 100644 index 0000000..520584b --- /dev/null +++ b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftFaceplateView.swift @@ -0,0 +1,46 @@ +// +// SendGiftFaceplateView.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/14. +// + +import UIKit + +class SendGiftFaceplateView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + addSubview(dissBtn) + addSubview(bgMaskView) + addSubview(contentStackView) + } + //MARK: - 懒加载 + private lazy var dissBtn:UIButton = { + let _dissBtn = UIButton() + return _dissBtn + }() + private lazy var bgMaskView:UIVisualEffectView = { + let blur = UIBlurEffect(style: .dark) + let _bgMaskView = UIVisualEffectView(effect: blur) + + return _bgMaskView + }() + private lazy var contentStackView:UIStackView = { + let _contentStackView = UIStackView() + _contentStackView.axis = .vertical + _contentStackView.distribution = .fill + _contentStackView.alignment = .fill + _contentStackView.spacing = 0 + _contentStackView.backgroundColor = .clear + return _contentStackView + }() +} diff --git a/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftTopView.swift b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftTopView.swift new file mode 100644 index 0000000..cacd652 --- /dev/null +++ b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftTopView.swift @@ -0,0 +1,46 @@ +// +// SendGiftTopView.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/14. +// + +import UIKit + +class SendGiftTopView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + addSubview(giftBtn) + addSubview(lineView) + giftBtn.snp.makeConstraints { make in + make.leading.equalTo(UIDevice.scaleWidth(width: 16)) + make.centerY.equalTo(self) + make.width.equalTo(UIDevice.scaleWidth(width: 40)) + } + lineView.snp.makeConstraints { make in + make.height.equalTo(1) + make.leading.trailing.bottom.equalTo(self) + + } + } + //MARK: - 懒加载 + private lazy var giftBtn:UIButton = { + let _giftBtn = UIButton.getCustomBtn(text: "送礼",font: UIFont.getScaleFont(ofSize: 14, weight: .semibold),color: ThemeColor(hexStr: "#878B9C"),selectedColor: .white) + _giftBtn.isSelected = true + return _giftBtn + }() + private lazy var lineView:UIView = { + let _lineView = UIView() + _lineView.backgroundColor = ThemeColor(hexStr: "#FFFFFF", alpha: 0.1) + return _lineView + }() +} diff --git a/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserCell.swift b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserCell.swift new file mode 100644 index 0000000..402f9d4 --- /dev/null +++ b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserCell.swift @@ -0,0 +1,71 @@ +// +// SendGiftUserCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/14. +// + +import UIKit +import Nuke + +class SendGiftUserCell: UICollectionViewCell { + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + contentView.addSubview(avatarView) + contentView.addSubview(bgBackgroundView) + contentView.addSubview(numView) + avatarView.snp.makeConstraints { make in + make.centerX.top.equalTo(contentView) + make.width.height.equalTo(UIDevice.scaleWidth(width: 38)) + } + bgBackgroundView.snp.makeConstraints { make in + make.edges.equalTo(avatarView) + } + numView.snp.makeConstraints { make in + make.height.equalTo(UIDevice.scaleWidth(width: 10)) + make.centerY.equalTo(avatarView.snp.bottom) + make.centerX.equalTo(avatarView) + } + } + + //MARK: - 懒加载 + var model:SendGiftUserModel? = nil{ + didSet{ + guard let _model = model else { return} + if let position = Int(_model.position){ + numView.text = position == -1 ? "房主" : "\(position + 1)" + } + Nuke.loadImage(with: _model.avatar, into: avatarView, completion: nil) + avatarView.layer.borderWidth = _model.isChoose ? 2 : 0 + bgBackgroundView.isHidden = _model.isChoose + numView.backgroundColor = _model.isChoose ? ThemeColor(hexStr: "#FFE710"):ThemeColor(hexStr: "#BDBFD0") + numView.textColor = _model.isChoose ? ThemeColor(hexStr: "#282828"):.white + } + } + private lazy var avatarView:UIImageView = { + let _avatarView = UIImageView() + _avatarView.layer.masksToBounds = true + _avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 38)/2 + _avatarView.layer.borderColor = ThemeColor(hexStr: "#FFE710").cgColor + return _avatarView + }() + private lazy var bgBackgroundView:UIView = { + let _backgroundView = UIView() + _backgroundView.backgroundColor = UIColor(white: 0, alpha: 0.2) + _backgroundView.layer.cornerRadius = UIDevice.scaleWidth(width: 38)/2 + _backgroundView.layer.masksToBounds = true + return _backgroundView + }() + private lazy var numView:UILabel = { + let _numView = UILabel.getCustomLabel(font: UIFont.getScaleFont(ofSize: 8, weight: .regular),color: .white,textAlignment: .center,backgroundColor: ThemeColor(hexStr: "#999999"),masksToBounds: true,cornerRadius: UIDevice.scaleWidth(width: 10)/2) + return _numView + }() +} diff --git a/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserView.swift b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserView.swift new file mode 100644 index 0000000..bcf8022 --- /dev/null +++ b/yinmeng-ios/Modules/Room/View/SendGift/View/SendGiftUserView.swift @@ -0,0 +1,46 @@ +// +// SendGiftUserView.swift +// yinmeng-ios +// +// Created by duoban on 2024/3/14. +// + +import UIKit + +class SendGiftUserView: UIView { + + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + + } + //MARK: - 懒加载 + private lazy var textVeiw:UILabel = { + let _textView = UILabel.getCustomLabel(text: "送给",font: UIFont.getScaleFont(ofSize: 13, weight: .medium),color: .white,textAlignment: .center) + return _textView + }() + private lazy var allUserBtn:UIButton = { + let normalImage = UIImage.image(color: ThemeColor(hexStr: "#878B9C")) + let selectedImage = UIImage.image(color: ThemeColor(hexStr: "#FFE710")) + let _allUserBtn = UIButton.getCustomBtn(text: "全选",font: UIFont.getScaleFont(ofSize: 13, weight: .medium),color: .white,selectedColor: ThemeColor(hexStr: "#28282"),bgImage: normalImage,selectedBgImage: selectedImage) + _allUserBtn.layer.cornerRadius = UIDevice.scaleWidth(width: 18)/2 + _allUserBtn.layer.masksToBounds = true + return _allUserBtn + }() + private lazy var collectionView:UICollectionView = { + let flowLayout = UICollectionViewFlowLayout() + flowLayout.scrollDirection = .horizontal + flowLayout.itemSize = CGSize(width: UIDevice.scaleWidth(width: 38), height: UIDevice.scaleWidth(width: 43)) + let _collectionView = UICollectionView() + + + return _collectionView + }() +} diff --git a/yinmeng-ios/Modules/User/VM/UserObject.swift b/yinmeng-ios/Modules/User/VM/UserObject.swift index aff78cb..abd6908 100644 --- a/yinmeng-ios/Modules/User/VM/UserObject.swift +++ b/yinmeng-ios/Modules/User/VM/UserObject.swift @@ -23,8 +23,8 @@ struct UserFunctionItem { } struct UserObject: HandyJSON { - - + var birth:Int64 = 0 + var userDesc = "" var uid:Int? = 0 var erbanNo:Int? = 0 var avatar:String? = "" @@ -35,6 +35,8 @@ struct UserObject: HandyJSON { var phone:String? = "" var giftValue:Int64 = 0 var userLevelVo:userLevelModel? + var userVoice = "" + var voiceDura = "" } struct userLevelModel:HandyJSON{