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 0000000..30181cd Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@2x.png differ 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 0000000..f350dd4 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/home_search_online_icon.imageset/home_search_online_icon@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/Contents.json new file mode 100644 index 0000000..268e93a --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_home_voice_search_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_home_voice_search_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@2x.png new file mode 100644 index 0000000..09df363 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@2x.png differ 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 0000000..81dde87 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_bg.imageset/yin_home_voice_search_bg@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/Contents.json new file mode 100644 index 0000000..00236e2 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_home_voice_search_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_home_voice_search_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@2x.png new file mode 100644 index 0000000..2bcb6d7 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@2x.png differ 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 0000000..37b2d30 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_search_icon.imageset/yin_home_voice_search_icon@3x.png differ 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 caef05d..33e5156 100644 Binary files a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@2x.png and b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@3x.png b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@3x.png index d499ba0..5d6194e 100644 Binary files a/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@3x.png and b/yinmeng-ios/Assets.xcassets/Home/yin_home_voice_top_icon.imageset/yin_home_voice_top_icon@3x.png differ 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 0000000..586a822 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@3x.png b/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@3x.png new file mode 100644 index 0000000..d84cc5f Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_left_black_arrow.imageset/yin_left_black_arrow@3x.png differ 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 0000000..790af35 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@3x.png b/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@3x.png new file mode 100644 index 0000000..5205205 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_plane_star_send_gift_icon.imageset/yin_plane_star_send_gift_icon@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/Contents.json new file mode 100644 index 0000000..4b73280 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_search_vc_iocn@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_search_vc_iocn@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@2x.png new file mode 100644 index 0000000..319a0ff Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@3x.png b/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@3x.png new file mode 100644 index 0000000..8ba9379 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_search_vc_iocn.imageset/yin_search_vc_iocn@3x.png differ 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 0000000..e29a190 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@2x.png differ 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 0000000..f2cfbcb Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/MicSeat/room_send_gift_icon.imageset/room_send_gift_icon@3x.png differ 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 0000000..f79973a Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@2x.png differ 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 0000000..27ef2f9 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_first.imageset/yin_room_rank_first@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/Contents.json new file mode 100644 index 0000000..c9e4ce9 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_room_rank_second@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_room_rank_second@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@2x.png b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@2x.png new file mode 100644 index 0000000..a8bcaad Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@2x.png differ 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 0000000..ed275cb Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_second.imageset/yin_room_rank_second@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/Contents.json new file mode 100644 index 0000000..34c2821 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_room_rank_third@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_room_rank_third@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@2x.png b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@2x.png new file mode 100644 index 0000000..b174af6 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@3x.png b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@3x.png new file mode 100644 index 0000000..84a4751 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/room/Rank/yin_room_rank_third.imageset/yin_room_rank_third@3x.png differ 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{