diff --git a/Podfile b/Podfile index dc59746..cc4bcee 100644 --- a/Podfile +++ b/Podfile @@ -11,6 +11,9 @@ target 'yinmeng-ios' do pod 'MBProgressHUD' pod 'SVGAPlayer' pod 'YYText' + pod 'YYWebImage', '~> 1.0.5' +#下拉刷新控件 + pod 'MJRefresh' # 滑动标签栏 pod 'JXCategoryView' pod 'JXPagingView/Pager' diff --git a/yinmeng-ios.xcodeproj/project.pbxproj b/yinmeng-ios.xcodeproj/project.pbxproj index 2939f8c..fd50c13 100644 --- a/yinmeng-ios.xcodeproj/project.pbxproj +++ b/yinmeng-ios.xcodeproj/project.pbxproj @@ -10,21 +10,9 @@ 2311D69D2B8DC311001C70AB /* PlanetStarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D69C2B8DC311001C70AB /* PlanetStarModel.swift */; }; 2311D6A12B8DD649001C70AB /* StarIcon.svga in Resources */ = {isa = PBXBuildFile; fileRef = 2311D6A02B8DD649001C70AB /* StarIcon.svga */; }; 2311D6A52B8F0E06001C70AB /* StarGift.svga in Resources */ = {isa = PBXBuildFile; fileRef = 2311D6A42B8F0E06001C70AB /* StarGift.svga */; }; - 2311D6A72B8F2CFA001C70AB /* HomeVoiceChooseItemVeiw.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6A62B8F2CFA001C70AB /* HomeVoiceChooseItemVeiw.swift */; }; - 2311D6A92B8F405F001C70AB /* HomeVoiceChooseTypeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6A82B8F405F001C70AB /* HomeVoiceChooseTypeView.swift */; }; - 2311D6AB2B9024A9001C70AB /* HomeVoicePlayMusicItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6AA2B9024A9001C70AB /* HomeVoicePlayMusicItemView.swift */; }; - 2311D6AD2B9058AA001C70AB /* HomeVoiceModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6AC2B9058AA001C70AB /* HomeVoiceModel.swift */; }; - 2311D6AF2B906148001C70AB /* HomeVoiceFollowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6AE2B906148001C70AB /* HomeVoiceFollowView.swift */; }; - 2311D6B12B9062A3001C70AB /* HomeVoiceFollowCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6B02B9062A3001C70AB /* HomeVoiceFollowCell.swift */; }; - 2311D6B32B906EDA001C70AB /* HomeVoiceGuideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6B22B906EDA001C70AB /* HomeVoiceGuideView.swift */; }; - 2311D6B52B907053001C70AB /* HomeVoiceUserInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6B42B907053001C70AB /* HomeVoiceUserInfoView.swift */; }; - 2311D6B72B908979001C70AB /* PlayVoiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6B62B908979001C70AB /* PlayVoiceManager.swift */; }; 2311D6BA2B908D01001C70AB /* UserPayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6B92B908D01001C70AB /* UserPayViewController.swift */; }; - 2311D6BC2B909A4F001C70AB /* HomeVoicePublishView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6BB2B909A4F001C70AB /* HomeVoicePublishView.swift */; }; 2311D6BE2B90A1E9001C70AB /* PublishVoice.svga in Resources */ = {isa = PBXBuildFile; fileRef = 2311D6BD2B90A1E9001C70AB /* PublishVoice.svga */; }; 2311D6C02B90A221001C70AB /* RecordPlayer.svga in Resources */ = {isa = PBXBuildFile; fileRef = 2311D6BF2B90A221001C70AB /* RecordPlayer.svga */; }; - 2311D6C42B917619001C70AB /* HomeVoiceRecordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6C32B917619001C70AB /* HomeVoiceRecordView.swift */; }; - 2311D6C62B917949001C70AB /* HomeVoiceRecordBtnView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6C52B917949001C70AB /* HomeVoiceRecordBtnView.swift */; }; 2311D6CB2B91BBF2001C70AB /* RecordVoiceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6CA2B91BBF2001C70AB /* RecordVoiceManager.m */; }; 2311D6CF2B91D35E001C70AB /* UserPayViewItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6CE2B91D35E001C70AB /* UserPayViewItemView.swift */; }; 2311D6D12B91DDDF001C70AB /* UserPayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2311D6D02B91DDDF001C70AB /* UserPayViewModel.swift */; }; @@ -56,11 +44,6 @@ 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 */; }; @@ -78,7 +61,44 @@ 23630BCF2BADA7D9003AD25D /* SendGiftSendNumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BCE2BADA7D9003AD25D /* SendGiftSendNumView.swift */; }; 23630BD12BADA900003AD25D /* SendGiftSendNumCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BD02BADA900003AD25D /* SendGiftSendNumCell.swift */; }; 23630BD32BADA9FF003AD25D /* SendGiftSendNumModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23630BD22BADA9FF003AD25D /* SendGiftSendNumModel.swift */; }; - 238A900C2BAAC6C600828123 /* HomeVoiceSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */; }; + 238F418D2BBAB08A008564B8 /* YinUserInfoHeadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F418C2BBAB08A008564B8 /* YinUserInfoHeadView.swift */; }; + 238F418F2BBAC7BF008564B8 /* YinUserInfoHeadItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F418E2BBAC7BF008564B8 /* YinUserInfoHeadItemView.swift */; }; + 238F41942BBBDCBE008564B8 /* YinUserInfoMoreCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41932BBBDCBE008564B8 /* YinUserInfoMoreCell.swift */; }; + 238F41962BBBF34D008564B8 /* YinMineSettingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41952BBBF34D008564B8 /* YinMineSettingVC.swift */; }; + 238F41982BBBF3DF008564B8 /* YinMineSettingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41972BBBF3DF008564B8 /* YinMineSettingCell.swift */; }; + 238F419C2BBBF96F008564B8 /* UserObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F419B2BBBF96F008564B8 /* UserObject.swift */; }; + 238F419E2BBBF981008564B8 /* YinMineSettingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F419D2BBBF981008564B8 /* YinMineSettingModel.swift */; }; + 238F41A02BBCF066008564B8 /* YinUserInfoMoreItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F419F2BBCF066008564B8 /* YinUserInfoMoreItemCell.swift */; }; + 238F41A22BBCF163008564B8 /* YinUserInfoMoreItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41A12BBCF163008564B8 /* YinUserInfoMoreItemModel.swift */; }; + 238F41AB2BBCFE4F008564B8 /* YinMineFansVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41AA2BBCFE4F008564B8 /* YinMineFansVC.swift */; }; + 238F41AD2BBCFE78008564B8 /* YinMineFansCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41AC2BBCFE78008564B8 /* YinMineFansCell.swift */; }; + 238F41AF2BBD03BF008564B8 /* YinMineFansModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41AE2BBD03BF008564B8 /* YinMineFansModel.swift */; }; + 238F41B12BBD06CB008564B8 /* YinMineFansEmptyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41B02BBD06CB008564B8 /* YinMineFansEmptyCell.swift */; }; + 238F41B32BBD2E50008564B8 /* YinMineVisitorVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41B22BBD2E50008564B8 /* YinMineVisitorVC.swift */; }; + 238F41B52BBD2F0B008564B8 /* YinMineVisitorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41B42BBD2F0B008564B8 /* YinMineVisitorCell.swift */; }; + 238F41D72BBD5365008564B8 /* HomeVoiceVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41BD2BBD5365008564B8 /* HomeVoiceVC.swift */; }; + 238F41D82BBD5365008564B8 /* HomeSearchRecordVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41BE2BBD5365008564B8 /* HomeSearchRecordVC.swift */; }; + 238F41D92BBD5365008564B8 /* HomeSearchVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41BF2BBD5365008564B8 /* HomeSearchVC.swift */; }; + 238F41DA2BBD5365008564B8 /* HomeSearchRoomVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C02BBD5365008564B8 /* HomeSearchRoomVC.swift */; }; + 238F41DB2BBD5365008564B8 /* PlayVoiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C22BBD5365008564B8 /* PlayVoiceManager.swift */; }; + 238F41DC2BBD5365008564B8 /* HomeVoiceFollowCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C42BBD5365008564B8 /* HomeVoiceFollowCell.swift */; }; + 238F41DD2BBD5365008564B8 /* HomeVoiceUserInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C52BBD5365008564B8 /* HomeVoiceUserInfoView.swift */; }; + 238F41DE2BBD5365008564B8 /* HomeVoicePlayMusicItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C62BBD5365008564B8 /* HomeVoicePlayMusicItemView.swift */; }; + 238F41DF2BBD5365008564B8 /* HomeVoiceChooseTypeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C72BBD5365008564B8 /* HomeVoiceChooseTypeView.swift */; }; + 238F41E02BBD5365008564B8 /* HomeSearchRecordCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C82BBD5365008564B8 /* HomeSearchRecordCell.swift */; }; + 238F41E12BBD5365008564B8 /* HomeVoiceGuideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41C92BBD5365008564B8 /* HomeVoiceGuideView.swift */; }; + 238F41E22BBD5365008564B8 /* HomeVoiceFollowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41CA2BBD5365008564B8 /* HomeVoiceFollowView.swift */; }; + 238F41E32BBD5365008564B8 /* HomeVoiceRecordBtnView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41CB2BBD5365008564B8 /* HomeVoiceRecordBtnView.swift */; }; + 238F41E42BBD5365008564B8 /* HomeSearchRoomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41CC2BBD5365008564B8 /* HomeSearchRoomCell.swift */; }; + 238F41E52BBD5365008564B8 /* HomeVoiceSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41CD2BBD5365008564B8 /* HomeVoiceSearchView.swift */; }; + 238F41E62BBD5365008564B8 /* HomeSearchNavView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41CE2BBD5365008564B8 /* HomeSearchNavView.swift */; }; + 238F41E72BBD5365008564B8 /* HomeVoiceRecordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41CF2BBD5365008564B8 /* HomeVoiceRecordView.swift */; }; + 238F41E82BBD5365008564B8 /* HomeVoiceChooseItemVeiw.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41D02BBD5365008564B8 /* HomeVoiceChooseItemVeiw.swift */; }; + 238F41E92BBD5365008564B8 /* HomeSearchRecordTextCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41D12BBD5365008564B8 /* HomeSearchRecordTextCell.swift */; }; + 238F41EA2BBD5365008564B8 /* HomeVoicePublishView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41D22BBD5365008564B8 /* HomeVoicePublishView.swift */; }; + 238F41EB2BBD5365008564B8 /* HomeSearchRoomModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41D42BBD5365008564B8 /* HomeSearchRoomModel.swift */; }; + 238F41EC2BBD5365008564B8 /* HomeVoiceModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41D52BBD5365008564B8 /* HomeVoiceModel.swift */; }; + 238F41EE2BBD539E008564B8 /* YinHomeSearchLiveRoomModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238F41ED2BBD539E008564B8 /* YinHomeSearchLiveRoomModel.swift */; }; 239EA6442BAE898300570127 /* RectiveGiftModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6432BAE898300570127 /* RectiveGiftModel.swift */; }; 239EA6462BAE8A6600570127 /* RectiveGiftUserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6452BAE8A6600570127 /* RectiveGiftUserModel.swift */; }; 239EA6482BAE8D5E00570127 /* ChatCustomMsgModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 239EA6472BAE8D5E00570127 /* ChatCustomMsgModel.swift */; }; @@ -149,12 +169,10 @@ E8D15AA62B89B0C600369467 /* List+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA52B89B0C600369467 /* List+.swift */; }; E8D15AA82B89B74700369467 /* YMRequestX.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA72B89B74700369467 /* YMRequestX.swift */; }; E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */; }; - E8D15AB02B8AFFCE00369467 /* HomeVoiceVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AAF2B8AFFCE00369467 /* HomeVoiceVC.swift */; }; E8D15AB32B8B000400369467 /* PlanetStarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AB22B8B000400369467 /* PlanetStarVC.swift */; }; E8D15AB62B8B002700369467 /* ChatVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AB52B8B002700369467 /* ChatVC.swift */; }; E8D15AB82B8B003C00369467 /* UserInfoVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AB72B8B003C00369467 /* UserInfoVC.swift */; }; E8D15ABC2B8B87BA00369467 /* UserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15ABB2B8B87BA00369467 /* UserViewModel.swift */; }; - E8D15ABF2B8B885700369467 /* UserObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15ABE2B8B885700369467 /* UserObject.swift */; }; E8D15AC22B8C703C00369467 /* UserFunctionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AC12B8C703C00369467 /* UserFunctionView.swift */; }; E8D15AC52B8C90D400369467 /* AboutUsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AC42B8C90D400369467 /* AboutUsVC.swift */; }; E8D15AE82B8CD47100369467 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AE72B8CD47100369467 /* WebViewController.swift */; }; @@ -177,21 +195,9 @@ 2311D69C2B8DC311001C70AB /* PlanetStarModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetStarModel.swift; sourceTree = ""; }; 2311D6A02B8DD649001C70AB /* StarIcon.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = StarIcon.svga; sourceTree = ""; }; 2311D6A42B8F0E06001C70AB /* StarGift.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = StarGift.svga; sourceTree = ""; }; - 2311D6A62B8F2CFA001C70AB /* HomeVoiceChooseItemVeiw.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceChooseItemVeiw.swift; sourceTree = ""; }; - 2311D6A82B8F405F001C70AB /* HomeVoiceChooseTypeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceChooseTypeView.swift; sourceTree = ""; }; - 2311D6AA2B9024A9001C70AB /* HomeVoicePlayMusicItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoicePlayMusicItemView.swift; sourceTree = ""; }; - 2311D6AC2B9058AA001C70AB /* HomeVoiceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceModel.swift; sourceTree = ""; }; - 2311D6AE2B906148001C70AB /* HomeVoiceFollowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceFollowView.swift; sourceTree = ""; }; - 2311D6B02B9062A3001C70AB /* HomeVoiceFollowCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceFollowCell.swift; sourceTree = ""; }; - 2311D6B22B906EDA001C70AB /* HomeVoiceGuideView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceGuideView.swift; sourceTree = ""; }; - 2311D6B42B907053001C70AB /* HomeVoiceUserInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceUserInfoView.swift; sourceTree = ""; }; - 2311D6B62B908979001C70AB /* PlayVoiceManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayVoiceManager.swift; sourceTree = ""; }; 2311D6B92B908D01001C70AB /* UserPayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserPayViewController.swift; sourceTree = ""; }; - 2311D6BB2B909A4F001C70AB /* HomeVoicePublishView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoicePublishView.swift; sourceTree = ""; }; 2311D6BD2B90A1E9001C70AB /* PublishVoice.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = PublishVoice.svga; sourceTree = ""; }; 2311D6BF2B90A221001C70AB /* RecordPlayer.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = RecordPlayer.svga; sourceTree = ""; }; - 2311D6C32B917619001C70AB /* HomeVoiceRecordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceRecordView.swift; sourceTree = ""; }; - 2311D6C52B917949001C70AB /* HomeVoiceRecordBtnView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceRecordBtnView.swift; sourceTree = ""; }; 2311D6C92B91BBF2001C70AB /* RecordVoiceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RecordVoiceManager.h; sourceTree = ""; }; 2311D6CA2B91BBF2001C70AB /* RecordVoiceManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RecordVoiceManager.m; sourceTree = ""; }; 2311D6CE2B91D35E001C70AB /* UserPayViewItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserPayViewItemView.swift; sourceTree = ""; }; @@ -224,11 +230,6 @@ 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 = ""; }; @@ -246,7 +247,44 @@ 23630BCE2BADA7D9003AD25D /* SendGiftSendNumView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftSendNumView.swift; sourceTree = ""; }; 23630BD02BADA900003AD25D /* SendGiftSendNumCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftSendNumCell.swift; sourceTree = ""; }; 23630BD22BADA9FF003AD25D /* SendGiftSendNumModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendGiftSendNumModel.swift; sourceTree = ""; }; - 238A900B2BAAC6C600828123 /* HomeVoiceSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceSearchView.swift; sourceTree = ""; }; + 238F418C2BBAB08A008564B8 /* YinUserInfoHeadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinUserInfoHeadView.swift; sourceTree = ""; }; + 238F418E2BBAC7BF008564B8 /* YinUserInfoHeadItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinUserInfoHeadItemView.swift; sourceTree = ""; }; + 238F41932BBBDCBE008564B8 /* YinUserInfoMoreCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinUserInfoMoreCell.swift; sourceTree = ""; }; + 238F41952BBBF34D008564B8 /* YinMineSettingVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineSettingVC.swift; sourceTree = ""; }; + 238F41972BBBF3DF008564B8 /* YinMineSettingCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineSettingCell.swift; sourceTree = ""; }; + 238F419B2BBBF96F008564B8 /* UserObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserObject.swift; sourceTree = ""; }; + 238F419D2BBBF981008564B8 /* YinMineSettingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineSettingModel.swift; sourceTree = ""; }; + 238F419F2BBCF066008564B8 /* YinUserInfoMoreItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinUserInfoMoreItemCell.swift; sourceTree = ""; }; + 238F41A12BBCF163008564B8 /* YinUserInfoMoreItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinUserInfoMoreItemModel.swift; sourceTree = ""; }; + 238F41AA2BBCFE4F008564B8 /* YinMineFansVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YinMineFansVC.swift; sourceTree = ""; }; + 238F41AC2BBCFE78008564B8 /* YinMineFansCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineFansCell.swift; sourceTree = ""; }; + 238F41AE2BBD03BF008564B8 /* YinMineFansModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineFansModel.swift; sourceTree = ""; }; + 238F41B02BBD06CB008564B8 /* YinMineFansEmptyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineFansEmptyCell.swift; sourceTree = ""; }; + 238F41B22BBD2E50008564B8 /* YinMineVisitorVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineVisitorVC.swift; sourceTree = ""; }; + 238F41B42BBD2F0B008564B8 /* YinMineVisitorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinMineVisitorCell.swift; sourceTree = ""; }; + 238F41BD2BBD5365008564B8 /* HomeVoiceVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceVC.swift; sourceTree = ""; }; + 238F41BE2BBD5365008564B8 /* HomeSearchRecordVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchRecordVC.swift; sourceTree = ""; }; + 238F41BF2BBD5365008564B8 /* HomeSearchVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchVC.swift; sourceTree = ""; }; + 238F41C02BBD5365008564B8 /* HomeSearchRoomVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomVC.swift; sourceTree = ""; }; + 238F41C22BBD5365008564B8 /* PlayVoiceManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlayVoiceManager.swift; sourceTree = ""; }; + 238F41C42BBD5365008564B8 /* HomeVoiceFollowCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceFollowCell.swift; sourceTree = ""; }; + 238F41C52BBD5365008564B8 /* HomeVoiceUserInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceUserInfoView.swift; sourceTree = ""; }; + 238F41C62BBD5365008564B8 /* HomeVoicePlayMusicItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoicePlayMusicItemView.swift; sourceTree = ""; }; + 238F41C72BBD5365008564B8 /* HomeVoiceChooseTypeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceChooseTypeView.swift; sourceTree = ""; }; + 238F41C82BBD5365008564B8 /* HomeSearchRecordCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchRecordCell.swift; sourceTree = ""; }; + 238F41C92BBD5365008564B8 /* HomeVoiceGuideView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceGuideView.swift; sourceTree = ""; }; + 238F41CA2BBD5365008564B8 /* HomeVoiceFollowView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceFollowView.swift; sourceTree = ""; }; + 238F41CB2BBD5365008564B8 /* HomeVoiceRecordBtnView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceRecordBtnView.swift; sourceTree = ""; }; + 238F41CC2BBD5365008564B8 /* HomeSearchRoomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomCell.swift; sourceTree = ""; }; + 238F41CD2BBD5365008564B8 /* HomeVoiceSearchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceSearchView.swift; sourceTree = ""; }; + 238F41CE2BBD5365008564B8 /* HomeSearchNavView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchNavView.swift; sourceTree = ""; }; + 238F41CF2BBD5365008564B8 /* HomeVoiceRecordView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceRecordView.swift; sourceTree = ""; }; + 238F41D02BBD5365008564B8 /* HomeVoiceChooseItemVeiw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceChooseItemVeiw.swift; sourceTree = ""; }; + 238F41D12BBD5365008564B8 /* HomeSearchRecordTextCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchRecordTextCell.swift; sourceTree = ""; }; + 238F41D22BBD5365008564B8 /* HomeVoicePublishView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoicePublishView.swift; sourceTree = ""; }; + 238F41D42BBD5365008564B8 /* HomeSearchRoomModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeSearchRoomModel.swift; sourceTree = ""; }; + 238F41D52BBD5365008564B8 /* HomeVoiceModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVoiceModel.swift; sourceTree = ""; }; + 238F41ED2BBD539E008564B8 /* YinHomeSearchLiveRoomModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YinHomeSearchLiveRoomModel.swift; sourceTree = ""; }; 239EA6432BAE898300570127 /* RectiveGiftModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RectiveGiftModel.swift; sourceTree = ""; }; 239EA6452BAE8A6600570127 /* RectiveGiftUserModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RectiveGiftUserModel.swift; sourceTree = ""; }; 239EA6472BAE8D5E00570127 /* ChatCustomMsgModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatCustomMsgModel.swift; sourceTree = ""; }; @@ -326,12 +364,10 @@ E8D15AA52B89B0C600369467 /* List+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "List+.swift"; sourceTree = ""; }; E8D15AA72B89B74700369467 /* YMRequestX.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YMRequestX.swift; sourceTree = ""; }; E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YMNetworkFun.swift; sourceTree = ""; }; - E8D15AAF2B8AFFCE00369467 /* HomeVoiceVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVoiceVC.swift; sourceTree = ""; }; E8D15AB22B8B000400369467 /* PlanetStarVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetStarVC.swift; sourceTree = ""; }; E8D15AB52B8B002700369467 /* ChatVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatVC.swift; sourceTree = ""; }; E8D15AB72B8B003C00369467 /* UserInfoVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoVC.swift; sourceTree = ""; }; E8D15ABB2B8B87BA00369467 /* UserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewModel.swift; sourceTree = ""; }; - E8D15ABE2B8B885700369467 /* UserObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserObject.swift; sourceTree = ""; }; E8D15AC12B8C703C00369467 /* UserFunctionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserFunctionView.swift; sourceTree = ""; }; E8D15AC42B8C90D400369467 /* AboutUsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutUsVC.swift; sourceTree = ""; }; E8D15AE72B8CD47100369467 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; @@ -659,6 +695,129 @@ path = View; sourceTree = ""; }; + 238F41922BBBDC9D008564B8 /* Cell */ = { + isa = PBXGroup; + children = ( + 238F41932BBBDCBE008564B8 /* YinUserInfoMoreCell.swift */, + 238F419F2BBCF066008564B8 /* YinUserInfoMoreItemCell.swift */, + 238F41972BBBF3DF008564B8 /* YinMineSettingCell.swift */, + ); + path = Cell; + sourceTree = ""; + }; + 238F419A2BBBF958008564B8 /* Model */ = { + isa = PBXGroup; + children = ( + 238F419B2BBBF96F008564B8 /* UserObject.swift */, + 238F419D2BBBF981008564B8 /* YinMineSettingModel.swift */, + 238F41A12BBCF163008564B8 /* YinUserInfoMoreItemModel.swift */, + ); + path = Model; + sourceTree = ""; + }; + 238F41A32BBCFDE7008564B8 /* Friend */ = { + isa = PBXGroup; + children = ( + 238F41A82BBCFE4F008564B8 /* Model */, + 238F41A92BBCFE4F008564B8 /* VC */, + 238F41A62BBCFE4F008564B8 /* View */, + 238F41A72BBCFE4F008564B8 /* ViewModel */, + ); + path = Friend; + sourceTree = ""; + }; + 238F41A62BBCFE4F008564B8 /* View */ = { + isa = PBXGroup; + children = ( + 238F41AC2BBCFE78008564B8 /* YinMineFansCell.swift */, + 238F41B42BBD2F0B008564B8 /* YinMineVisitorCell.swift */, + 238F41B02BBD06CB008564B8 /* YinMineFansEmptyCell.swift */, + ); + path = View; + sourceTree = ""; + }; + 238F41A72BBCFE4F008564B8 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 238F41AE2BBD03BF008564B8 /* YinMineFansModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 238F41A82BBCFE4F008564B8 /* Model */ = { + isa = PBXGroup; + children = ( + ); + path = Model; + sourceTree = ""; + }; + 238F41A92BBCFE4F008564B8 /* VC */ = { + isa = PBXGroup; + children = ( + 238F41AA2BBCFE4F008564B8 /* YinMineFansVC.swift */, + 238F41B22BBD2E50008564B8 /* YinMineVisitorVC.swift */, + ); + path = VC; + sourceTree = ""; + }; + 238F41BC2BBD5365008564B8 /* VC */ = { + isa = PBXGroup; + children = ( + 238F41BD2BBD5365008564B8 /* HomeVoiceVC.swift */, + 238F41BE2BBD5365008564B8 /* HomeSearchRecordVC.swift */, + 238F41BF2BBD5365008564B8 /* HomeSearchVC.swift */, + 238F41C02BBD5365008564B8 /* HomeSearchRoomVC.swift */, + ); + path = VC; + sourceTree = ""; + }; + 238F41C12BBD5365008564B8 /* Tool */ = { + isa = PBXGroup; + children = ( + 238F41C22BBD5365008564B8 /* PlayVoiceManager.swift */, + ); + path = Tool; + sourceTree = ""; + }; + 238F41C32BBD5365008564B8 /* View */ = { + isa = PBXGroup; + children = ( + 238F41C42BBD5365008564B8 /* HomeVoiceFollowCell.swift */, + 238F41C52BBD5365008564B8 /* HomeVoiceUserInfoView.swift */, + 238F41C62BBD5365008564B8 /* HomeVoicePlayMusicItemView.swift */, + 238F41C72BBD5365008564B8 /* HomeVoiceChooseTypeView.swift */, + 238F41C82BBD5365008564B8 /* HomeSearchRecordCell.swift */, + 238F41C92BBD5365008564B8 /* HomeVoiceGuideView.swift */, + 238F41CA2BBD5365008564B8 /* HomeVoiceFollowView.swift */, + 238F41CB2BBD5365008564B8 /* HomeVoiceRecordBtnView.swift */, + 238F41CC2BBD5365008564B8 /* HomeSearchRoomCell.swift */, + 238F41CD2BBD5365008564B8 /* HomeVoiceSearchView.swift */, + 238F41CE2BBD5365008564B8 /* HomeSearchNavView.swift */, + 238F41CF2BBD5365008564B8 /* HomeVoiceRecordView.swift */, + 238F41D02BBD5365008564B8 /* HomeVoiceChooseItemVeiw.swift */, + 238F41D12BBD5365008564B8 /* HomeSearchRecordTextCell.swift */, + 238F41D22BBD5365008564B8 /* HomeVoicePublishView.swift */, + ); + path = View; + sourceTree = ""; + }; + 238F41D32BBD5365008564B8 /* Model */ = { + isa = PBXGroup; + children = ( + 238F41D42BBD5365008564B8 /* HomeSearchRoomModel.swift */, + 238F41ED2BBD539E008564B8 /* YinHomeSearchLiveRoomModel.swift */, + 238F41D52BBD5365008564B8 /* HomeVoiceModel.swift */, + ); + path = Model; + sourceTree = ""; + }; + 238F41D62BBD5365008564B8 /* ViewModel */ = { + isa = PBXGroup; + children = ( + ); + path = ViewModel; + sourceTree = ""; + }; 239EA6542BAEB47900570127 /* RoomDynamicEffectView */ = { isa = PBXGroup; children = ( @@ -1074,25 +1233,11 @@ E8D15AAB2B8AFF7000369467 /* Home */ = { 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 */, - 2311D6AA2B9024A9001C70AB /* HomeVoicePlayMusicItemView.swift */, - 2311D6AE2B906148001C70AB /* HomeVoiceFollowView.swift */, - 2311D6B02B9062A3001C70AB /* HomeVoiceFollowCell.swift */, - 2311D6B22B906EDA001C70AB /* HomeVoiceGuideView.swift */, - 2311D6B42B907053001C70AB /* HomeVoiceUserInfoView.swift */, - 2311D6BB2B909A4F001C70AB /* HomeVoicePublishView.swift */, - 2311D6C32B917619001C70AB /* HomeVoiceRecordView.swift */, - 2311D6C52B917949001C70AB /* HomeVoiceRecordBtnView.swift */, - 2311D6B62B908979001C70AB /* PlayVoiceManager.swift */, + 238F41D32BBD5365008564B8 /* Model */, + 238F41C12BBD5365008564B8 /* Tool */, + 238F41BC2BBD5365008564B8 /* VC */, + 238F41C32BBD5365008564B8 /* View */, + 238F41D62BBD5365008564B8 /* ViewModel */, ); path = Home; sourceTree = ""; @@ -1125,6 +1270,7 @@ E8D15AB92B8B004000369467 /* User */ = { isa = PBXGroup; children = ( + 238F419A2BBBF958008564B8 /* Model */, E8D15AC32B8C90B100369467 /* VC */, E8D15AC02B8C700600369467 /* View */, E8D15ABA2B8B87A900369467 /* VM */, @@ -1136,7 +1282,6 @@ isa = PBXGroup; children = ( E8D15ABB2B8B87BA00369467 /* UserViewModel.swift */, - E8D15ABE2B8B885700369467 /* UserObject.swift */, ); path = VM; sourceTree = ""; @@ -1144,7 +1289,10 @@ E8D15AC02B8C700600369467 /* View */ = { isa = PBXGroup; children = ( + 238F41922BBBDC9D008564B8 /* Cell */, E8D15AC12B8C703C00369467 /* UserFunctionView.swift */, + 238F418C2BBAB08A008564B8 /* YinUserInfoHeadView.swift */, + 238F418E2BBAC7BF008564B8 /* YinUserInfoHeadItemView.swift */, E89F19B42B91E3A50098E797 /* PasswordSetView.swift */, ); path = View; @@ -1153,7 +1301,9 @@ E8D15AC32B8C90B100369467 /* VC */ = { isa = PBXGroup; children = ( + 238F41A32BBCFDE7008564B8 /* Friend */, E8D15AB72B8B003C00369467 /* UserInfoVC.swift */, + 238F41952BBBF34D008564B8 /* YinMineSettingVC.swift */, E8D15AC42B8C90D400369467 /* AboutUsVC.swift */, E89F19AE2B91C00F0098E797 /* BindMobileVC.swift */, E89F19B22B91E2C00098E797 /* PasswordSetVC.swift */, @@ -1342,10 +1492,13 @@ buildActionMask = 2147483647; files = ( E8479E3D2B8DC61F009AF878 /* ChatBaseCell.swift in Sources */, + 238F419C2BBBF96F008564B8 /* UserObject.swift in Sources */, E86A43AE2B85DFEA0084C04D /* Color+.swift in Sources */, + 238F41DD2BBD5365008564B8 /* HomeVoiceUserInfoView.swift in Sources */, E8479E482B8DD6E1009AF878 /* ChatTextCell.swift in Sources */, E8D15A9F2B89AED600369467 /* AuthManager.swift in Sources */, 23630BB02BAD2708003AD25D /* YinRoomRankModel.swift in Sources */, + 238F41E02BBD5365008564B8 /* HomeSearchRecordCell.swift in Sources */, E8479E382B8DC5CD009AF878 /* ChatListVC.swift in Sources */, 239EA6482BAE8D5E00570127 /* ChatCustomMsgModel.swift in Sources */, E89F19AF2B91C00F0098E797 /* BindMobileVC.swift in Sources */, @@ -1353,10 +1506,11 @@ 234E2DFA2B9851F000433CF7 /* UIButton+.swift in Sources */, E86A43B02B85E11B0084C04D /* BaseNavigationViewController.swift in Sources */, E86A43E82B884C5E0084C04D /* String+.swift in Sources */, + 238F41E22BBD5365008564B8 /* HomeVoiceFollowView.swift in Sources */, 23630BBD2BAD379C003AD25D /* YinRoomAudioManager.swift in Sources */, + 238F41DF2BBD5365008564B8 /* HomeVoiceChooseTypeView.swift in Sources */, 2311D6D12B91DDDF001C70AB /* UserPayViewModel.swift in Sources */, 239EA6532BAEA73100570127 /* RoomChatScreenContentCell.swift in Sources */, - 2311D6B12B9062A3001C70AB /* HomeVoiceFollowCell.swift in Sources */, 234E2E312B9B001A00433CF7 /* RoomChatScreenView.swift in Sources */, E8D15AA32B89B03D00369467 /* Deserialized.swift in Sources */, 234E2E222B9AB48900433CF7 /* NormalMicSeatSuperView.swift in Sources */, @@ -1366,19 +1520,21 @@ 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 */, 239EA64E2BAE949200570127 /* RoomChatScreenManager.swift in Sources */, E86A43DA2B877A840084C04D /* AppConfigObject.swift in Sources */, - 2311D6BC2B909A4F001C70AB /* HomeVoicePublishView.swift in Sources */, + 238F41982BBBF3DF008564B8 /* YinMineSettingCell.swift in Sources */, 23630BB52BAD2725003AD25D /* YinRoomRankView.swift in Sources */, - 2311D6AD2B9058AA001C70AB /* HomeVoiceModel.swift in Sources */, - 2311D6AB2B9024A9001C70AB /* HomeVoicePlayMusicItemView.swift in Sources */, + 238F41E92BBD5365008564B8 /* HomeSearchRecordTextCell.swift in Sources */, 239EA6442BAE898300570127 /* RectiveGiftModel.swift in Sources */, + 238F419E2BBBF981008564B8 /* YinMineSettingModel.swift in Sources */, + 238F41A22BBCF163008564B8 /* YinUserInfoMoreItemModel.swift in Sources */, E8D15AA62B89B0C600369467 /* List+.swift in Sources */, + 238F41B32BBD2E50008564B8 /* YinMineVisitorVC.swift in Sources */, + 238F41E82BBD5365008564B8 /* HomeVoiceChooseItemVeiw.swift in Sources */, + 238F41D82BBD5365008564B8 /* HomeSearchRecordVC.swift in Sources */, 234E2E042B986D8400433CF7 /* RoomQuitModel.swift in Sources */, + 238F41AB2BBCFE4F008564B8 /* YinMineFansVC.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 */, @@ -1389,20 +1545,26 @@ E8E4AAB52B8F8E3A0096D77C /* AuthItmeButton.swift in Sources */, 234E2E112B99B50400433CF7 /* RoomQuitViewModel.swift in Sources */, 239EA65A2BAEB48A00570127 /* RoomDynamicEffectView.swift in Sources */, + 238F41E12BBD5365008564B8 /* HomeVoiceGuideView.swift in Sources */, E86A43BC2B85FA640084C04D /* AuthForgetVC.swift in Sources */, E86A43C32B8628AF0084C04D /* BaseTabBarViewController.swift in Sources */, 234E2E022B986D7600433CF7 /* RoomQuitView.swift in Sources */, E8479E3B2B8DC5FA009AF878 /* ChatViewModel.swift in Sources */, E8479E412B8DC6BC009AF878 /* ChatBaseObject.swift in Sources */, + 238F41EB2BBD5365008564B8 /* HomeSearchRoomModel.swift in Sources */, 239EA64C2BAE90B700570127 /* ChatMsgRemoteModel.swift in Sources */, + 238F41DC2BBD5365008564B8 /* HomeVoiceFollowCell.swift in Sources */, + 238F41DE2BBD5365008564B8 /* HomeVoicePlayMusicItemView.swift in Sources */, + 238F41942BBBDCBE008564B8 /* YinUserInfoMoreCell.swift in Sources */, E86A43AA2B85DFA90084C04D /* BaseViewController.swift in Sources */, 23EE96E22B9EB22F00475D69 /* RoomSendTextView.swift in Sources */, 23630BCD2BAD908D003AD25D /* SendGiftSendView.swift in Sources */, + 238F41E62BBD5365008564B8 /* HomeSearchNavView.swift in Sources */, + 238F41B52BBD2F0B008564B8 /* YinMineVisitorCell.swift in Sources */, 23EE96F62BA061DE00475D69 /* RoomMsgListModel.swift in Sources */, E8E4AB1F2B901BFC0096D77C /* ChatGrowingTextView.swift in Sources */, E884E85F2B6900C500ADE6EE /* AppDelegate.swift in Sources */, 234E2E282B9ABA5B00433CF7 /* NormalMicSeatView.swift in Sources */, - 2311D6B72B908979001C70AB /* PlayVoiceManager.swift in Sources */, E8D15AEA2B8CD77800369467 /* H5Utils.swift in Sources */, E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */, 234E2E202B9AB44800433CF7 /* MicSeatSuperView.swift in Sources */, @@ -1417,14 +1579,20 @@ 23630BCB2BAD84B0003AD25D /* SendGiftModel.swift in Sources */, E8D15AE82B8CD47100369467 /* WebViewController.swift in Sources */, E89F194B2B919ECB0098E797 /* ChatImageCell.swift in Sources */, + 238F418D2BBAB08A008564B8 /* YinUserInfoHeadView.swift in Sources */, 234E2E2A2B9AC07B00433CF7 /* MicSeatGiftValueView.swift in Sources */, 239EA6642BAF03B400570127 /* YinGetPointGroup.m in Sources */, + 238F41EA2BBD5365008564B8 /* HomeVoicePublishView.swift in Sources */, + 238F41D72BBD5365008564B8 /* HomeVoiceVC.swift in Sources */, 23EE96EA2B9F01F900475D69 /* RoomChatData.swift in Sources */, E8D15AA12B89AF4F00369467 /* UserTokenObject.swift in Sources */, + 238F41AD2BBCFE78008564B8 /* YinMineFansCell.swift in Sources */, 234E2E0E2B99A24F00433CF7 /* RoomQuitItemModel.swift in Sources */, 233E515B2B8C849600582F9C /* PlanetStarClickItemView.swift in Sources */, + 238F41D92BBD5365008564B8 /* HomeSearchVC.swift in Sources */, E8FF28B42B90ADBE005D2BE7 /* AppKeys.swift in Sources */, - 2311D6A92B8F405F001C70AB /* HomeVoiceChooseTypeView.swift in Sources */, + 238F41DA2BBD5365008564B8 /* HomeSearchRoomVC.swift in Sources */, + 238F41DB2BBD5365008564B8 /* PlayVoiceManager.swift in Sources */, 239EA6462BAE8A6600570127 /* RectiveGiftUserModel.swift in Sources */, 234E2DF42B9847A700433CF7 /* RoomBackgroundView.swift in Sources */, E89F19B52B91E3A50098E797 /* PasswordSetView.swift in Sources */, @@ -1433,13 +1601,13 @@ 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 */, + 238F41E32BBD5365008564B8 /* HomeVoiceRecordBtnView.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 */, + 238F41E42BBD5365008564B8 /* HomeSearchRoomCell.swift in Sources */, E8E4AB212B901CD50096D77C /* ChatMoreMenuView.swift in Sources */, E86A43D32B8773C90084C04D /* APPUtils.swift in Sources */, 23EE96E62B9EE79A00475D69 /* RoomVCViewModel.swift in Sources */, @@ -1450,9 +1618,7 @@ 234E2DFD2B985A7300433CF7 /* UILabel+.swift in Sources */, E8D15AC52B8C90D400369467 /* AboutUsVC.swift in Sources */, 23EE96E82B9EE7F600475D69 /* RoomDataModel.swift in Sources */, - 2311D6B32B906EDA001C70AB /* HomeVoiceGuideView.swift in Sources */, - E8D15ABF2B8B885700369467 /* UserObject.swift in Sources */, - 2311D6B52B907053001C70AB /* HomeVoiceUserInfoView.swift in Sources */, + 238F41EC2BBD5365008564B8 /* HomeVoiceModel.swift in Sources */, 23630BC12BAD5537003AD25D /* YinRoomAgoraManager.swift in Sources */, E86A43BF2B8620C40084C04D /* Utils.swift in Sources */, E86A43BA2B85F1360084C04D /* AuthLoginVC.swift in Sources */, @@ -1464,33 +1630,35 @@ 234E2E252B9AB64700433CF7 /* NormalMicSeatCell.swift in Sources */, E8479E4D2B8DDBC5009AF878 /* ChatAttributeTool.swift in Sources */, E81A7BAF2B885B20009E736E /* MAIDESEncryptTool.m in Sources */, - 23630B9B2BABCEA5003AD25D /* HomeSearchNavView.swift in Sources */, + 238F41962BBBF34D008564B8 /* YinMineSettingVC.swift in Sources */, E8D15AA82B89B74700369467 /* YMRequestX.swift in Sources */, 23630BD32BADA9FF003AD25D /* SendGiftSendNumModel.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 */, E8E4AB282B902A9C0096D77C /* ChatListCell.swift in Sources */, + 238F418F2BBAC7BF008564B8 /* YinUserInfoHeadItemView.swift in Sources */, + 238F41B12BBD06CB008564B8 /* YinMineFansEmptyCell.swift in Sources */, 2311D6D52B91E732001C70AB /* UserPayViewManager.swift in Sources */, E86A43D52B8774B70084C04D /* AuthViewModel.swift in Sources */, 23EE96E02B9EB22100475D69 /* RoomMenuView.swift in Sources */, E89F19472B9197090098E797 /* ChatTimeCell.swift in Sources */, 2311D6CF2B91D35E001C70AB /* UserPayViewItemView.swift in Sources */, + 238F41AF2BBD03BF008564B8 /* YinMineFansModel.swift in Sources */, E8D15AB32B8B000400369467 /* PlanetStarVC.swift in Sources */, E8FF28B62B90ED6C005D2BE7 /* ChatNavView.swift in Sources */, 234E2E332B9B019B00433CF7 /* RoomChatScreenHeaderView.swift in Sources */, 23630BD12BADA900003AD25D /* SendGiftSendNumCell.swift in Sources */, E8D15A9D2B899E1500369467 /* YMNetworkHelper.swift in Sources */, + 238F41EE2BBD539E008564B8 /* YinHomeSearchLiveRoomModel.swift in Sources */, E8E4AB1B2B901AF50096D77C /* UIView+.swift in Sources */, 2311D69D2B8DC311001C70AB /* PlanetStarModel.swift in Sources */, + 238F41E52BBD5365008564B8 /* HomeVoiceSearchView.swift in Sources */, + 238F41A02BBCF066008564B8 /* YinUserInfoMoreItemCell.swift in Sources */, E89F19B32B91E2C00098E797 /* PasswordSetVC.swift in Sources */, 2311D6CB2B91BBF2001C70AB /* RecordVoiceManager.m in Sources */, - 23630B992BABCE52003AD25D /* HomeSearchVC.swift in Sources */, - 2311D6C42B917619001C70AB /* HomeVoiceRecordView.swift in Sources */, 23630BC72BAD7A94003AD25D /* SendGiftView.swift in Sources */, + 238F41E72BBD5365008564B8 /* HomeVoiceRecordView.swift in Sources */, 23EE97052BA2A67300475D69 /* SendGiftUserView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1645,7 +1813,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "yinmeng-ios/yinmeng-ios.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 48UCG35Q9W; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -1667,7 +1835,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.4; + MARKETING_VERSION = 1.0.5; PRODUCT_BUNDLE_IDENTIFIER = "linyudan.yinmeng-ios"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -1689,7 +1857,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "yinmeng-ios/yinmeng-ios.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 48UCG35Q9W; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -1711,7 +1879,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.4; + MARKETING_VERSION = 1.0.5; PRODUCT_BUNDLE_IDENTIFIER = "linyudan.yinmeng-ios"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/yinmeng-ios/AppDelegate.swift b/yinmeng-ios/AppDelegate.swift index badee82..b34ac0a 100644 --- a/yinmeng-ios/AppDelegate.swift +++ b/yinmeng-ios/AppDelegate.swift @@ -59,7 +59,7 @@ var window: UIWindow? if result.nick?.count ?? 0 <= 0 || result.avatar?.count ?? 0 <= 0 { let fillVC = AuthFillDataVC() fillVC.modalPresentationStyle = .fullScreen - YMRequestX.topViewController()?.navigationController?.present(fillVC, animated: true) + self.window?.rootViewController = fillVC } }).disposed(by: rx.disposeBag) } diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/Contents.json new file mode 100644 index 0000000..fd1f196 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image0@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/yin_paly_image0@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/yin_paly_image0@2x.png new file mode 100644 index 0000000..3ec2a3c Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/yin_paly_image0@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/Contents.json new file mode 100644 index 0000000..5c63abc --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/yin_paly_image1@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/yin_paly_image1@2x.png new file mode 100644 index 0000000..59379be Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/yin_paly_image1@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/Contents.json new file mode 100644 index 0000000..6793792 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/yin_paly_image2@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/yin_paly_image2@2x.png new file mode 100644 index 0000000..9f8d6ec Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/yin_paly_image2@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/Contents.json new file mode 100644 index 0000000..02dda7a --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/yin_paly_image3@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/yin_paly_image3@2x.png new file mode 100644 index 0000000..33ff32f Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/yin_paly_image3@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/Contents.json new file mode 100644 index 0000000..7dee19b --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/yin_paly_image4@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/yin_paly_image4@2x.png new file mode 100644 index 0000000..271d395 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/yin_paly_image4@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/Contents.json new file mode 100644 index 0000000..5c14328 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/yin_paly_image5@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/yin_paly_image5@2x.png new file mode 100644 index 0000000..175dec4 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/yin_paly_image5@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/Contents.json new file mode 100644 index 0000000..9c224a5 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image6@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/yin_paly_image6@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/yin_paly_image6@2x.png new file mode 100644 index 0000000..30a99f7 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/yin_paly_image6@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/Contents.json new file mode 100644 index 0000000..ada6740 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/yin_paly_image7@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/yin_paly_image7@2x.png new file mode 100644 index 0000000..9174a34 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/yin_paly_image7@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/Contents.json new file mode 100644 index 0000000..6f880bf --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/yin_paly_image8@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/yin_paly_image8@2x.png new file mode 100644 index 0000000..7b8b199 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/yin_paly_image8@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/Contents.json new file mode 100644 index 0000000..543f5c1 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_paly_image9@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/yin_paly_image9@2x.png b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/yin_paly_image9@2x.png new file mode 100644 index 0000000..5942137 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/yin_paly_image9@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/Contents.json new file mode 100644 index 0000000..1a5f239 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_user_id_copy@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_user_id_copy@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@2x.png b/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@2x.png new file mode 100644 index 0000000..051c8e2 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@3x.png b/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@3x.png new file mode 100644 index 0000000..55fd7c8 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/Contents.json new file mode 100644 index 0000000..4a85c54 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_avatar_reviewing@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_avatar_reviewing@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@2x.png new file mode 100644 index 0000000..f437ee3 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@3x.png new file mode 100644 index 0000000..f7b9d15 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/Contents.json new file mode 100644 index 0000000..d67d3f0 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_btn_my_grade@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_btn_my_grade@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@2x.png new file mode 100644 index 0000000..494e62d Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@3x.png new file mode 100644 index 0000000..f476d65 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/Contents.json new file mode 100644 index 0000000..da97f23 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_btn_my_room@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_btn_my_room@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@2x.png new file mode 100644 index 0000000..44791be Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@3x.png new file mode 100644 index 0000000..ec998ba Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/Contents.json new file mode 100644 index 0000000..8e784d1 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_btn_noble_privilege@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_btn_noble_privilege@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@2x.png new file mode 100644 index 0000000..08db2f7 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@3x.png new file mode 100644 index 0000000..eee57eb Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/Contents.json new file mode 100644 index 0000000..a350ea8 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_btn_wallet_recharge@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_btn_wallet_recharge@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@2x.png new file mode 100644 index 0000000..60fa327 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@3x.png new file mode 100644 index 0000000..1d59524 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/Contents.json new file mode 100644 index 0000000..223c044 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_head_setting_btn@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_head_setting_btn@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@2x.png new file mode 100644 index 0000000..8e81f02 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@3x.png new file mode 100644 index 0000000..7e682ee Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/Contents.json new file mode 100644 index 0000000..fa0ba3d --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_header_arrow@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_header_arrow@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@2x.png new file mode 100644 index 0000000..417c717 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@3x.png new file mode 100644 index 0000000..dde81c8 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/Contents.json new file mode 100644 index 0000000..c9af15d --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_mron_realname_auth@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_mron_realname_auth@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@2x.png new file mode 100644 index 0000000..03dfa57 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@3x.png new file mode 100644 index 0000000..f190374 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/Contents.json new file mode 100644 index 0000000..36babbe --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_mron_service@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_mron_service@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@2x.png new file mode 100644 index 0000000..36ebfbd Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@3x.png new file mode 100644 index 0000000..ec68ef7 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/Contents.json new file mode 100644 index 0000000..c341032 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_setting_arrow@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_setting_arrow@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@2x.png new file mode 100644 index 0000000..103fa7b Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@3x.png new file mode 100644 index 0000000..33a7009 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/Contents.json new file mode 100644 index 0000000..a61aed3 --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_user_head_copy@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_user_head_copy@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@2x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@2x.png new file mode 100644 index 0000000..051c8e2 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@3x.png b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@3x.png new file mode 100644 index 0000000..55fd7c8 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/Contents.json new file mode 100644 index 0000000..505954c --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_mine_visitor_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_mine_visitor_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@2x.png b/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@2x.png new file mode 100644 index 0000000..3891f03 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@3x.png b/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@3x.png new file mode 100644 index 0000000..69ae485 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/Contents.json new file mode 100644 index 0000000..96956dd --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_tableView_empty_icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_tableView_empty_icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@2x.png b/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@2x.png new file mode 100644 index 0000000..f2a4052 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@3x.png b/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@3x.png new file mode 100644 index 0000000..e624ea0 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/Contents.json new file mode 100644 index 0000000..b7b801f --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "about_records_arrow_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "about_records_arrow_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@2x.png b/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@2x.png new file mode 100644 index 0000000..aeb893e Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@3x.png b/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@3x.png new file mode 100644 index 0000000..3e5e551 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@3x.png differ diff --git a/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/Contents.json b/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/Contents.json new file mode 100644 index 0000000..364f71c --- /dev/null +++ b/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "yin_base_nav_back@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "yin_base_nav_back@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@2x.png b/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@2x.png new file mode 100644 index 0000000..586a822 Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@2x.png differ diff --git a/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@3x.png b/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@3x.png new file mode 100644 index 0000000..d84cc5f Binary files /dev/null and b/yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@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 11d0845..3ec7dc5 100644 --- a/yinmeng-ios/Base/Security/yinmeng-ios-Bridging-Header.h +++ b/yinmeng-ios/Base/Security/yinmeng-ios-Bridging-Header.h @@ -15,5 +15,7 @@ #import #import #import +#import #import "UIView+VAP.h" #import "YinGetPointGroup.h" +#import diff --git a/yinmeng-ios/Base/Utils/H5Utils.swift b/yinmeng-ios/Base/Utils/H5Utils.swift index d2e69c2..b0f830b 100644 --- a/yinmeng-ios/Base/Utils/H5Utils.swift +++ b/yinmeng-ios/Base/Utils/H5Utils.swift @@ -14,4 +14,5 @@ enum H5Utils:String { case pay = "mew/modules/rule/rechargeAgreement.html" case rank = "modules/roomRank/index.html" case autonym = "modules/identity/new.html" + case level = "modules/level/index.html" } diff --git a/yinmeng-ios/Extension/Date/Date+.swift b/yinmeng-ios/Extension/Date/Date+.swift index b517d9e..92298a5 100644 --- a/yinmeng-ios/Extension/Date/Date+.swift +++ b/yinmeng-ios/Extension/Date/Date+.swift @@ -34,7 +34,7 @@ extension Date { /// - timeStamp: 时间戳 /// - dateFormat: 自定义日期格式(如:yyyy-MM-dd HH:mm:ss) /// - Returns: 时间字符串 - static func getTimeString(timeStamp: Int, dateFormat: String) -> String { + static func getTimeString(timeStamp: Int64, dateFormat: String) -> String { let date = Date(timeIntervalSince1970: TimeInterval.init(timeStamp)) let dateformatter = DateFormatter() dateformatter.dateFormat = dateFormat diff --git a/yinmeng-ios/Extension/UIButton/UIButton+.swift b/yinmeng-ios/Extension/UIButton/UIButton+.swift index a7d4e3e..55396d1 100644 --- a/yinmeng-ios/Extension/UIButton/UIButton+.swift +++ b/yinmeng-ios/Extension/UIButton/UIButton+.swift @@ -35,7 +35,7 @@ extension UIButton { return bounds.contains(point) } - static func getCustomBtn(type:UIButton.ButtonType = .custom, text:String? = nil,selectedText:String? = nil,disabledText:String? = nil,font:UIFont? = nil,color:UIColor? = nil,selectedColor:UIColor? = nil,disabledColor:UIColor? = nil,image:UIImage? = nil,selectedImage:UIImage? = nil,bgImage:UIImage? = nil,selectedBgImage:UIImage? = nil,disabledBgImage:UIImage? = nil,masksToBounds:Bool = false,cornerRadius:CGFloat = 0,borderWidth:CGFloat = 0,borderColor:UIColor? = nil) -> UIButton{ + static func getCustomBtn(type:UIButton.ButtonType = .custom, text:String? = nil,selectedText:String? = nil,disabledText:String? = nil,font:UIFont? = nil,color:UIColor? = nil,bgColor:UIColor? = nil,selectedColor:UIColor? = nil,disabledColor:UIColor? = nil,image:UIImage? = nil,selectedImage:UIImage? = nil,bgImage:UIImage? = nil,selectedBgImage:UIImage? = nil,disabledBgImage:UIImage? = nil,masksToBounds:Bool = false,cornerRadius:CGFloat = 0,borderWidth:CGFloat = 0,borderColor:UIColor? = nil) -> UIButton{ let customBtn = UIButton(type: type) customBtn.layer.masksToBounds = masksToBounds customBtn.layer.cornerRadius = cornerRadius @@ -46,6 +46,9 @@ extension UIButton { if let _text = text{ customBtn.setTitle(_text, for: .normal) } + if let _bgColor = bgColor{ + customBtn.backgroundColor = _bgColor + } if let _selectedText = selectedText{ customBtn.setTitle(_selectedText, for: .selected) } diff --git a/yinmeng-ios/Extension/UIImage/UIImage+.swift b/yinmeng-ios/Extension/UIImage/UIImage+.swift index 56c40f5..6cc41f3 100644 --- a/yinmeng-ios/Extension/UIImage/UIImage+.swift +++ b/yinmeng-ios/Extension/UIImage/UIImage+.swift @@ -169,6 +169,14 @@ extension UIImage{ return image } + static func getWatermarkImage(image:UIImage,watermark:UIImage,watermarkRect:CGRect)->UIImage?{ + UIGraphicsBeginImageContextWithOptions(image.size, false, 0) + image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)) + watermark.draw(in: watermarkRect) + let getImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + return getImage + } } diff --git a/yinmeng-ios/Modules/Auth/VC/AuthFillDataVC.swift b/yinmeng-ios/Modules/Auth/VC/AuthFillDataVC.swift index c6f432e..7ea00d1 100644 --- a/yinmeng-ios/Modules/Auth/VC/AuthFillDataVC.swift +++ b/yinmeng-ios/Modules/Auth/VC/AuthFillDataVC.swift @@ -36,7 +36,7 @@ class AuthFillDataVC: BaseViewController, HiddenNavigationBarProtocol { make.left.equalTo(view).offset(16) make.top.equalTo(view).offset(StatusBarHeight + 12) } - + backBtn.isHidden = true titleLb.snp.makeConstraints { make in make.centerX.equalTo(view) make.centerY.equalTo(backBtn) @@ -188,7 +188,7 @@ class AuthFillDataVC: BaseViewController, HiddenNavigationBarProtocol { let params:[String: Any] = ["avatar":"https://image.ymlive.fun/default_avatar.png", "nick": nick, "gender":gender, "uid": AuthManager.userUid, "ticket":AuthManager.ticket] RequestPost(path: "user/v2/update", parma: params) { data in HUDTool.show(with: "更新成功") - self.dismiss(animated: true, completion: nil) + keyWindow.rootViewController = BaseTabBarViewController() } fail: { code, message in HUDTool.show(with: message) } diff --git a/yinmeng-ios/Modules/Home/HomeSearchRoomModel.swift b/yinmeng-ios/Modules/Home/Model/HomeSearchRoomModel.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeSearchRoomModel.swift rename to yinmeng-ios/Modules/Home/Model/HomeSearchRoomModel.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceModel.swift b/yinmeng-ios/Modules/Home/Model/HomeVoiceModel.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceModel.swift rename to yinmeng-ios/Modules/Home/Model/HomeVoiceModel.swift diff --git a/yinmeng-ios/Modules/Home/Model/YinHomeSearchLiveRoomModel.swift b/yinmeng-ios/Modules/Home/Model/YinHomeSearchLiveRoomModel.swift new file mode 100644 index 0000000..4865317 --- /dev/null +++ b/yinmeng-ios/Modules/Home/Model/YinHomeSearchLiveRoomModel.swift @@ -0,0 +1,16 @@ +// +// YinHomeSearchLiveRoomModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit +import HandyJSON +class YinHomeSearchLiveRoomModel: HandyJSON { + required init(){} + var nick = "" + var avatar = "" + var uid = 0 + var roomUid = 0 +} diff --git a/yinmeng-ios/Modules/Home/PlayVoiceManager.swift b/yinmeng-ios/Modules/Home/Tool/PlayVoiceManager.swift similarity index 100% rename from yinmeng-ios/Modules/Home/PlayVoiceManager.swift rename to yinmeng-ios/Modules/Home/Tool/PlayVoiceManager.swift diff --git a/yinmeng-ios/Modules/Home/VC/HomeSearchRecordVC.swift b/yinmeng-ios/Modules/Home/VC/HomeSearchRecordVC.swift new file mode 100644 index 0000000..b19dc63 --- /dev/null +++ b/yinmeng-ios/Modules/Home/VC/HomeSearchRecordVC.swift @@ -0,0 +1,62 @@ +// +// HomeSearchRecordVC.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit + +class HomeSearchRecordVC: BaseViewController,HiddenNavigationBarProtocol { + + override func viewDidLoad() { + super.viewDidLoad() + setUILayout() + requestData() + registerCell() + } + private func setUILayout(){ + + } + private func requestData(){ + + } + private func registerCell(){ + + } + //MARK: - 懒加载 + private lazy var stackView:UIStackView = { + let _stackView = UIStackView() + _stackView.axis = .vertical + _stackView.distribution = .fill + _stackView.alignment = .fill + _stackView.alignment = .center + _stackView.spacing = 0 + return _stackView + }() + private lazy var bgView:UIView = { + let _bgView = UIView() + _bgView.isHidden = true + return _bgView + }() + private lazy var textVeiw:UILabel = { + let _textVeiw = UILabel.getCustomLabel(text: "大家都在搜",font: UIFont.getScaleFont(ofSize: 14, weight: .bold),color: ThemeColor(hexStr: "#282828")) + + return _textVeiw + }() +// private lazy var <#view#>:<#view#> = { +// let _<#view#> = <#view#> +// +// return _<#view#> +// }() + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/yinmeng-ios/Modules/Home/HomeSearchRoomVC.swift b/yinmeng-ios/Modules/Home/VC/HomeSearchRoomVC.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeSearchRoomVC.swift rename to yinmeng-ios/Modules/Home/VC/HomeSearchRoomVC.swift diff --git a/yinmeng-ios/Modules/Home/HomeSearchVC.swift b/yinmeng-ios/Modules/Home/VC/HomeSearchVC.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeSearchVC.swift rename to yinmeng-ios/Modules/Home/VC/HomeSearchVC.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceVC.swift b/yinmeng-ios/Modules/Home/VC/HomeVoiceVC.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceVC.swift rename to yinmeng-ios/Modules/Home/VC/HomeVoiceVC.swift diff --git a/yinmeng-ios/Modules/Home/HomeSearchNavView.swift b/yinmeng-ios/Modules/Home/View/HomeSearchNavView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeSearchNavView.swift rename to yinmeng-ios/Modules/Home/View/HomeSearchNavView.swift diff --git a/yinmeng-ios/Modules/Home/View/HomeSearchRecordCell.swift b/yinmeng-ios/Modules/Home/View/HomeSearchRecordCell.swift new file mode 100644 index 0000000..051a9f8 --- /dev/null +++ b/yinmeng-ios/Modules/Home/View/HomeSearchRecordCell.swift @@ -0,0 +1,126 @@ +// +// HomeSearchRecordCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit +import Nuke + + +class HomeSearchRecordCell: UICollectionViewCell { + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + backgroundColor = .white + layer.cornerRadius = UIDevice.scaleWidth(width: 26)/2 + layer.masksToBounds = true + contentView.addSubview(avatarView) + contentView.addSubview(nameView) + contentView.addSubview(bgImageView) + bgImageView.addSubview(imageView) + bgImageView.addSubview(liveView) + + avatarView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 56)) + make.top.centerX.equalTo(contentView) + + } + bgImageView.snp.makeConstraints { make in + make.leading.trailing.bottom.equalTo(avatarView) + make.height.equalTo(UIDevice.scaleWidth(width: 14)) + } + imageView.snp.makeConstraints { make in + make.leading.equalTo(UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(bgImageView.snp.centerY).offset(-1) + make.width.equalTo(UIDevice.scaleWidth(width: 8)) + make.height.equalTo(UIDevice.scaleWidth(width: 7)) + } + + liveView.snp.makeConstraints { make in + make.leading.equalTo(bgImageView.snp.trailing).offset((UIDevice.scaleWidth(width: 2))) + make.centerY.equalTo(bgImageView) + } + nameView.snp.makeConstraints { make in + make.leading.trailing.equalTo(avatarView) + make.top.equalTo(avatarView.snp.bottom).offset(UIDevice.scaleWidth(width: 4)) + } + + } + //MARK: - 懒加载 + var liveModel:YinHomeSearchLiveRoomModel? = nil{ + didSet{ + guard let _liveModel = liveModel else { return } + Nuke.loadImage(with: _liveModel.avatar, into: avatarView, completion: nil) + nameView.text = _liveModel.nick + bgImageView.isHidden = _liveModel.roomUid <= 0 + imageView.isHidden = _liveModel.roomUid <= 0 + if _liveModel.roomUid > 0{ + imageView.animationImages = imageList + imageView.animationDuration = 0.5 + imageView.startAnimating() + }else{ + imageView.animationImages = [] + imageView.stopAnimating() + } + } + } + var roomModel:YinMineFansModel? = nil{ + didSet{ + guard let _roomModel = roomModel else { return} + Nuke.loadImage(with:_roomModel.avatar , into: avatarView, completion: nil) + nameView.text = _roomModel.title + bgImageView.isHidden = true + } + } + private lazy var avatarView:UIImageView = { + let _avatarView = UIImageView() + _avatarView.layer.masksToBounds = true + _avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 56)/2 + _avatarView.layer.borderColor = UIColor.white.cgColor + _avatarView.layer.borderWidth = 1 + return _avatarView + }() + private lazy var nameView:UILabel = { + let _nameView = UILabel.getCustomLabel(font: UIFont.getScaleFont(ofSize: 12, weight: .regular),color:ThemeColor(hexStr: "#282828"),textAlignment: .center) + + return _nameView + }() + private lazy var bgImageView:UIImageView = { + let _bgImageView = UIImageView() + let image = UIImage.gradient([ThemeColor(hexStr: "#FFA936"),ThemeColor(hexStr: "#FFCB47")],size: CGSize(width: UIDevice.scaleWidth(width: 52), height: UIDevice.scaleWidth(width: 14)), direction: .horizontal) + _bgImageView.image = image + + return _bgImageView + }() + private lazy var liveView:UILabel = { + let _liveView = UILabel.getCustomLabel(text: "直播",font: UIFont.getScaleFont(ofSize: 8, weight: .medium),color: .white) + return _liveView + }() + private lazy var imageView:UIImageView = { + let _imageView = UIImageView() + _imageView.isUserInteractionEnabled = true + _imageView.animationRepeatCount = 0 + + return _imageView + }() + private lazy var imageList:[UIImage] = { + var _imageList:[UIImage] = [] + for i in 0..<10{ + let name = "yin_paly_image\(i)" + if let image = UIImage(named: name){ + _imageList.append(image) + } + + } + return _imageList + }() +} diff --git a/yinmeng-ios/Modules/Home/View/HomeSearchRecordTextCell.swift b/yinmeng-ios/Modules/Home/View/HomeSearchRecordTextCell.swift new file mode 100644 index 0000000..2054e2f --- /dev/null +++ b/yinmeng-ios/Modules/Home/View/HomeSearchRecordTextCell.swift @@ -0,0 +1,40 @@ +// +// HomeSearchRecordTextCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit + +class HomeSearchRecordTextCell: UICollectionViewCell { + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + backgroundColor = .white + layer.cornerRadius = UIDevice.scaleWidth(width: 13) + layer.masksToBounds = true + contentView.addSubview(textView) + textView.snp.makeConstraints { make in + make.edges.equalTo(contentView) + } + } + //MARK: - 懒加载 + var text:String = ""{ + didSet{ + textView.text = text + } + } + private lazy var textView:UILabel = { + let _textView = UILabel.getCustomLabel(font: UIFont.getScaleFont(ofSize: 12, weight: .regular),color: ThemeColor(hexStr: "#282828")) + + return _textView + }() +} diff --git a/yinmeng-ios/Modules/Home/HomeSearchRoomCell.swift b/yinmeng-ios/Modules/Home/View/HomeSearchRoomCell.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeSearchRoomCell.swift rename to yinmeng-ios/Modules/Home/View/HomeSearchRoomCell.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceChooseItemVeiw.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceChooseItemVeiw.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceChooseItemVeiw.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceChooseItemVeiw.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceChooseTypeView.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceChooseTypeView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceChooseTypeView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceChooseTypeView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceFollowCell.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceFollowCell.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceFollowCell.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceFollowCell.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceFollowView.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceFollowView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceFollowView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceFollowView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceGuideView.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceGuideView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceGuideView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceGuideView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoicePlayMusicItemView.swift b/yinmeng-ios/Modules/Home/View/HomeVoicePlayMusicItemView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoicePlayMusicItemView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoicePlayMusicItemView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoicePublishView.swift b/yinmeng-ios/Modules/Home/View/HomeVoicePublishView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoicePublishView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoicePublishView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceRecordBtnView.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceRecordBtnView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceRecordBtnView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceRecordBtnView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceRecordView.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceRecordView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceRecordView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceRecordView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceSearchView.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceSearchView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceSearchView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceSearchView.swift diff --git a/yinmeng-ios/Modules/Home/HomeVoiceUserInfoView.swift b/yinmeng-ios/Modules/Home/View/HomeVoiceUserInfoView.swift similarity index 100% rename from yinmeng-ios/Modules/Home/HomeVoiceUserInfoView.swift rename to yinmeng-ios/Modules/Home/View/HomeVoiceUserInfoView.swift diff --git a/yinmeng-ios/Modules/Room/VC/RoomVC.swift b/yinmeng-ios/Modules/Room/VC/RoomVC.swift index fa9cc76..89015ac 100644 --- a/yinmeng-ios/Modules/Room/VC/RoomVC.swift +++ b/yinmeng-ios/Modules/Room/VC/RoomVC.swift @@ -139,6 +139,12 @@ class RoomVC: BaseViewController, HiddenNavigationBarProtocol { } } + public func exitRoom(){ + YinRoomAudioManager.share.exitRoom() + RoomVCViewModel.roomVM.isMute = true + NIMSDK.shared().chatroomManager.exitChatroom(self.roomInfo?.roomId ?? "") + self.dismiss(animated: true, completion: nil) + } private func addNIMSDKManager(){ NIMSDK.shared().chatManager.add(self) NIMSDK.shared().chatroomManager.add(self) diff --git a/yinmeng-ios/Modules/User/VM/UserObject.swift b/yinmeng-ios/Modules/User/Model/UserObject.swift similarity index 58% rename from yinmeng-ios/Modules/User/VM/UserObject.swift rename to yinmeng-ios/Modules/User/Model/UserObject.swift index 311a71e..0ca7d9a 100644 --- a/yinmeng-ios/Modules/User/VM/UserObject.swift +++ b/yinmeng-ios/Modules/User/Model/UserObject.swift @@ -29,29 +29,37 @@ struct UserObject: HandyJSON { var uid:Int? = 0 var erbanNo:Int? = 0 var avatar:String? = "" + var reviewingAvatar = "" + var isReview = false var nick:String? = "" var gender:UserSexType? = .Boy - var isBindPhone:Bool? = false - var isBindPasswd:Bool? = false - var phone:String? = "" + var isBindPhone:Bool = false + var isBindPasswd:Bool = false + var phone:String = "" var giftValue:Int64 = 0 var userLevelVo:userLevelModel? var userVoice = "" var voiceDura = "" var isCertified = false + var fansNum = "0" + var followNum = "0" + var visitNum = "0" + var inRoomNum = "0" + var headwearEffect = "" + var headwearPic = "" } struct userLevelModel:HandyJSON{ - var charmUrl = ""{ - didSet{ - charmNewUrl = MAIDESEncryptTool.getCharmImageUrl(charmUrl) + var charmUrl = "" + var experUrl = "" + var experNewUrl:String{ + get{ + return MAIDESEncryptTool.getWealthImageUrl(experUrl) } } - var experUrl = ""{ - didSet{ - experNewUrl = MAIDESEncryptTool.getWealthImageUrl(experUrl) + var charmNewUrl:String{ + get{ + return MAIDESEncryptTool.getCharmImageUrl(charmUrl) } } - var experNewUrl = "" - var charmNewUrl = "" } diff --git a/yinmeng-ios/Modules/User/Model/YinMineSettingModel.swift b/yinmeng-ios/Modules/User/Model/YinMineSettingModel.swift new file mode 100644 index 0000000..9839e4d --- /dev/null +++ b/yinmeng-ios/Modules/User/Model/YinMineSettingModel.swift @@ -0,0 +1,21 @@ +// +// YinMineSettingModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/2. +// + +import UIKit + +enum YinMineSettingModelType { +case phone,///手机号 + loginPassword,///登录密码 + aboutUs,///关于我们 + unsubscribe ///注销 +} + +class YinMineSettingModel: NSObject { + var text = "" + var subText = "" + var type:YinMineSettingModelType = .phone +} diff --git a/yinmeng-ios/Modules/User/Model/YinUserInfoMoreItemModel.swift b/yinmeng-ios/Modules/User/Model/YinUserInfoMoreItemModel.swift new file mode 100644 index 0000000..c18c2c6 --- /dev/null +++ b/yinmeng-ios/Modules/User/Model/YinUserInfoMoreItemModel.swift @@ -0,0 +1,21 @@ +// +// YinUserInfoMoreItemModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit +import HandyJSON + +enum YinUserInfoMoreItemModelType:Int { +case identity = 15,///实名 + service = 16///联系客服 +} + +class YinUserInfoMoreItemModel: HandyJSON { + required init(){} + var icon = "" + var title = "" + var itemType:YinUserInfoMoreItemModelType = .identity +} diff --git a/yinmeng-ios/Modules/User/VC/AboutUsVC.swift b/yinmeng-ios/Modules/User/VC/AboutUsVC.swift index 5452e0b..3cd79b8 100644 --- a/yinmeng-ios/Modules/User/VC/AboutUsVC.swift +++ b/yinmeng-ios/Modules/User/VC/AboutUsVC.swift @@ -8,121 +8,162 @@ import UIKit class AboutUsVC: BaseViewController { - + override func viewDidLoad() { super.viewDidLoad() - title = "关于我们" - view.addSubview(sepView) - view.addSubview(logoImgView) - view.addSubview(nickLb) - view.addSubview(versionLb) - view.addSubview(privacyView) - privacyView.addSubview(titleLb) - privacyView.addSubview(detailImgView) - - sepView.snp.makeConstraints { make in - make.left.right.top.equalTo(view).inset(0) - make.height.equalTo(10) - } - - logoImgView.snp.makeConstraints { make in - make.size.equalTo(CGSize(width: 88, height: 88)) - make.centerX.equalTo(view) - make.top.equalTo(view).offset(50) - } - - nickLb.snp.makeConstraints { make in -make.centerX.equalTo(view) - make.top.equalTo(logoImgView.snp.bottom).offset(10) - make.height.equalTo(36) - } - - versionLb.snp.makeConstraints { make in -make.centerX.equalTo(view) - make.top.equalTo(nickLb.snp.bottom).offset(4) - make.height.equalTo(22) - } - - privacyView.snp.makeConstraints { make in -make.left.right.equalTo(view).inset(0) - make.height.equalTo(62) - make.top.equalTo(versionLb.snp.bottom).offset(20) - } - - titleLb.snp.makeConstraints { make in -make.left.equalTo(privacyView).offset(24) - make.centerY.equalTo(privacyView) - } - - detailImgView.snp.makeConstraints { make in -make.size.equalTo(CGSize(width: 14, height: 14)) - make.centerY.equalTo(privacyView) - make.right.equalTo(privacyView).offset(-20) - } + title = "关于我们" + view.addSubview(sepView) + view.addSubview(logoImgView) + view.addSubview(nickLb) + view.addSubview(versionLb) + view.addSubview(privacyView) + view.addSubview(companyView) + view.addSubview(recordsNumView) + view.addSubview(skipBtn) + privacyView.addSubview(titleLb) + privacyView.addSubview(detailImgView) + + + sepView.snp.makeConstraints { make in + make.left.right.top.equalTo(view).inset(0) + make.height.equalTo(10) + } + + logoImgView.snp.makeConstraints { make in + make.size.equalTo(CGSize(width: 88, height: 88)) + make.centerX.equalTo(view) + make.top.equalTo(view).offset(50) + } + + nickLb.snp.makeConstraints { make in + make.centerX.equalTo(view) + make.top.equalTo(logoImgView.snp.bottom).offset(10) + make.height.equalTo(36) + } + + versionLb.snp.makeConstraints { make in + make.centerX.equalTo(view) + make.top.equalTo(nickLb.snp.bottom).offset(4) + make.height.equalTo(22) + } + + privacyView.snp.makeConstraints { make in + make.left.right.equalTo(view).inset(0) + make.height.equalTo(62) + make.top.equalTo(versionLb.snp.bottom).offset(20) + } + + titleLb.snp.makeConstraints { make in + make.left.equalTo(privacyView).offset(24) + make.centerY.equalTo(privacyView) + } + + detailImgView.snp.makeConstraints { make in + make.size.equalTo(CGSize(width: 14, height: 14)) + make.centerY.equalTo(privacyView) + make.right.equalTo(privacyView).offset(-20) + } + companyView.snp.makeConstraints { make in + make.bottom.equalTo(-UIDevice.scaleWidth(width: 50)) + make.centerX.equalTo(view) + } + recordsNumView.snp.makeConstraints { make in + make.bottom.equalTo(-UIDevice.scaleWidth(width: 70)) + make.centerX.equalTo(view) + } + skipBtn.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 12)) + make.centerY.equalTo(recordsNumView) + make.leading.equalTo(recordsNumView.snp.trailing).offset((UIDevice.scaleWidth(width: 2))) + } } - - @objc func privacyRecognizer() { - let web = WebViewController(url: "yinmeng/\(H5Utils.privacy.rawValue)") - self.navigationController?.pushViewController(web, animated: true) - } - - private lazy var sepView: UIView = { - let view = UIView() - view.backgroundColor = ThemeColor(hexStr: "#5E6175") - return view - }() - - private lazy var logoImgView: UIImageView = { - let imageView = UIImageView() - imageView.image = UIImage(named: "about_icon") - imageView.isUserInteractionEnabled = true - imageView.layer.masksToBounds = true - imageView.contentMode = .scaleAspectFill - return imageView - }() - - private lazy var nickLb: UILabel = { - let label = UILabel() - label.textColor = .white - label.font = UIFont.systemFont(ofSize: 24, weight: .bold) - label.text = "音萌" - return label - }() - - - private lazy var versionLb: UILabel = { - let label = UILabel() - label.textColor = UIColor(white: 1, alpha: 0.8) - label.font = UIFont.systemFont(ofSize: 16, weight: .medium) - label.text = "v\(APPUtils.appVersion)" - return label - }() - - private lazy var privacyView: UIView = { - let view = UIView() - view.backgroundColor = ThemeColor(hexStr: "#5E6175") - let tap = UITapGestureRecognizer(target: self, action: #selector(privacyRecognizer)) - view.addGestureRecognizer(tap) - return view - }() - - private lazy var titleLb: UILabel = { - let label = UILabel() - label.textColor = .white - label.text = "隐私政策协议" - label.font = UIFont.systemFont(ofSize: 16, weight: .medium) - return label - }() - - private lazy var detailImgView: UIImageView = { - let imageView = UIImageView() - imageView.image = UIImage(named: "user_function_more") - imageView.isUserInteractionEnabled = true - imageView.layer.masksToBounds = true - imageView.contentMode = .scaleAspectFill - return imageView - }() - - - + + @objc func privacyRecognizer() { + let web = WebViewController(url: "yinmeng/\(H5Utils.privacy.rawValue)") + self.navigationController?.pushViewController(web, animated: true) + } + @objc func skipRecordsAction(){ + let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight)) + self.view.addSubview(popUpView) + popUpView.textView.text = "确认前往查看备案信息" + popUpView.senderView.setTitle("确认", for: .normal) + popUpView.bgPointView.isHidden = true + popUpView.pointTextView.isHidden = true + popUpView.clickSendBlcok = {[weak self] in + let web = WebViewController(url: "https://beian.miit.gov.cn") + self?.navigationController?.pushViewController(web, animated: true) + } + } + private lazy var sepView: UIView = { + let view = UIView() + view.backgroundColor = ThemeColor(hexStr: "#5E6175") + return view + }() + + private lazy var logoImgView: UIImageView = { + let imageView = UIImageView() + imageView.image = UIImage(named: "about_icon") + imageView.isUserInteractionEnabled = true + imageView.layer.masksToBounds = true + imageView.contentMode = .scaleAspectFill + return imageView + }() + + private lazy var nickLb: UILabel = { + let label = UILabel() + label.textColor = .white + label.font = UIFont.systemFont(ofSize: 24, weight: .bold) + label.text = "音萌" + return label + }() + + + private lazy var versionLb: UILabel = { + let label = UILabel() + label.textColor = UIColor(white: 1, alpha: 0.8) + label.font = UIFont.systemFont(ofSize: 16, weight: .medium) + label.text = "v\(APPUtils.appVersion)" + return label + }() + + private lazy var privacyView: UIView = { + let view = UIView() + view.backgroundColor = ThemeColor(hexStr: "#5E6175") + let tap = UITapGestureRecognizer(target: self, action: #selector(privacyRecognizer)) + view.addGestureRecognizer(tap) + return view + }() + + private lazy var titleLb: UILabel = { + let label = UILabel() + label.textColor = .white + label.text = "隐私政策协议" + label.font = UIFont.systemFont(ofSize: 16, weight: .medium) + return label + }() + + private lazy var detailImgView: UIImageView = { + let imageView = UIImageView() + imageView.image = UIImage(named: "user_function_more") + imageView.isUserInteractionEnabled = true + imageView.layer.masksToBounds = true + imageView.contentMode = .scaleAspectFill + return imageView + }() + private lazy var recordsNumView:UILabel = { + let _recordsNumView = UILabel.getCustomLabel(text:"桂ICP备2022001089号-2A",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#A2A7B8")) + + return _recordsNumView + }() + private lazy var companyView:UILabel = { + let _companyView = UILabel.getCustomLabel(text: "南宁冰创网络科技有限公司 版权所有",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#A2A7B8")) + + return _companyView + }() + private lazy var skipBtn:UIButton = { + let _skipBtn = UIButton.getCustomBtn(image: UIImage(named: "about_records_arrow_bg")) + _skipBtn.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + _skipBtn.addTarget(self, action: #selector(skipRecordsAction), for: .touchUpInside) + return _skipBtn + }() } diff --git a/yinmeng-ios/Modules/User/VC/Friend/VC/YinMineFansVC.swift b/yinmeng-ios/Modules/User/VC/Friend/VC/YinMineFansVC.swift new file mode 100644 index 0000000..0c5d373 --- /dev/null +++ b/yinmeng-ios/Modules/User/VC/Friend/VC/YinMineFansVC.swift @@ -0,0 +1,291 @@ +// +// YinMineFansVC.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit +import MBProgressHUD +enum YinMineFansVCType { +case fans,friend,attention,footprint +} + +class YinMineFansVC: BaseViewController,HiddenNavigationBarProtocol { + + init(type: YinMineFansVCType) { + 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() + registerCell() + headerRequestData() + } + private func setUILayout(){ + view.backgroundColor = ThemeColor(hexStr: "#F8F8FB") + let bgView = UIView() + bgView.backgroundColor = .white + bgView.addSubview(backBtn) + bgView.addSubview(titleLb) + view.addSubview(bgView) + + + + + view.addSubview(tableView) + bgView.snp.makeConstraints { make in + make.top.leading.trailing.equalTo(view) + make.height.equalTo(NavHeight) + } + + tableView.snp.makeConstraints { make in + make.top.equalTo(bgView.snp.bottom).offset(UIDevice.scaleWidth(width: 0)) + make.leading.trailing.bottom.equalTo(view) + } + + backBtn.snp.makeConstraints { make in + + make.leading.equalTo(view).offset(16) + make.top.equalTo(view).offset(StatusBarHeight + 12) + } + + titleLb.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.centerY.equalTo(backBtn) + } + + let headerView = MJRefreshNormalHeader(refreshingTarget: self, refreshingAction: #selector(headerRequestData)) + headerView.stateLabel?.font = UIFont.getScaleFont(ofSize: 10, weight: .regular) + headerView.lastUpdatedTimeLabel?.font = UIFont.getScaleFont(ofSize: 10, weight: .regular) + headerView.stateLabel?.textColor = ThemeColor(hexStr: "#878B9C") + headerView.lastUpdatedTimeLabel?.textColor = ThemeColor(hexStr: "#878B9C") + tableView.mj_header = headerView + + let footerView = MJRefreshBackNormalFooter.init(refreshingTarget: self, refreshingAction: #selector(footerRequestData)) + footerView.stateLabel?.font = UIFont.getScaleFont(ofSize: 10, weight: .regular) + footerView.stateLabel?.textColor = ThemeColor(hexStr: "#878B9C") + tableView.mj_footer = footerView + + if type == .footprint{ + bgView.addSubview(clearBtn) + clearBtn.snp.makeConstraints { make in + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(backBtn) + } + } + } + @objc private func headerRequestData(){ + page = 1 + requestData() + } + @objc private func footerRequestData(){ + page = page + 1 + requestData() + } + private func requestData(){ + if type == .fans{ + titleLb.text = "我的粉丝" + let params = ["uid":"\(AuthManager.userUid)","pageNo":page,"pageSize":20] as [String : Any] + RequestGet(path: "fans/fanslist", parma: params) { data in + if let _data = data as? [String : Any],let fansData = _data["fansList"],let list = Deserialized.toArray(with: fansData) { + if self.page == 1{ + self.listData = list + }else{ + self.listData = self.listData + list + self.tableView.mj_footer?.endRefreshingWithNoMoreData() + } + + self.tableView.reloadData() + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + return + } + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } fail: { code, message in + HUDTool.show(with: message) + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } + + } else if type == .attention{ + titleLb.text = "我的关注" + let uid = "\(AuthManager.userUid)" + RequestGet(path: "fans/following", parma: ["uid":uid,"pageNo":page,"pageSize":"20"]) { data in + + if let list = Deserialized.toArray(with: data) { + if self.page == 1{ + self.listData = list + }else{ + self.listData = self.listData + list + self.tableView.mj_footer?.endRefreshingWithNoMoreData() + } + + self.tableView.reloadData() + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + return + } + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } fail: { code, data in + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } + }else if type == .footprint{ + titleLb.text = "足迹" + let uid = "\(AuthManager.userUid)" + RequestGet(path: "userroom/getInRoomRecord", parma: ["uid":uid,"pageNo":page,"pageSize":"20"]) { data in + + if let list = Deserialized.toArray(with: data) { + if self.page == 1{ + self.listData = list + }else{ + self.listData = self.listData + list + self.tableView.mj_footer?.endRefreshingWithNoMoreData() + } + + self.tableView.reloadData() + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + return + } + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } fail: { code, data in + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } + + } + + } + private func registerCell(){ + tableView.delegate = self + tableView.dataSource = self + } + @objc func backAction(){ + navigationController?.popViewController(animated: true) + } + @objc func clearBtnAction(){ + MBProgressHUD.showAdded(to: view, animated: true) + let uid = "\(AuthManager.userUid)" + RequestPost(path: "userroom/deleteInRoomRecord", parma: ["uid":uid]) { data in + HUDTool.show(with: "删除成功") + MBProgressHUD.hide(for: self.view, animated: true) + self.listData = [] + self.tableView.reloadData() + } fail: { code, data in + MBProgressHUD.hide(for: self.view, animated: true) + } + + } + //MARK: - 懒加载 + var listData:[YinMineFansModel] = [] + var page = 1 + private var type:YinMineFansVCType = .fans + private lazy var tableView:UITableView = { + let _tableView = UITableView(frame: .zero, style: .plain) + _tableView.tableFooterView = UIView() + _tableView.separatorStyle = .none + _tableView.backgroundColor = .clear + if #available(iOS 11.0, *){ + _tableView.contentInsetAdjustmentBehavior = .never + } + _tableView.register(YinMineFansCell.self, forCellReuseIdentifier: "YinMineFansCell") + _tableView.register(YinMineFansEmptyCell.self, forCellReuseIdentifier: "YinMineFansEmptyCell") + return _tableView + }() + private lazy var backBtn: UIButton = { + let button = UIButton(type: .custom) + button.setImage(UIImage(named: "yin_base_nav_back"), for: .normal) + button.setImage(UIImage(named: "yin_base_nav_back"), for: .selected) + button.addTarget(self, action: #selector(backAction), for: .touchUpInside) + button.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + return button + }() + + private lazy var titleLb: UILabel = { + let label = UILabel() + label.textColor = ThemeColor(hexStr: "#282828") + label.text = "我的粉丝" + label.font = UIFont.systemFont(ofSize: 18, weight: .medium) + return label + }() + + private lazy var clearBtn:UIButton = { + let _clearBtn = UIButton.getCustomBtn(text: "全部清除",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#BDBFD0")) + _clearBtn.addTarget(self, action: #selector(clearBtnAction), for: .touchUpInside) + return _clearBtn + }() + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} +extension YinMineFansVC:UITableViewDelegate,UITableViewDataSource,YinMineFansCellDelegate{ + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return listData.isEmpty ? 1 : listData.count + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return listData.isEmpty ? (ScreenHeight - NavHeight) : UIDevice.scaleWidth(width: 65) + } + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + if listData.isEmpty{ + let cell = tableView.dequeueReusableCell(withIdentifier: "YinMineFansEmptyCell", for: indexPath) as! YinMineFansEmptyCell + if type == .fans{ + cell.text = "您还没有任何粉丝" + }else if type == .attention{ + cell.text = "您还没有关注任何人" + } + + return cell + } + let cell = tableView.dequeueReusableCell(withIdentifier: "YinMineFansCell", for: indexPath) as! YinMineFansCell + cell.type = type + cell.fansModel = listData[indexPath.row] + cell.delegate = self + return cell + } + //MARK: - YinMineFansCellDelegate + func clickAttentionAction(uid: String) { + let params:[String: Any] = ["uid": AuthManager.userUid, "ticket": AuthManager.ticket, "type":"1", "likedUid": uid] + RequestPost(path: "fans/like", parma: params) { _ in + DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.5) { + HUDTool.show(with: "关注成功") + self.tableView.reloadData() + } + } fail: { code, msg in + HUDTool.show(with: msg) + } + } + func clickFindBtnAction(roomUid: String) { + for obj in navigationController?.viewControllers ?? []{ + if obj is RoomVC{ + if let roomVC = obj as? RoomVC{ + navigationController?.popToRootViewController(animated: false) + roomVC.exitRoom() + } + + } + } + + let vc = RoomVC(roomUid: roomUid) + let nav = BaseNavigationViewController.init(rootViewController: vc) + nav.modalPresentationStyle = .fullScreen + keyWindow.rootViewController?.present(nav, animated: true, completion: nil) + } +} diff --git a/yinmeng-ios/Modules/User/VC/Friend/VC/YinMineVisitorVC.swift b/yinmeng-ios/Modules/User/VC/Friend/VC/YinMineVisitorVC.swift new file mode 100644 index 0000000..8dc1950 --- /dev/null +++ b/yinmeng-ios/Modules/User/VC/Friend/VC/YinMineVisitorVC.swift @@ -0,0 +1,183 @@ +// +// YinMineVisitorVC.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit + +class YinMineVisitorVC: BaseViewController,HiddenNavigationBarProtocol { + + + + + + override func viewDidLoad() { + super.viewDidLoad() + setUILayout() + registerCell() + headerRequestData() + } + private func setUILayout(){ + view.backgroundColor = ThemeColor(hexStr: "#F8F8FB") + let bgView = UIView() + bgView.backgroundColor = .white + bgView.addSubview(backBtn) + bgView.addSubview(titleLb) + view.addSubview(bgView) + + + + + view.addSubview(tableView) + bgView.snp.makeConstraints { make in + make.top.leading.trailing.equalTo(view) + make.height.equalTo(NavHeight) + } + + tableView.snp.makeConstraints { make in + make.top.equalTo(bgView.snp.bottom).offset(UIDevice.scaleWidth(width: 0)) + make.leading.trailing.bottom.equalTo(view) + } + + backBtn.snp.makeConstraints { make in + + make.leading.equalTo(view).offset(16) + make.top.equalTo(view).offset(StatusBarHeight + 12) + } + + titleLb.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.centerY.equalTo(backBtn) + } + + let headerView = MJRefreshNormalHeader(refreshingTarget: self, refreshingAction: #selector(headerRequestData)) + headerView.stateLabel?.font = UIFont.getScaleFont(ofSize: 10, weight: .regular) + headerView.lastUpdatedTimeLabel?.font = UIFont.getScaleFont(ofSize: 10, weight: .regular) + headerView.stateLabel?.textColor = ThemeColor(hexStr: "#878B9C") + headerView.lastUpdatedTimeLabel?.textColor = ThemeColor(hexStr: "#878B9C") + tableView.mj_header = headerView + + let footerView = MJRefreshBackNormalFooter.init(refreshingTarget: self, refreshingAction: #selector(footerRequestData)) + footerView.stateLabel?.font = UIFont.getScaleFont(ofSize: 10, weight: .regular) + footerView.stateLabel?.textColor = ThemeColor(hexStr: "#878B9C") + tableView.mj_footer = footerView + + + } + @objc private func headerRequestData(){ + page = 1 + requestData() + } + @objc private func footerRequestData(){ + page = page + 1 + requestData() + } + private func requestData(){ + + let params = ["pageNum":page,"pageSize":20] as [String : Any] + RequestGet(path: "uservisitrecord/visitUserList", parma: params) { data in + if let list = Deserialized.toArray(with: data) { + if self.page == 1{ + self.listData = list + }else{ + self.listData = self.listData + list + self.tableView.mj_footer?.endRefreshingWithNoMoreData() + } + + self.tableView.reloadData() + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + return + } + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } fail: { code, message in + HUDTool.show(with: message) + self.tableView.mj_header?.endRefreshing() + self.tableView.mj_footer?.endRefreshing() + } + } + private func registerCell(){ + tableView.delegate = self + tableView.dataSource = self + } + @objc func backAction(){ + navigationController?.popViewController(animated: true) + } + + //MARK: - 懒加载 + var listData:[YinMineFansModel] = [] + var page = 1 + + private lazy var tableView:UITableView = { + let _tableView = UITableView(frame: .zero, style: .plain) + _tableView.separatorStyle = .none + _tableView.backgroundColor = .clear + if #available(iOS 11.0, *){ + _tableView.contentInsetAdjustmentBehavior = .never + } + _tableView.register(YinMineVisitorCell.self, forCellReuseIdentifier: "YinMineVisitorCell") + _tableView.register(YinMineFansEmptyCell.self, forCellReuseIdentifier: "YinMineFansEmptyCell") + return _tableView + }() + private lazy var backBtn: UIButton = { + let button = UIButton(type: .custom) + button.setImage(UIImage(named: "yin_base_nav_back"), for: .normal) + button.setImage(UIImage(named: "yin_base_nav_back"), for: .selected) + button.addTarget(self, action: #selector(backAction), for: .touchUpInside) + button.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + return button + }() + + private lazy var titleLb: UILabel = { + let label = UILabel() + label.textColor = ThemeColor(hexStr: "#282828") + label.text = "访客记录" + label.font = UIFont.systemFont(ofSize: 18, weight: .medium) + return label + }() + + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} +extension YinMineVisitorVC:UITableViewDelegate,UITableViewDataSource{ + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return listData.isEmpty ? 1 : listData.count + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return listData.isEmpty ? (ScreenHeight - NavHeight) :(indexPath.row == 0 ? UIDevice.scaleWidth(width: 80) : UIDevice.scaleWidth(width: 70)) + } + + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + if listData.isEmpty{ + let cell = tableView.dequeueReusableCell(withIdentifier: "YinMineFansEmptyCell", for: indexPath) as! YinMineFansEmptyCell + cell.text = "暂无访客记录" + return cell + } + let cell = tableView.dequeueReusableCell(withIdentifier: "YinMineVisitorCell", for: indexPath) as! YinMineVisitorCell + cell.isFirst = indexPath.row == 0 + cell.isLast = indexPath.row == listData.count - 1 + cell.model = listData[indexPath.row] + + return cell + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let model = listData[indexPath.row] + let session = NIMSession(model.uid, type: .P2P) + let chatVC = ChatVC(session: session) + navigationController?.pushViewController(chatVC, animated: true) + } +} diff --git a/yinmeng-ios/Modules/User/VC/Friend/View/YinMineFansCell.swift b/yinmeng-ios/Modules/User/VC/Friend/View/YinMineFansCell.swift new file mode 100644 index 0000000..fee2862 --- /dev/null +++ b/yinmeng-ios/Modules/User/VC/Friend/View/YinMineFansCell.swift @@ -0,0 +1,210 @@ +// +// YinMineFansCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit +import Nuke + +protocol YinMineFansCellDelegate{ + func clickAttentionAction(uid:String) + func clickFindBtnAction(roomUid:String) +} + + +class YinMineFansCell: 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(){ + backgroundColor = .clear + selectionStyle = .none + contentView.addSubview(avatarView) + contentView.addSubview(stackView) + contentView.addSubview(signView) + contentView.addSubview(attentionBtn) + contentView.addSubview(findBtn) + contentView.addSubview(timeView) + contentView.addSubview(lineView) + stackView.addArrangedSubview(nameView) + stackView.addArrangedSubview(genderView) + stackView.addArrangedSubview(experView) + stackView.addArrangedSubview(charmView) + avatarView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 55)) + make.centerY.equalTo(contentView) + make.leading.equalTo(UIDevice.scaleWidth(width: 15)) + } + stackView.snp.makeConstraints { make in + make.leading.equalTo(avatarView.snp.trailing).offset((UIDevice.scaleWidth(width: 10))) + make.bottom.equalTo(avatarView.snp.centerY).offset(UIDevice.scaleWidth(width: 2)) + make.trailing.lessThanOrEqualTo(attentionBtn.snp.leading).offset(-UIDevice.scaleWidth(width: 4)) + } + signView.snp.makeConstraints { make in + make.leading.equalTo(stackView) + make.top.equalTo(avatarView.snp.centerY).offset(2) + make.trailing.equalTo(attentionBtn.snp.leading).offset(-UIDevice.scaleWidth(width: 4)) + } + genderView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 18)) + } + charmView.snp.makeConstraints { make in + make.width.equalTo(UIDevice.scaleWidth(width: 36)) + make.height.equalTo(UIDevice.scaleWidth(width: 18)) + } + experView.snp.makeConstraints { make in + make.width.equalTo(UIDevice.scaleWidth(width: 36)) + make.height.equalTo(UIDevice.scaleWidth(width: 18)) + } + attentionBtn.snp.makeConstraints { make in + make.width.equalTo(UIDevice.scaleWidth(width: 65)) + make.height.equalTo(UIDevice.scaleWidth(width: 30)) + make.centerY.equalTo(contentView) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + } + findBtn.snp.makeConstraints { make in + make.width.equalTo(UIDevice.scaleWidth(width: 65)) + make.height.equalTo(UIDevice.scaleWidth(width: 30)) + make.centerY.equalTo(contentView) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + } + timeView.snp.makeConstraints { make in + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(nameView) + make.height.equalTo(UIDevice.scaleWidth(width: 14)) + } + lineView.snp.makeConstraints { make in + make.leading.equalTo(stackView) + make.bottom.equalTo(contentView) + make.height.equalTo(UIDevice.scaleWidth(width: 1)) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15 )) + } + } + @objc func attentionBtnAction(){ + if let _fansModel = self.fansModel{ + delegate?.clickAttentionAction(uid: _fansModel.uid) + } + + } + @objc func findBtnAction(){ + if let _userInRoom = self.fansModel?.userInRoom{ + delegate?.clickFindBtnAction(roomUid: _userInRoom.uid) + } + } + //MARK: - 懒加载 + var type:YinMineFansVCType = .fans + var delegate:YinMineFansCellDelegate? + var fansModel:YinMineFansModel? = nil{ + didSet{ + guard let _fansModel = fansModel else { return } + Nuke.loadImage(with: _fansModel.avatar, into: avatarView, completion: nil) + + experView.image = UIImage(named: _fansModel.userLevelVo?.experNewUrl ?? "") + charmView.image = UIImage(named: _fansModel.userLevelVo?.charmNewUrl ?? "") + genderView.image = _fansModel.gender == .Boy ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman") + let isFriend = NIMSDK.shared().userManager.isMyFriend(_fansModel.uid) + + attentionBtn.isHidden = true + findBtn.isHidden = true + if type == .fans{ + attentionBtn.isEnabled = !isFriend + attentionBtn.isHidden = false + nameView.text = _fansModel.nick + signView.text = _fansModel.userDesc.isEmpty ? "这个人很懒还没有签名" : _fansModel.userDesc + }else if type == .attention { + findBtn.isHidden = _fansModel.userInRoom == nil + nameView.text = _fansModel.nick + signView.text = _fansModel.userDesc.isEmpty ? "这个人很懒还没有签名" : _fansModel.userDesc + }else if type == .footprint{ + timeView.isHidden = false + avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 4) + nameView.font = UIFont.getScaleFont(ofSize: 14, weight: .regular) + nameView.text = _fansModel.title + signView.text = "ID:\(_fansModel.erbanNo)" + timeView.text = Date.getTimeString(timeStamp: _fansModel.updateTime/1000 , dateFormat: "yyyy-MM-dd") + } + + } + } + private lazy var avatarView:UIImageView = { + let _avatarView = UIImageView() + _avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 55)/2 + _avatarView.layer.masksToBounds = true + return _avatarView + }() + private lazy var stackView:UIStackView = { + let _stackView = UIStackView() + _stackView.axis = .horizontal + _stackView.distribution = .fill + _stackView.alignment = .center + _stackView.spacing = UIDevice.scaleWidth(width: 2) + + return _stackView + }() + private lazy var nameView:UILabel = { + let _nameView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 15, weight: .regular),color: ThemeColor(hexStr: "#282828")) + + return _nameView + }() + private lazy var genderView:UIImageView = { + let _genderView = UIImageView() + _genderView.isUserInteractionEnabled = true + return _genderView + }() + private lazy var experView:UIImageView = { + let _experView = UIImageView() + return _experView + }() + private lazy var charmView:UIImageView = { + let _charmView = UIImageView() + + return _charmView + }() + private lazy var signView:UILabel = { + let _signView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 12, weight: .regular),color: ThemeColor(hexStr: "#878B9C")) + return _signView + }() + private lazy var attentionBtn:UIButton = { + let bgImage = UIImage.image(color: ThemeColor(hexStr: "#FFE710")) + let disabledImage = UIImage.image(color: ThemeColor(hexStr: "#F2F3F6")) + let _attentionBtn = UIButton.getCustomBtn(text: "+关注",disabledText: "相互关注",font: UIFont.getScaleFont(ofSize: 12, weight: .regular),color: ThemeColor(hexStr: "#282828"),disabledColor: ThemeColor(hexStr: "#878B9C"),bgImage: bgImage,disabledBgImage: disabledImage,masksToBounds: true,cornerRadius: UIDevice.scaleWidth(width: 30)/2) + _attentionBtn.addTarget(self, action: #selector(attentionBtnAction), for: .touchUpInside) + _attentionBtn.isHidden = true + return _attentionBtn + }() + private lazy var lineView:UIView = { + let _lineView = UIView() + _lineView.backgroundColor = ThemeColor(hexStr: "#E8E8E8") + return _lineView + }() + private lazy var findBtn:UIButton = { + let _findBtn = UIButton.getCustomBtn(text: "找到Ta",font: UIFont.getScaleFont(ofSize: 12, weight: .regular),color: ThemeColor(hexStr: "#248CFE"),masksToBounds: true,cornerRadius: UIDevice.scaleWidth(width: 30)/2,borderWidth: 1,borderColor: ThemeColor(hexStr: "#248CFE")) + _findBtn.isHidden = true + _findBtn.addTarget(self, action: #selector(findBtnAction), for: .touchUpInside) + return _findBtn + }() + private lazy var timeView:UILabel = { + let _timeView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 10, weight: .semibold),color: ThemeColor(hexStr: "#BDBFD0")) + _timeView.isHidden = true + return _timeView + }() + 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/User/VC/Friend/View/YinMineFansEmptyCell.swift b/yinmeng-ios/Modules/User/VC/Friend/View/YinMineFansEmptyCell.swift new file mode 100644 index 0000000..237be3c --- /dev/null +++ b/yinmeng-ios/Modules/User/VC/Friend/View/YinMineFansEmptyCell.swift @@ -0,0 +1,66 @@ +// +// YinMineFansEmptyCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit + +class YinMineFansEmptyCell: 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(){ + backgroundColor = .clear + selectionStyle = .none + contentView.addSubview(iconView) + contentView.addSubview(textView) + + iconView.snp.makeConstraints { make in + make.centerX.equalTo(contentView) + make.bottom.equalTo(contentView.snp.centerY).offset(-UIDevice.scaleWidth(width: 15)) + make.width.height.equalTo(UIDevice.scaleWidth(width: 100)) + } + textView.snp.makeConstraints { make in + make.top.equalTo(iconView.snp.bottom).offset(UIDevice.scaleWidth(width: 20)) + make.leading.trailing.equalTo(contentView) + } + } + + //MARK: - 懒加载 + var text:String = ""{ + didSet{ + textView.text = text + } + } + private lazy var iconView:UIImageView = { + let _iconView = UIImageView() + _iconView.image = UIImage(named: "yin_tableView_empty_icon") + + return _iconView + }() + private lazy var textView:UILabel = { + let _textView = UILabel.getCustomLabel(text: "暂无数据",font: UIFont.getScaleFont(ofSize: 16, weight: .regular),color: ThemeColor(hexStr: "#878B9C"),textAlignment: .center,numberOfLines: 2) + + + return _textView + }() + 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/User/VC/Friend/View/YinMineVisitorCell.swift b/yinmeng-ios/Modules/User/VC/Friend/View/YinMineVisitorCell.swift new file mode 100644 index 0000000..0f750ef --- /dev/null +++ b/yinmeng-ios/Modules/User/VC/Friend/View/YinMineVisitorCell.swift @@ -0,0 +1,183 @@ +// +// YinMineVisitorCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit +import Nuke +class YinMineVisitorCell: 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(){ + backgroundColor = .clear + selectionStyle = .none + contentView.addSubview(bgView) + bgView.addSubview(avatarView) + bgView.addSubview(nameView) + bgView.addSubview(genderView) + bgView.addSubview(signView) + bgView.addSubview(chatBtn) + bgView.addSubview(timeView) + bgView.addSubview(lineView) + + bgView.snp.makeConstraints { make in + make.top.equalTo(UIDevice.scaleWidth(width: 0)) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.leading.equalTo(UIDevice.scaleWidth(width: 15)) + make.height.equalTo(UIDevice.scaleWidth(width: 70)) + make.bottom.equalTo(-UIDevice.scaleWidth(width: 0)) + } + avatarView.snp.makeConstraints { make in + make.leading.equalTo(UIDevice.scaleWidth(width: 15)) + make.width.height.equalTo(UIDevice.scaleWidth(width: 40)) + make.centerY.equalTo(bgView) + } + nameView.snp.makeConstraints { make in + make.leading.equalTo(avatarView.snp.trailing).offset((UIDevice.scaleWidth(width: 10))) + make.bottom.equalTo(avatarView.snp.centerY).offset(-4) + } + genderView.snp.makeConstraints { make in + make.centerY.equalTo(nameView) + make.width.height.equalTo(UIDevice.scaleWidth(width: 14)) + make.leading.equalTo(nameView.snp.trailing).offset(5) + make.trailing.lessThanOrEqualTo(chatBtn.snp.leading).offset(-UIDevice.scaleWidth(width: 5)) + } + + signView.snp.makeConstraints { make in + make.top.equalTo(avatarView.snp.centerY).offset(UIDevice.scaleWidth(width: 4)) + make.leading.equalTo(nameView) + } + + timeView.snp.makeConstraints { make in + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(signView) + make.height.equalTo(UIDevice.scaleWidth(width: 11)) + } + chatBtn.snp.makeConstraints { make in + make.bottom.equalTo(timeView.snp.top).offset(-UIDevice.scaleWidth(width: 1)) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.width.height.equalTo(UIDevice.scaleWidth(width: 22)) + } + lineView.snp.makeConstraints { make in + make.bottom.equalTo(-UIDevice.scaleWidth(width: 0)) + make.leading.equalTo(avatarView) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.height.equalTo(0.5) + } + + } + + override func draw(_ rect: CGRect) { + if isLast ,isFirst{ + let path = UIBezierPath.init(roundedRect: bgView.bounds, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: UIDevice.scaleWidth(width: 12), height: UIDevice.scaleWidth(width: 12))) + let layer = CAShapeLayer() + layer.path = path.cgPath + bgView.layer.mask = layer + }else if isFirst{ + let path = UIBezierPath.init(roundedRect: bgView.bounds, byRoundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: UIDevice.scaleWidth(width: 12), height: UIDevice.scaleWidth(width: 12))) + let layer = CAShapeLayer() + layer.path = path.cgPath + bgView.layer.mask = layer + }else if isLast{ + let path = UIBezierPath.init(roundedRect: bgView.bounds, byRoundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: UIDevice.scaleWidth(width: 12), height: UIDevice.scaleWidth(width: 12))) + let layer = CAShapeLayer() + layer.path = path.cgPath + bgView.layer.mask = layer + }else{ + let path = UIBezierPath.init(roundedRect: bgView.bounds, byRoundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: UIDevice.scaleWidth(width: 0), height: UIDevice.scaleWidth(width: 0))) + let layer = CAShapeLayer() + layer.path = path.cgPath + bgView.layer.mask = layer + } + + } + + //MARK: - 懒加载 + var model:YinMineFansModel? = nil{ + didSet{ + guard let _model = model else { return } + nameView.text = _model.nick + Nuke.loadImage(with: _model.avatar, into: avatarView, completion: nil) + signView.text = "ID:\(_model.erbanNo)" + timeView.text = _model.visitTimeDesc + genderView.image = _model.gender == .Boy ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman") + } + } + var isFirst = false { + didSet{ + + let top:CGFloat = isFirst ? 10 : 0 + bgView.snp.updateConstraints { make in + make.top.equalTo(UIDevice.scaleWidth(width: top)) + + } + } + } + var isLast = false { + didSet{ + lineView.isHidden = isLast + } + } + private lazy var avatarView:UIImageView = { + let _avatarView = UIImageView() + _avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 40)/2 + _avatarView.layer.masksToBounds = true + return _avatarView + }() + private lazy var bgView:UIView = { + let _bgView = UIView() + _bgView.backgroundColor = .white + + return _bgView + }() + private lazy var nameView:UILabel = { + let _nameView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 15, weight: .regular),color: ThemeColor(hexStr: "#282828")) + + return _nameView + }() + private lazy var genderView:UIImageView = { + let _genderView = UIImageView() + _genderView.isUserInteractionEnabled = true + return _genderView + }() + + private lazy var signView:UILabel = { + let _signView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 12, weight: .regular),color: ThemeColor(hexStr: "#878B9C")) + return _signView + }() + private lazy var chatBtn:UIButton = { + let _chatBtn = UIButton.getCustomBtn(image: UIImage(named: "yin_mine_visitor_icon")) + return _chatBtn + }() + private lazy var lineView:UIView = { + let _lineView = UIView() + _lineView.backgroundColor = ThemeColor(hexStr: "#E8E8E8") + return _lineView + }() + + private lazy var timeView:UILabel = { + let _timeView = UILabel.getCustomLabel(text: "yin_mine_visitor_icon",font: UIFont.getScaleFont(ofSize: 10, weight: .semibold),color: ThemeColor(hexStr: "#BDBFD0")) + return _timeView + }() + 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/User/VC/Friend/ViewModel/YinMineFansModel.swift b/yinmeng-ios/Modules/User/VC/Friend/ViewModel/YinMineFansModel.swift new file mode 100644 index 0000000..4c0376d --- /dev/null +++ b/yinmeng-ios/Modules/User/VC/Friend/ViewModel/YinMineFansModel.swift @@ -0,0 +1,33 @@ +// +// YinMineFansModel.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit +import HandyJSON + +class YinMineFansModel: HandyJSON { + required init(){} + var title = "" + var avatar = "" + var nick = "" + var uid = "" + var gender:UserSexType = .Boy + var defUser = "" + var erbanNo = "" + var userDesc = "" + var visitTimeDesc = "" + var valid = false + var userInRoomUid = "" + var userLevelVo:userLevelModel? + var userInRoom:YinMineFansRoomModel? + var updateTime:Int64 = 0 +} +class YinMineFansRoomModel: HandyJSON { + required init(){} + + var uid = "" + +} diff --git a/yinmeng-ios/Modules/User/VC/UserInfoVC.swift b/yinmeng-ios/Modules/User/VC/UserInfoVC.swift index 2fc82a4..6c06161 100644 --- a/yinmeng-ios/Modules/User/VC/UserInfoVC.swift +++ b/yinmeng-ios/Modules/User/VC/UserInfoVC.swift @@ -7,252 +7,222 @@ import UIKit -class UserInfoVC: BaseViewController, HiddenNavigationBarProtocol { - - var vm = UserViewModel.userVM - - var info:UserObject? - - override func viewDidLoad() { - super.viewDidLoad() - loadSubView() - - vm.selfInfo.subscribe(onNext: { [weak self] info in - self?.info = info - }).disposed(by: rx.disposeBag) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - vm.getUserInfo(uid: AuthManager.userUid) - } - - private func loadSubView() { - view.addSubview(backImgView) - view.addSubview(titleLb) - view.addSubview(rechargeView) - view.addSubview(myRoomView) - view.addSubview(mobileView) - view.addSubview(passwordView) - view.addSubview(aboutView) - view.addSubview(logOffView) - view.addSubview(logoutBtn) - view.addSubview(autonymView) - - backImgView.snp.makeConstraints { make in - make.edges.equalTo(view) - } - - titleLb.snp.makeConstraints { make in - make.centerX.equalTo(view) - make.top.equalTo(view).offset(StatusBarHeight + 10) - make.height.equalTo(25) - } - - rechargeView.snp.makeConstraints { make in - make.left.equalTo(view).inset(28) - make.height.equalTo(68) - make.right.equalTo(-28) - make.top.equalTo(view).offset(NavHeight + 20) - } - let width = (ScreenWidth - 56 - 11)/2 - myRoomView.snp.makeConstraints { make in - make.height.equalTo(rechargeView) - make.width.equalTo(width) - make.top.equalTo(rechargeView.snp.bottom).offset(12) - make.left.equalTo(view).inset(28) - } - autonymView.snp.makeConstraints { make in - make.height.width.equalTo(myRoomView) - make.top.equalTo(rechargeView.snp.bottom).offset(12) - make.right.equalTo(view).inset(28) - } - mobileView.snp.makeConstraints { make in - make.left.equalTo(view).offset(28) - make.height.equalTo(68) - make.top.equalTo(myRoomView.snp.bottom).offset(12) - make.right.equalTo(passwordView.snp.left).offset(-11) - } - - passwordView.snp.makeConstraints { make in - make.centerY.height.width.equalTo(mobileView) - make.right.equalTo(view).offset(-28) - } - - aboutView.snp.makeConstraints { make in - make.width.centerX.height.equalTo(mobileView) - make.top.equalTo(mobileView.snp.bottom).offset(12) - } - - logOffView.snp.makeConstraints { make in - make.width.centerX.height.equalTo(passwordView) - make.centerY.equalTo(aboutView) - } - - logoutBtn.snp.makeConstraints { make in - make.left.right.equalTo(view).inset(40) - make.height.equalTo(48) - make.top.equalTo(logOffView.snp.bottom).offset(48) - } - - - - } +class UserInfoVC: BaseViewController, HiddenNavigationBarProtocol{ - - @objc func logoutBtnAction() { - AuthViewModel.authVM.logout() - } - private lazy var backImgView: UIImageView = { - let imageView = UIImageView() - imageView.image = UIImage(named: "auth_login_bg") - imageView.isUserInteractionEnabled = true - imageView.layer.masksToBounds = true - imageView.contentMode = .scaleAspectFill - return imageView - }() - - private lazy var titleLb: UILabel = { - let label = UILabel() - label.textColor = .white - label.font = UIFont.systemFont(ofSize: 18, weight: .medium) - label.text = "我的" - return label - }() - - private lazy var rechargeView: UserFunctionView = { - let view = UserFunctionView() - view.delegate = self - let item = UserFunctionItem(title: "充值", isHiddenIcon: false ,itmeType: .recharge) - view.item = item - return view - }() - private lazy var myRoomView: UserFunctionView = { - let _myRoomView = UserFunctionView() - _myRoomView.delegate = self - let item = UserFunctionItem(title: "我的房间", isHiddenIcon: true ,itmeType: .myRoom) - _myRoomView.item = item - return _myRoomView - }() - private lazy var autonymView: UserFunctionView = { - let _autonymView = UserFunctionView() - _autonymView.delegate = self - let item = UserFunctionItem(title: "实名认证", isHiddenIcon: true ,itmeType: .autonym) - _autonymView.item = item - return _autonymView - }() - private lazy var mobileView: UserFunctionView = { - let view = UserFunctionView() - view.delegate = self - let item = UserFunctionItem(title: "手机号码", isHiddenIcon: true ,itmeType: .mobile) - view.item = item - return view - }() - - - private lazy var passwordView: UserFunctionView = { - let view = UserFunctionView() - view.delegate = self - let item = UserFunctionItem(title: "设置密码", isHiddenIcon: true ,itmeType: .password) - view.item = item - return view - }() - - private lazy var aboutView: UserFunctionView = { - let view = UserFunctionView() - view.delegate = self - let item = UserFunctionItem(title: "关于", isHiddenIcon: true ,itmeType: .about) - view.item = item - return view - }() - - private lazy var logOffView: UserFunctionView = { - let view = UserFunctionView() - view.delegate = self - let item = UserFunctionItem(title: "注销账号", isHiddenIcon: true ,itmeType: .logoff) - view.item = item - return view - }() - - - private lazy var logoutBtn: UIButton = { - let button = UIButton(type: .custom) - button.setBackgroundImage(UIImage.gradient([ThemeColor(hexStr: "#FF60FD"), ThemeColor(hexStr: "#8974FF"), ThemeColor(hexStr: "#69EBFF")], radius: 0), for: .normal) - button.setTitle("退出登录", for: .normal) - button.setTitleColor(UIColor.white, for: .normal) - button.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium) - button.layer.masksToBounds = true - button.layer.cornerRadius = 24 - button.addTarget(self, action: #selector(logoutBtnAction), for: .touchUpInside) - return button - }() - -} - - -extension UserInfoVC: UserFunctionViewProtocol{ - func didClickItem(type: UserFunctionType) { - switch type { - - case .recharge: - let vc = UserPayViewController() - self.navigationController?.pushViewController(vc, animated: true) - print("aaa") - case .myRoom: - let params = ["uid":"\(AuthManager.userUid)","intoUid":"\(AuthManager.userUid)"] - RequestGet(path: "room/get", parma: params) { data in - if let info = Deserialized.toModel(with: data) { - if info.isReselect{ - if let isCertified = self.info?.isCertified,isCertified == false{ - let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight)) - self.view.addSubview(popUpView) - popUpView.textView.text = "为了营造更安全的网络环境\n在 开通个人房间前\n需要先进行实名认证" - popUpView.senderView.setTitle("去认证", for: .normal) - popUpView.bgPointView.isHidden = true - popUpView.pointTextView.isHidden = true - popUpView.clickSendBlcok = {[weak self] in - let web = WebViewController(url: "mew/\(H5Utils.autonym.rawValue)") - self?.navigationController?.pushViewController(web, animated: true) + var vm = UserViewModel.userVM + + var info:UserObject? + + override func viewDidLoad() { + super.viewDidLoad() + loadSubView() + registerCell() + requestData() + NIMSDK.shared().systemNotificationManager.add(self) + + } + func requestData(){ + vm.selfInfo.subscribe(onNext: { [weak self] info in + guard let self = self else { return } + self.info = info + self.headView.userData = info + }).disposed(by: rx.disposeBag) + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + vm.getUserInfo(uid: AuthManager.userUid) + } + + private func loadSubView() { + view.backgroundColor = ThemeColor(hexStr: "#F8F8FB") + view.addSubview(tableView) + view.addSubview(setBtn) + tableView.snp.makeConstraints { make in + make.edges.equalTo(view) + } + setBtn.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 24)) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.top.equalTo(UIDevice.scaleWidth(width: StatusBarHeight + UIDevice.scaleWidth(width: 12))) + } + if #available(iOS 15.0, *) { + tableView.sectionHeaderTopPadding = 0 + } + if #available(iOS 11.0, *) { + tableView.contentInsetAdjustmentBehavior = .never + } + headView.clickBtnBlock = {[weak self] type in + guard let self = self else { return} + switch type { + case .grade: + let level = "\(APPUtils.appVersion)" as NSString + let getLevel = level.replacingOccurrences(of: ".", with: "") + let url = "mew/\(H5Utils.level.rawValue)" + "?appVersionCode=" + getLevel + let web = WebViewController(url: url) + self.navigationController?.pushViewController(web, animated: true) + + break + case .myRoom: + let params = ["uid":"\(AuthManager.userUid)","intoUid":"\(AuthManager.userUid)"] + RequestGet(path: "room/get", parma: params) { data in + if let info = Deserialized.toModel(with: data) { + if info.isReselect{ + if let isCertified = self.info?.isCertified,isCertified == false{ + let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight)) + self.view.addSubview(popUpView) + popUpView.textView.text = "为了营造更安全的网络环境\n在 开通个人房间前\n需要先进行实名认证" + popUpView.senderView.setTitle("去认证", for: .normal) + popUpView.bgPointView.isHidden = true + popUpView.pointTextView.isHidden = true + popUpView.clickSendBlcok = {[weak self] in + let web = WebViewController(url: "mew/\(H5Utils.autonym.rawValue)") + self?.navigationController?.pushViewController(web, animated: true) + } + return } - return } - } let vc = RoomVC(roomUid: "\(AuthManager.userUid)") vc.roomText = (self.info?.nick ?? "") + "的房间" let nav = BaseNavigationViewController.init(rootViewController: vc) nav.modalPresentationStyle = .fullScreen self.present(nav, animated: true, completion: nil) - + + } + } fail: { code, message in + HUDTool.show(with: message) } - } fail: { code, message in - HUDTool.show(with: message) + break + case .pay: + let vc = UserPayViewController() + self.navigationController?.pushViewController(vc, animated: true) + break + case .nobility: + HUDTool.show(with: "努力搭建中~") + break + case .fans: + let fansVc = YinMineFansVC(type: .fans) + self.navigationController?.pushViewController(fansVc, animated: true) + case .attention: + let fansVc = YinMineFansVC(type: .attention) + self.navigationController?.pushViewController(fansVc, animated: true) + case .visitor: + headView.visitorCount = 0 + let visitorVC = YinMineVisitorVC() + self.navigationController?.pushViewController(visitorVC, animated: true) + + default: + let fansVc = YinMineFansVC(type: .footprint) + self.navigationController?.pushViewController(fansVc, animated: true) + break } - case .mobile: - if self.info?.isBindPhone == true { - HUDTool.show(with: "您已绑定手机号") - } else { - self.navigationController?.pushViewController(BindMobileVC(), animated: true) - } - case .password: - if self.info?.isBindPhone == true { - let vc = PasswordSetVC() - vc.isSet = !(self.info?.isBindPasswd ?? false) - vc.phone = self.info?.phone - self.navigationController?.pushViewController(vc, animated: true) - } else { - self.navigationController?.pushViewController(BindMobileVC(), animated: true) - } - - case .logoff: - let web = WebViewController(url: "yinmeng/\(H5Utils.logoff.rawValue)") - self.navigationController?.pushViewController(web, animated: true) - case .about: - self.navigationController?.pushViewController(AboutUsVC(), animated: true) - case .autonym: - let web = WebViewController(url: "mew/\(H5Utils.autonym.rawValue)") - self.navigationController?.pushViewController(web, animated: true) + } + } + func registerCell(){ - } - } + tableView.delegate = self + tableView.dataSource = self + tableView.register(YinUserInfoMoreCell.self, forCellReuseIdentifier: "YinUserInfoMoreCell") + } + + + @objc func clickSetBtnAction(){ + let vc = YinMineSettingVC() + vc.info = self.info + navigationController?.pushViewController(vc, animated: true) + } + private lazy var tableView:UITableView = { + let _tableView = UITableView(frame: .zero, style: .grouped) + _tableView.showsLargeContentViewer = false + _tableView.separatorStyle = .none + _tableView.backgroundColor = .clear + + return _tableView + }() + + private lazy var headView:YinUserInfoHeadView = { + let _headView = YinUserInfoHeadView(frame: .zero) + return _headView + }() + + private lazy var setBtn:UIButton = { + let _setBtn = UIButton.getCustomBtn(image: UIImage(named: "yin_mine_head_setting_btn")) + _setBtn.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + _setBtn.addTarget(self, action: #selector(clickSetBtnAction), for: .touchUpInside) + return _setBtn + }() + var mornList:[YinUserInfoMoreItemModel] = { + let identity = YinUserInfoMoreItemModel() + identity.title = "实名认证" + identity.icon = "yin_mine_mron_realname_auth" + identity.itemType = .identity + + let service = YinUserInfoMoreItemModel() + service.title = "客服中心" + service.icon = "yin_mine_mron_service" + service.itemType = .service + + let _mornList = [identity,service] + + return _mornList + }() +} + + + + +extension UserInfoVC:UITableViewDelegate,UITableViewDataSource,NIMSystemNotificationManagerDelegate,YinUserInfoMoreCellDelegate { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 1 + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return UIDevice.scaleWidth(width: 48) * CGFloat(mornList.count) + UIDevice.scaleWidth(width: 50) + } + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "YinUserInfoMoreCell", for: indexPath) as! YinUserInfoMoreCell + cell.listData = mornList + cell.delegate = self + return cell + } + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + return self.headView + } + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return UIDevice.scaleWidth(width: 300) + } + //MARK: - NIMSystemNotificationManagerDelegate + func onReceive(_ notification: NIMCustomSystemNotification) { + if notification.receiverType == .P2P,let context = notification.content,let data = context.data(using: .utf8){ + do{ + if let dic = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)as? [String:Any]{ + if let first = dic["first"] as? Int,first == 78{ + if let model = Deserialized.toModel(with: context){ + if let count = model.data["visitNum"] as? Int{ + self.headView.visitorCount = count + } + } + } + } + + }catch{ + + } + + } + } + func didSelectRowAt(model: YinUserInfoMoreItemModel) { + switch model.itemType { + case .identity: + let web = WebViewController(url: "mew/\(H5Utils.autonym.rawValue)") + navigationController?.pushViewController(web, animated: true) + + default: + let session = NIMSession("200014", type: .P2P) + let chatVC = ChatVC(session: session) + navigationController?.pushViewController(chatVC, animated: true) + + break + } + + } } diff --git a/yinmeng-ios/Modules/User/VC/YinMineSettingVC.swift b/yinmeng-ios/Modules/User/VC/YinMineSettingVC.swift new file mode 100644 index 0000000..8970024 --- /dev/null +++ b/yinmeng-ios/Modules/User/VC/YinMineSettingVC.swift @@ -0,0 +1,166 @@ +// +// YinMineSettingVC.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/2. +// + +import UIKit + +class YinMineSettingVC: BaseViewController,HiddenNavigationBarProtocol { + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + vm.getUserInfo(uid: AuthManager.userUid) + } + override func viewDidLoad() { + super.viewDidLoad() + setUILayout() + requestData() + registerCell() + } + + @objc func backAction(){ + navigationController?.popViewController(animated: true) + } + + private func setUILayout(){ + + view.backgroundColor = ThemeColor(hexStr: "#F8F8FB") + + + let bgView = UIView() + bgView.backgroundColor = .white + bgView.addSubview(backBtn) + bgView.addSubview(titleLb) + view.addSubview(bgView) + view.addSubview(tableView) + + + + bgLogoutView.addSubview(logoutBtn) + + bgView.snp.makeConstraints { make in + make.top.leading.trailing.equalTo(view) + make.height.equalTo(NavHeight) + } + + tableView.snp.makeConstraints { make in + make.top.equalTo(bgView.snp.bottom).offset(UIDevice.scaleWidth(width: 0)) + make.leading.trailing.bottom.equalTo(view) + } + + backBtn.snp.makeConstraints { make in + + make.leading.equalTo(view).offset(16) + make.top.equalTo(view).offset(StatusBarHeight + 12) + } + + titleLb.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.centerY.equalTo(backBtn) + } + } + private func requestData(){ + + vm.selfInfo.subscribe(onNext: { [weak self] info in + guard let self = self else { return } + self.info = info + let list = UserViewModel.getSetingItemList(user: info) + self.listData = list + self.tableView.reloadData() + tableView.tableFooterView = bgLogoutView + }).disposed(by: rx.disposeBag) + } + private func registerCell(){ + tableView.delegate = self + tableView.dataSource = self + } + @objc func logoutBtnAction(){ + AuthViewModel.authVM.logout() + } + //MARK: - 懒加载 + var info:UserObject? + var vm = UserViewModel.userVM + var listData:[YinMineSettingModel] = [] + private lazy var tableView:UITableView = { + let _tableView = UITableView(frame: .zero, style: .plain) + _tableView.showsLargeContentViewer = false + _tableView.separatorStyle = .none + _tableView.backgroundColor = .clear + _tableView.register(YinMineSettingCell.self, forCellReuseIdentifier: "YinMineSettingCell") + return _tableView + }() + private lazy var bgLogoutView:UIView = { + let _bgLogoutView = UIView(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: UIDevice.scaleWidth(width: 168))) + + return _bgLogoutView + }() + private lazy var logoutBtn:UIButton = { + let _logoutBtn = UIButton.getCustomBtn(text: "退出当前账号",font: UIFont.getScaleFont(ofSize: 16, weight: .regular),color: ThemeColor(hexStr: "#282828"),bgColor: UIColor.white,masksToBounds: true,cornerRadius: UIDevice.scaleWidth(width: 50)/2) + _logoutBtn.frame = CGRect(x: UIDevice.scaleWidth(width: 32), y: UIDevice.scaleWidth(width: 40), width: ScreenWidth - UIDevice.scaleWidth(width: 64), height: 50) + _logoutBtn.addTarget(self, action: #selector(logoutBtnAction), for: .touchUpInside) + return _logoutBtn + }() + private lazy var backBtn: UIButton = { + let button = UIButton(type: .custom) + button.setImage(UIImage(named: "yin_base_nav_back"), for: .normal) + button.setImage(UIImage(named: "yin_base_nav_back"), for: .selected) + button.addTarget(self, action: #selector(backAction), for: .touchUpInside) + button.setBtnClickRadius = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) + return button + }() + + private lazy var titleLb: UILabel = { + let label = UILabel() + label.textColor = ThemeColor(hexStr: "#282828") + label.text = "设置" + label.font = UIFont.systemFont(ofSize: 18, weight: .medium) + return label + }() + +} +extension YinMineSettingVC:UITableViewDelegate,UITableViewDataSource{ + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return listData.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "YinMineSettingCell", for: indexPath) as! YinMineSettingCell + cell.model = listData[indexPath.row] + return cell + } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return UIDevice.scaleWidth(width: 45) + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let model = listData[indexPath.row] + switch model.type { + case .phone: + if self.info?.isBindPhone == true { + HUDTool.show(with: "您已绑定手机号") + } else { + self.navigationController?.pushViewController(BindMobileVC(), animated: true) + } + break + case .loginPassword: + if self.info?.isBindPhone == true { + let vc = PasswordSetVC() + vc.isSet = !(self.info?.isBindPasswd ?? false) + vc.phone = self.info?.phone + self.navigationController?.pushViewController(vc, animated: true) + } else { + self.navigationController?.pushViewController(BindMobileVC(), animated: true) + } + break + case .aboutUs: + self.navigationController?.pushViewController(AboutUsVC(), animated: true) + break + + default: + let web = WebViewController(url: "yinmeng/\(H5Utils.logoff.rawValue)") + self.navigationController?.pushViewController(web, animated: true) + break + } + } +} diff --git a/yinmeng-ios/Modules/User/VM/UserViewModel.swift b/yinmeng-ios/Modules/User/VM/UserViewModel.swift index 7277ac4..8306ee6 100644 --- a/yinmeng-ios/Modules/User/VM/UserViewModel.swift +++ b/yinmeng-ios/Modules/User/VM/UserViewModel.swift @@ -11,6 +11,7 @@ class UserViewModel: NSObject { static let userVM = UserViewModel.init() let selfInfo = PublishSubject() let userInfo = PublishSubject() + func getUserInfo(uid:Int) { let params = ["uid":uid] RequestGet(path: "user/get", parma: params) { data in @@ -25,4 +26,28 @@ class UserViewModel: NSObject { } } + static func getSetingItemList(user:UserObject)->[YinMineSettingModel]{ + let phoenItem = YinMineSettingModel() + phoenItem.text = "手机号码" + phoenItem.subText = user.isBindPhone ? user.phone : "设置" + phoenItem.type = .phone + + var loginPwdItem = YinMineSettingModel() + loginPwdItem.text = user.isBindPasswd ? "重置密码" : "设置密码"; + loginPwdItem.subText = "设置" + loginPwdItem.type = .loginPassword + + var aboutUsItem = YinMineSettingModel() + if let name = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String{ + aboutUsItem.text = "关于" + name + } + aboutUsItem.subText = "" + aboutUsItem.type = .aboutUs + + var unsubscribeItem = YinMineSettingModel() + unsubscribeItem.text = "注销帐号" + unsubscribeItem.subText = "" + unsubscribeItem.type = .unsubscribe + return [phoenItem,loginPwdItem,aboutUsItem,unsubscribeItem] + } } diff --git a/yinmeng-ios/Modules/User/View/Cell/YinMineSettingCell.swift b/yinmeng-ios/Modules/User/View/Cell/YinMineSettingCell.swift new file mode 100644 index 0000000..43dedd0 --- /dev/null +++ b/yinmeng-ios/Modules/User/View/Cell/YinMineSettingCell.swift @@ -0,0 +1,81 @@ +// +// YinMineSettingCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/2. +// + +import UIKit + +class YinMineSettingCell: 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(){ + contentView.backgroundColor = .white + backgroundColor = .clear + selectionStyle = .none + contentView.addSubview(textView) + contentView.addSubview(subTextVeiw) + contentView.addSubview(arrowView) + + textView.snp.makeConstraints { make in + make.leading.equalTo(UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(contentView) + } + arrowView.snp.makeConstraints { make in + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(contentView) + + } + subTextVeiw.snp.makeConstraints { make in + make.trailing.equalTo(arrowView.snp.leading).offset(-UIDevice.scaleWidth(width:5)) + make.centerY.equalTo(contentView) + } + + } + var model:YinMineSettingModel? = nil { + didSet{ + guard let _model = model else { return} + textView.text = _model.text + subTextVeiw.text = _model.subText + } + } + //MARK: - 懒加载 + + private lazy var textView:UILabel = { + let _textView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 16, weight: .regular),color: ThemeColor(hexStr: "#878B9C")) + + + return _textView + }() + private lazy var subTextVeiw:UILabel = { + let _subTextVeiw = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 12, weight: .regular),color: ThemeColor(hexStr: "#BDBFD0")) + + return _subTextVeiw + }() + private lazy var arrowView:UIImageView = { + let _arrowView = UIImageView() + _arrowView.image = UIImage(named: "yin_mine_setting_arrow") + + + return _arrowView + }() + 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/User/View/Cell/YinUserInfoMoreCell.swift b/yinmeng-ios/Modules/User/View/Cell/YinUserInfoMoreCell.swift new file mode 100644 index 0000000..d46be8a --- /dev/null +++ b/yinmeng-ios/Modules/User/View/Cell/YinUserInfoMoreCell.swift @@ -0,0 +1,110 @@ +// +// YinUserInfoMoreCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/2. +// + +import UIKit + + +protocol YinUserInfoMoreCellDelegate{ + func didSelectRowAt(model:YinUserInfoMoreItemModel) +} + + +class YinUserInfoMoreCell: 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(){ + backgroundColor = .clear + selectionStyle = .none + contentView.addSubview(bgView) + bgView.addSubview(textView) + bgView.addSubview(tableView) + bgView.snp.makeConstraints { make in + make.leading.trailing.equalTo(contentView).inset(UIDevice.scaleWidth(width: 15)) + make.top.bottom.equalTo(contentView).offset(UIDevice.scaleWidth(width: 10)) + } + textView.snp.makeConstraints { make in + make.top.equalTo(UIDevice.scaleWidth(width: 12)) + make.leading.equalTo(UIDevice.scaleWidth(width: 12)) + } + tableView.snp.makeConstraints { make in + make.top.equalTo(UIDevice.scaleWidth(width: 50)) + make.leading.trailing.equalTo(contentView).inset(UIDevice.scaleWidth(width: 15)) + make.height.equalTo(UIDevice.scaleWidth(width: 0)) + } + tableView.register(YinUserInfoMoreItemCell.self, forCellReuseIdentifier: "YinUserInfoMoreItemCell") + tableView.delegate = self + tableView.dataSource = self + } + + //MARK: - 懒加载 + var delegate:YinUserInfoMoreCellDelegate? + var listData:[YinUserInfoMoreItemModel] = []{ + didSet{ + tableView.reloadData() + let height = CGFloat(listData.count) * tableView.rowHeight + tableView.snp.updateConstraints { make in + make.height.equalTo(height) + } + } + } + private lazy var bgView:UIView = { + let _bgView = UIView() + _bgView.backgroundColor = .white + _bgView.layer.cornerRadius = UIDevice.scaleWidth(width: 8) + _bgView.layer.masksToBounds = true + return _bgView + }() + private lazy var tableView:UITableView = { + let _tableView = UITableView(frame: .zero, style: .plain) + _tableView.backgroundColor = .clear + _tableView.separatorStyle = .none + _tableView.rowHeight = UIDevice.scaleWidth(width: 48) + _tableView.isScrollEnabled = false + + return _tableView + }() + private lazy var textView:UILabel = { + let _textView = UILabel.getCustomLabel(text: "更多服务",font: UIFont.getScaleFont(ofSize: 15, weight: .medium),color: ThemeColor(hexStr: "#282828")) + + return _textView + }() + + 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 + } + +} +extension YinUserInfoMoreCell:UITableViewDelegate,UITableViewDataSource{ + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return listData.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "YinUserInfoMoreItemCell", for: indexPath) as! YinUserInfoMoreItemCell + cell.model = listData[indexPath.row] + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let model = listData[indexPath.row] + delegate?.didSelectRowAt(model: model) + } +} diff --git a/yinmeng-ios/Modules/User/View/Cell/YinUserInfoMoreItemCell.swift b/yinmeng-ios/Modules/User/View/Cell/YinUserInfoMoreItemCell.swift new file mode 100644 index 0000000..da55b03 --- /dev/null +++ b/yinmeng-ios/Modules/User/View/Cell/YinUserInfoMoreItemCell.swift @@ -0,0 +1,82 @@ +// +// YinUserInfoMoreItemCell.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/3. +// + +import UIKit + + + + +class YinUserInfoMoreItemCell: 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(){ + backgroundColor = .clear + selectionStyle = .none + contentView.addSubview(iconView) + contentView.addSubview(textView) + contentView.addSubview(arrowView) + iconView.snp.makeConstraints { make in + make.centerY.equalTo(contentView) + make.width.height.equalTo(UIDevice.scaleWidth(width: 32)) + make.leading.equalTo(UIDevice.scaleWidth(width: 7)) + } + textView.snp.makeConstraints { make in + make.centerY.equalTo(contentView) + make.leading.equalTo(iconView.snp.trailing).offset((UIDevice.scaleWidth(width: 0))) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 8)) + } + arrowView.snp.makeConstraints { make in + make.trailing.equalTo(-UIDevice.scaleWidth(width: 15)) + make.centerY.equalTo(contentView) + + } + } + + //MARK: - 懒加载 + var model:YinUserInfoMoreItemModel? = nil{ + didSet{ + guard let _model = model else { return} + iconView.image = UIImage(named: _model.icon) + textView.text = _model.title + } + + } + private lazy var iconView:UIImageView = { + let _imageView = UIImageView() + + return _imageView + }() + private lazy var textView:UILabel = { + let _textView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 14, weight: .regular),color: ThemeColor(hexStr: "#x282828")) + return _textView + }() + private lazy var arrowView:UIImageView = { + let _arrowView = UIImageView() + _arrowView.image = UIImage(named: "yin_mine_setting_arrow") + + + return _arrowView + }() + 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/User/View/YinUserInfoHeadItemView.swift b/yinmeng-ios/Modules/User/View/YinUserInfoHeadItemView.swift new file mode 100644 index 0000000..5684177 --- /dev/null +++ b/yinmeng-ios/Modules/User/View/YinUserInfoHeadItemView.swift @@ -0,0 +1,103 @@ +// +// YinUserInfoHeadItemView.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/1. +// + +import UIKit + +class YinUserInfoHeadItemView: 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(stackView) + addSubview(unReadView) + stackView.addArrangedSubview(countView) + stackView.addArrangedSubview(textView) + + stackView.snp.makeConstraints { make in + make.center.equalTo(self) + } + + } + func getAttributedString(space: CGFloat ,text:String)-> NSMutableAttributedString{ + let att = NSMutableAttributedString(string: text,attributes: [.foregroundColor:UIColor.white,.font:UIFont.getScaleFont(ofSize: 11, weight: .regular)]) + att.yy_alignment = .center + return att + } + //MARK: - 懒加载 + var text = ""{ + didSet{ + textView.text = text + } + } + var count = ""{ + didSet{ + countView.text = count + } + } + var isMine = false{ + didSet{ + if isMine { + addSubview(unReadView) + unReadView.snp.makeConstraints { make in + make.height.equalTo(UIDevice.scaleWidth(width: 12)) + make.width.equalTo(UIDevice.scaleWidth(width: 12)) + make.top.equalTo(textView.snp.top).offset(-UIDevice.scaleWidth(width: 8)) + make.leading.equalTo(textView.snp.trailing).offset(-(UIDevice.scaleWidth(width: 5))) + } + } + } + } + var visitorCount:Int = 0{ + didSet{ + unReadView.isHidden = visitorCount == 0 + let visitorCountText = "\(visitorCount)" + unReadView.attributedText = getAttributedString(space: UIDevice.scaleWidth(width: 10), text:visitorCountText ) + var width = UILabel.getLabelWidth(text: visitorCountText, heigth: UIDevice.scaleWidth(width: 12), font: UIFont.getScaleFont(ofSize: 8, weight: .regular)) + let getVisitorCount:CGFloat = CGFloat(visitorCount) + if getVisitorCount < UIDevice.scaleWidth(width: 10){ + width = 7 + } + unReadView.snp.remakeConstraints { make in + make.height.equalTo(UIDevice.scaleWidth(width: 12)) + make.width.equalTo(UIDevice.scaleWidth(width: width + 8)) + make.top.equalTo(textView.snp.top).offset(-UIDevice.scaleWidth(width: 8)) + make.leading.equalTo(textView.snp.trailing).offset(-(UIDevice.scaleWidth(width: 5))) + } + } + } + + private lazy var stackView:UIStackView = { + let _stackView = UIStackView() + _stackView.axis = .horizontal + _stackView.distribution = .fill + _stackView.alignment = .center + _stackView.spacing = UIDevice.scaleWidth(width: 5) + return _stackView + }() + private lazy var countView:UILabel = { + let _countView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 13, weight: .medium),color: ThemeColor(hexStr: "#282828")) + return _countView + }() + private lazy var textView:UILabel = { + let _textView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#BDBFD0"),textAlignment: .center) + + return _textView + }() + private lazy var unReadView:UILabel = { + let _unReadView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 8, weight: .regular),color: .white,textAlignment: .center,backgroundColor: ThemeColor(hexStr: "#FF5B55"),masksToBounds: true,cornerRadius: UIDevice.scaleWidth(width: 6)) + _unReadView.sizeToFit() + _unReadView.isHidden = true + return _unReadView + }() +} diff --git a/yinmeng-ios/Modules/User/View/YinUserInfoHeadView.swift b/yinmeng-ios/Modules/User/View/YinUserInfoHeadView.swift new file mode 100644 index 0000000..feee425 --- /dev/null +++ b/yinmeng-ios/Modules/User/View/YinUserInfoHeadView.swift @@ -0,0 +1,404 @@ +// +// YinUserInfoHeadView.swift +// yinmeng-ios +// +// Created by duoban on 2024/4/1. +// + +import UIKit +import Nuke + + +enum YinUserInfoHeadViewType { +case grade,myRoom,fans,attention,visitor,footprint,pay,nobility +} +typealias clickBtnBlock = (_ type:YinUserInfoHeadViewType)->Void +class YinUserInfoHeadView: UIView{ + + override init(frame: CGRect) { + super.init(frame: frame) + setUILayout() + addViewTarget() + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + private func setUILayout(){ + addSubview(backgroundImageView) + addSubview(avatarView) + addSubview(headwearView) + addSubview(nickContainer) + addSubview(tagContainer) + addSubview(experIconView) + addSubview(charmIconView) + addSubview(headItemStackView) + addSubview(bgBtnStackView) + addSubview(arrowView) + bgBtnStackView.addSubview(btnStackView) + + nickContainer.addArrangedSubview(nickView) + nickContainer.addArrangedSubview(genderView) + + tagContainer.addArrangedSubview(idView) + tagContainer.addArrangedSubview(copyView) + + headItemStackView.addArrangedSubview(attentionItemView) + headItemStackView.addArrangedSubview(fansItemView) + headItemStackView.addArrangedSubview(visitorItemView) + headItemStackView.addArrangedSubview(footprintItemView) + + btnStackView.addArrangedSubview(gradeView) + btnStackView.addArrangedSubview(myRoomView) + btnStackView.addArrangedSubview(walletView) + btnStackView.addArrangedSubview(nobleView) + + backgroundImageView.snp.makeConstraints { make in + make.leading.trailing.top.equalTo(0) + make.height.equalTo(UIDevice.scaleWidth(width: 125)) + } + avatarView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 68)) + make.leading.equalTo(UIDevice.scaleWidth(width: 25)) + make.top.equalTo(UIDevice.scaleWidth(width: 35)+StatusBarHeight) + } + headwearView.snp.makeConstraints { make in + make.center.equalTo(avatarView) + make.width.equalTo(avatarView.snp.width).multipliedBy(1.31) + make.height.equalTo(headwearView.snp.width) + } + nickContainer.snp.makeConstraints { make in + make.top.equalTo(avatarView.snp.top).offset(3) + make.leading.equalTo(avatarView.snp.trailing).offset((UIDevice.scaleWidth(width: 16))) + make.height.equalTo(UIDevice.scaleWidth(width: 21)) + } + tagContainer.snp.makeConstraints { make in + make.leading.equalTo(nickContainer) + make.top.equalTo(nickContainer.snp.bottom).offset(UIDevice.scaleWidth(width: 2)) + make.height.equalTo(UIDevice.scaleWidth(width: 20)) + } + copyView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 10)) + } + experIconView.snp.makeConstraints { make in + make.leading.equalTo(nickContainer) + make.top.equalTo(tagContainer.snp.bottom).offset(UIDevice.scaleWidth(width: 2)) + make.height.equalTo(UIDevice.scaleWidth(width: 18)) + make.width.equalTo(UIDevice.scaleWidth(width: 21)) + } + charmIconView.snp.makeConstraints { make in + make.top.equalTo(tagContainer.snp.bottom).offset(UIDevice.scaleWidth(width: 2)) + make.height.equalTo(UIDevice.scaleWidth(width: 18)) + make.width.equalTo(UIDevice.scaleWidth(width: 21)) + make.leading.equalTo(experIconView.snp.trailing).offset((UIDevice.scaleWidth(width: 5))) + } + arrowView.snp.makeConstraints { make in + make.width.height.equalTo(UIDevice.scaleWidth(width: 30)) + make.trailing.equalTo(-UIDevice.scaleWidth(width: 10)) + make.centerY.equalTo(avatarView) + } + headItemStackView.snp.makeConstraints { make in + make.top.equalTo(avatarView.snp.bottom).offset(UIDevice.scaleWidth(width: 16)) + make.height.equalTo(UIDevice.scaleWidth(width: 45)) + make.leading.trailing.equalTo(self).inset(UIDevice.scaleWidth(width: 15)) + } + let width = (ScreenWidth - UIDevice.scaleWidth(width: 30))/4.0 + let height = UIDevice.scaleWidth(width: 45) + attentionItemView.snp.makeConstraints { make in + make.size.equalTo(CGSize(width: width, height: height)) + } + + fansItemView.snp.makeConstraints { make in + make.size.equalTo(CGSize(width: width, height: height)) + } + + visitorItemView.snp.makeConstraints { make in + make.size.equalTo(CGSize(width: width, height: height)) + } + footprintItemView.snp.makeConstraints { make in + make.size.equalTo(CGSize(width: width, height: height)) + } + bgBtnStackView.snp.makeConstraints { make in + make.leading.trailing.equalTo(self).inset(UIDevice.scaleWidth(width: 15)) + make.top.equalTo(headItemStackView.snp.bottom).offset(UIDevice.scaleWidth(width: 2)) + make.height.equalTo(UIDevice.scaleWidth(width: 108)) + make.bottom.equalTo(-UIDevice.scaleWidth(width: 0)) + } + let space = (ScreenWidth - UIDevice.scaleWidth(width: 310)) / 5.0 + btnStackView.snp.makeConstraints { make in + make.leading.trailing.equalTo(bgBtnStackView).inset(space) + make.centerY.equalTo(bgBtnStackView) + make.height.equalTo(UIDevice.scaleWidth(width: 74)) + } + + + } + private func addViewTarget(){ + let copyTap = UITapGestureRecognizer(target: self, action: #selector(copyAction)) + tagContainer.addGestureRecognizer(copyTap) + let attentionTap = UITapGestureRecognizer(target: self, action: #selector(attentionAction)) + attentionItemView.addGestureRecognizer(attentionTap) + let fansTap = UITapGestureRecognizer(target: self, action: #selector(fansAction)) + fansItemView.addGestureRecognizer(fansTap) + + let visitorTap = UITapGestureRecognizer(target: self, action: #selector( visitorAction)) + visitorItemView.addGestureRecognizer(visitorTap) + let footprintTap = UITapGestureRecognizer(target: self, action: #selector(footprintAction)) + footprintItemView.addGestureRecognizer(footprintTap) + + } + @objc func visitorAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.visitor) + } + } + @objc func footprintAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.footprint) + } + } + @objc func fansAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.fans) + } + } + @objc func attentionAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.attention) + } + } + @objc func copyAction(){ + if let erbanNo = userData?.erbanNo{ + UIPasteboard.general.string = "\(erbanNo)" + HUDTool.show(with: "复制成功") + } + + } + @objc func clickGradeBtnAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.grade) + } + } + @objc func clickMyRoomBtnAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.myRoom) + } + } + @objc func clickPayBtnAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.pay) + } + } + @objc func clickNobilityBtnAction(){ + if let clickBtnBlock = self.clickBtnBlock{ + clickBtnBlock(.nobility) + } + } + var visitorCount = 0{ + didSet{ + visitorItemView.visitorCount = visitorCount + } + } + //MARK: - 懒加载 + var userData:UserObject? = nil{ + didSet{ + guard let _userData = userData else { return } + headwearView.isHidden = true + if let erbanNo = _userData.erbanNo{ + idView.text = "ID:\(erbanNo)" + } + if let nick = _userData.nick{ + nickView.text = nick.isEmpty ? "" : nick + } + + if _userData.isReview { + Nuke.loadImage(with: _userData.reviewingAvatar, into: avatarView) { result in + switch result { + case .success(let imageResponse): + let image = imageResponse.image + let waterImage = UIImage(named: "yin_mine_avatar_reviewing")! + let ratio = waterImage.size.height / waterImage.size.width + let y = image.size.height * (1 - ratio) + self.avatarView.image = UIImage.getWatermarkImage(image: image, watermark: waterImage, watermarkRect: CGRect(x: 0, y: y, width: image.size.width, height: image.size.height * ratio)) + break + + default: + break + } + } + }else{ + Nuke.loadImage(with: _userData.avatar, into: avatarView, completion: nil) + } + genderView.image = _userData.gender == .Boy ? UIImage(named: "yin_plane_star_man") : UIImage(named: "yin_plane_star__woman") + if let experImage = _userData.userLevelVo?.experNewUrl{ + experIconView.image = UIImage(named: experImage) + + let experWidth = (experIconView.image?.size.width ?? 0) * UIDevice.scaleWidth(width: 18) / (experIconView.image?.size.height ?? 1) + + experIconView.snp.updateConstraints { make in + make.width.equalTo(experWidth) + } + } + if let charmNewUrl = _userData.userLevelVo?.charmNewUrl{ + charmIconView.image = UIImage(named: charmNewUrl) + let charmWidth = (charmIconView.image?.size.width ?? 0) * UIDevice.scaleWidth(width: 18) / (charmIconView.image?.size.height ?? 1) + charmIconView.snp.updateConstraints { make in + make.width.equalTo(charmWidth) + } + } + fansItemView.count = _userData.fansNum + attentionItemView.count = _userData.followNum + visitorItemView.count = _userData.visitNum + footprintItemView.count = _userData.inRoomNum + } + } + + + var clickBtnBlock:clickBtnBlock? + private lazy var backgroundImageView:UIImageView = { + let _backgroundImageView = UIImageView() + let image = UIImage.gradient([ThemeColor(hexStr: "#DCF6FF"),ThemeColor(hexStr: "#F8F8FA"),ThemeColor(hexStr: "#F8F8FB")],size:CGSizeMake(ScreenWidth, UIDevice.scaleWidth(width: 125)),direction: .vertical) + _backgroundImageView.image = image + return _backgroundImageView + }() + private lazy var avatarView:UIImageView = { + let _avatarView = UIImageView() + _avatarView.layer.masksToBounds = true + _avatarView.layer.cornerRadius = UIDevice.scaleWidth(width: 68)/2 + _avatarView.layer.borderWidth = 1 + _avatarView.layer.borderColor = UIColor.white.cgColor + + return _avatarView + }() + private lazy var nickContainer:UIStackView = { + let _nickContainer = UIStackView() + _nickContainer.axis = .horizontal + _nickContainer.distribution = .fill + _nickContainer.alignment = .center + _nickContainer.spacing = UIDevice.scaleWidth(width: 4) + + return _nickContainer + }() + private lazy var nickView:UILabel = { + let _nickView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 16, weight: .medium),color: ThemeColor(hexStr: "#282828")) + + return _nickView + }() + private lazy var tagContainer:UIStackView = { + let _tagContainer = UIStackView() + _tagContainer.axis = .horizontal + _tagContainer.distribution = .fill + _tagContainer.alignment = .center + _tagContainer.spacing = UIDevice.scaleWidth(width: 5) + + return _tagContainer + }() + private lazy var idView:UILabel = { + let _idView = UILabel.getCustomLabel(text: "",font: UIFont.getScaleFont(ofSize: 13, weight: .regular),color: ThemeColor(hexStr: "#878B9C")) + + return _idView + }() + private lazy var genderView:UIImageView = { + let _genderView = UIImageView() + + + + return _genderView + }() + private lazy var experIconView:UIImageView = { + let _experView = UIImageView() + return _experView + }() + private lazy var charmIconView:UIImageView = { + let _charmView = UIImageView() + return _charmView + }() + private lazy var copyView:UIImageView = { + let _copyView = UIImageView() + _copyView.image = UIImage(named: "yin_mine_user_head_copy") + return _copyView + }() + private lazy var headwearView:YYAnimatedImageView = { + let _headwearView = YYAnimatedImageView() + _headwearView.contentMode = .scaleAspectFit + _headwearView.layer.masksToBounds = true + _headwearView.layer.cornerRadius = UIDevice.scaleWidth(width: 10) + return _headwearView + }() + private lazy var headItemStackView:UIStackView = { + let _headItemStackView = UIStackView() + _headItemStackView.axis = .horizontal + _headItemStackView.distribution = .fill + _headItemStackView.alignment = .fill + return _headItemStackView + }() + private lazy var attentionItemView:YinUserInfoHeadItemView = { + let _attentionItemView = YinUserInfoHeadItemView(frame: .zero) + _attentionItemView.text = "关注" + return _attentionItemView + }() + private lazy var fansItemView:YinUserInfoHeadItemView = { + let _fansItemView = YinUserInfoHeadItemView(frame: .zero) + _fansItemView.text = "粉丝" + return _fansItemView + }() + private lazy var visitorItemView:YinUserInfoHeadItemView = { + let _visitorItemView = YinUserInfoHeadItemView(frame: .zero) + _visitorItemView.text = "访客" + _visitorItemView.isMine = true + return _visitorItemView + }() + private lazy var footprintItemView:YinUserInfoHeadItemView = { + let _footprintItemView = YinUserInfoHeadItemView(frame: .zero) + _footprintItemView.text = "足迹" + return _footprintItemView + }() + private lazy var bgBtnStackView:UIView = { + let _bgBtnStackView = UIView() + _bgBtnStackView.backgroundColor = .white + _bgBtnStackView.layer.cornerRadius = UIDevice.scaleWidth(width: 10) + + return _bgBtnStackView + }() + private lazy var btnStackView:UIStackView = { + let _btnStackView = UIStackView() + _btnStackView.axis = .horizontal + _btnStackView.distribution = .equalSpacing + _btnStackView.alignment = .fill + let space = (ScreenWidth - UIDevice.scaleWidth(width: 310)) / 5.0 + _btnStackView.spacing = space + return _btnStackView + }() + private lazy var gradeView:UIButton = { + let _gradeView = UIButton.getCustomBtn(text: "我的等级",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#282828"),bgImage: UIImage(named: "yin_mine_btn_my_grade")) + _gradeView.addTarget(self, action: #selector(clickGradeBtnAction), for: .touchUpInside) + _gradeView.titleEdgeInsets = UIEdgeInsets(top: UIDevice.scaleWidth(width: 12), left: 0, bottom: 0, right: 0) + + return _gradeView + }() + private lazy var myRoomView:UIButton = { + let _myRoomView = UIButton.getCustomBtn(text: "我的房间",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#282828"),bgImage: UIImage(named: "yin_mine_btn_my_room")) + _myRoomView.titleEdgeInsets = UIEdgeInsets(top: UIDevice.scaleWidth(width: 12), left: 0, bottom: 0, right: 0) + _myRoomView.addTarget(self, action: #selector(clickMyRoomBtnAction), for: .touchUpInside) + return _myRoomView + }() + private lazy var walletView:UIButton = { + let _walletView = UIButton.getCustomBtn(text: "钱包充值",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#282828"),bgImage: UIImage(named: "yin_mine_btn_wallet_recharge")) + _walletView.titleEdgeInsets = UIEdgeInsets(top: UIDevice.scaleWidth(width: 12), left: 0, bottom: 0, right: 0) + _walletView.addTarget(self, action: #selector(clickPayBtnAction), for: .touchUpInside) + return _walletView + }() + private lazy var nobleView:UIButton = { + let _nobleView = UIButton.getCustomBtn(text: "特权贵族",font: UIFont.getScaleFont(ofSize: 12, weight: .medium),color: ThemeColor(hexStr: "#282828"),bgImage: UIImage(named: "yin_mine_btn_noble_privilege")) + _nobleView.titleEdgeInsets = UIEdgeInsets(top: UIDevice.scaleWidth(width: 12), left: 0, bottom: 0, right: 0) + _nobleView.addTarget(self, action: #selector(clickNobilityBtnAction), for: .touchUpInside) + return _nobleView + }() + private lazy var arrowView:UIButton = { + let _arrowView = UIButton.getCustomBtn(image: UIImage(named: "yin_mine_header_arrow")) + + return _arrowView + }() + +}