From 8649211aba17024db481e2ea03295c1a7770c182 Mon Sep 17 00:00:00 2001 From: liyuhua <15626451870@163.com> Date: Wed, 3 Apr 2024 20:06:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 3 + yinmeng-ios.xcodeproj/project.pbxproj | 336 +++++++++---- yinmeng-ios/AppDelegate.swift | 2 +- .../yin_paly_image0.imageset/Contents.json | 21 + .../yin_paly_image0@2x.png | Bin 0 -> 164 bytes .../yin_paly_image1.imageset/Contents.json | 21 + .../yin_paly_image1@2x.png | Bin 0 -> 162 bytes .../yin_paly_image2.imageset/Contents.json | 21 + .../yin_paly_image2@2x.png | Bin 0 -> 167 bytes .../yin_paly_image3.imageset/Contents.json | 21 + .../yin_paly_image3@2x.png | Bin 0 -> 157 bytes .../yin_paly_image4.imageset/Contents.json | 21 + .../yin_paly_image4@2x.png | Bin 0 -> 164 bytes .../yin_paly_image5.imageset/Contents.json | 21 + .../yin_paly_image5@2x.png | Bin 0 -> 162 bytes .../yin_paly_image6.imageset/Contents.json | 21 + .../yin_paly_image6@2x.png | Bin 0 -> 157 bytes .../yin_paly_image7.imageset/Contents.json | 21 + .../yin_paly_image7@2x.png | Bin 0 -> 160 bytes .../yin_paly_image8.imageset/Contents.json | 21 + .../yin_paly_image8@2x.png | Bin 0 -> 166 bytes .../yin_paly_image9.imageset/Contents.json | 21 + .../yin_paly_image9@2x.png | Bin 0 -> 156 bytes .../Assets.xcassets/Mine/Contents.json | 6 + .../mine_user_id_copy.imageset/Contents.json | 22 + .../mine_user_id_copy@2x.png | Bin 0 -> 330 bytes .../mine_user_id_copy@3x.png | Bin 0 -> 360 bytes .../Contents.json | 22 + .../yin_mine_avatar_reviewing@2x.png | Bin 0 -> 795 bytes .../yin_mine_avatar_reviewing@3x.png | Bin 0 -> 1519 bytes .../Contents.json | 22 + .../yin_mine_btn_my_grade@2x.png | Bin 0 -> 3131 bytes .../yin_mine_btn_my_grade@3x.png | Bin 0 -> 4597 bytes .../Contents.json | 22 + .../yin_mine_btn_my_room@2x.png | Bin 0 -> 2858 bytes .../yin_mine_btn_my_room@3x.png | Bin 0 -> 3760 bytes .../Contents.json | 22 + .../yin_mine_btn_noble_privilege@2x.png | Bin 0 -> 3058 bytes .../yin_mine_btn_noble_privilege@3x.png | Bin 0 -> 4538 bytes .../Contents.json | 22 + .../yin_mine_btn_wallet_recharge@2x.png | Bin 0 -> 2702 bytes .../yin_mine_btn_wallet_recharge@3x.png | Bin 0 -> 3674 bytes .../Contents.json | 22 + .../yin_mine_head_setting_btn@2x.png | Bin 0 -> 558 bytes .../yin_mine_head_setting_btn@3x.png | Bin 0 -> 751 bytes .../Contents.json | 22 + .../yin_mine_header_arrow@2x.png | Bin 0 -> 267 bytes .../yin_mine_header_arrow@3x.png | Bin 0 -> 344 bytes .../Contents.json | 22 + .../yin_mine_mron_realname_auth@2x.png | Bin 0 -> 871 bytes .../yin_mine_mron_realname_auth@3x.png | Bin 0 -> 1159 bytes .../Contents.json | 22 + .../yin_mine_mron_service@2x.png | Bin 0 -> 652 bytes .../yin_mine_mron_service@3x.png | Bin 0 -> 838 bytes .../Contents.json | 22 + .../yin_mine_setting_arrow@2x.png | Bin 0 -> 149 bytes .../yin_mine_setting_arrow@3x.png | Bin 0 -> 262 bytes .../Contents.json | 22 + .../yin_mine_user_head_copy@2x.png | Bin 0 -> 330 bytes .../yin_mine_user_head_copy@3x.png | Bin 0 -> 360 bytes .../Contents.json | 22 + .../yin_mine_visitor_icon@2x.png | Bin 0 -> 447 bytes .../yin_mine_visitor_icon@3x.png | Bin 0 -> 711 bytes .../Contents.json | 22 + .../yin_tableView_empty_icon@2x.png | Bin 0 -> 23105 bytes .../yin_tableView_empty_icon@3x.png | Bin 0 -> 47439 bytes .../Contents.json | 22 + .../about_records_arrow_bg@2x.png | Bin 0 -> 155 bytes .../about_records_arrow_bg@3x.png | Bin 0 -> 275 bytes .../yin_base_nav_back.imageset/Contents.json | 22 + .../yin_base_nav_back@2x.png | Bin 0 -> 363 bytes .../yin_base_nav_back@3x.png | Bin 0 -> 468 bytes .../Security/yinmeng-ios-Bridging-Header.h | 2 + yinmeng-ios/Base/Utils/H5Utils.swift | 1 + yinmeng-ios/Extension/Date/Date+.swift | 2 +- .../Extension/UIButton/UIButton+.swift | 5 +- yinmeng-ios/Extension/UIImage/UIImage+.swift | 8 + .../Modules/Auth/VC/AuthFillDataVC.swift | 4 +- .../{ => Model}/HomeSearchRoomModel.swift | 0 .../Home/{ => Model}/HomeVoiceModel.swift | 0 .../Model/YinHomeSearchLiveRoomModel.swift | 16 + .../Home/{ => Tool}/PlayVoiceManager.swift | 0 .../Modules/Home/VC/HomeSearchRecordVC.swift | 62 +++ .../Home/{ => VC}/HomeSearchRoomVC.swift | 0 .../Modules/Home/{ => VC}/HomeSearchVC.swift | 0 .../Modules/Home/{ => VC}/HomeVoiceVC.swift | 0 .../Home/{ => View}/HomeSearchNavView.swift | 0 .../Home/View/HomeSearchRecordCell.swift | 126 +++++ .../Home/View/HomeSearchRecordTextCell.swift | 40 ++ .../Home/{ => View}/HomeSearchRoomCell.swift | 0 .../{ => View}/HomeVoiceChooseItemVeiw.swift | 0 .../{ => View}/HomeVoiceChooseTypeView.swift | 0 .../Home/{ => View}/HomeVoiceFollowCell.swift | 0 .../Home/{ => View}/HomeVoiceFollowView.swift | 0 .../Home/{ => View}/HomeVoiceGuideView.swift | 0 .../HomeVoicePlayMusicItemView.swift | 0 .../{ => View}/HomeVoicePublishView.swift | 0 .../{ => View}/HomeVoiceRecordBtnView.swift | 0 .../Home/{ => View}/HomeVoiceRecordView.swift | 0 .../Home/{ => View}/HomeVoiceSearchView.swift | 0 .../{ => View}/HomeVoiceUserInfoView.swift | 0 yinmeng-ios/Modules/Room/VC/RoomVC.swift | 6 + .../User/{VM => Model}/UserObject.swift | 30 +- .../User/Model/YinMineSettingModel.swift | 21 + .../User/Model/YinUserInfoMoreItemModel.swift | 21 + yinmeng-ios/Modules/User/VC/AboutUsVC.swift | 269 ++++++----- .../User/VC/Friend/VC/YinMineFansVC.swift | 291 ++++++++++++ .../User/VC/Friend/VC/YinMineVisitorVC.swift | 183 ++++++++ .../User/VC/Friend/View/YinMineFansCell.swift | 210 +++++++++ .../VC/Friend/View/YinMineFansEmptyCell.swift | 66 +++ .../VC/Friend/View/YinMineVisitorCell.swift | 183 ++++++++ .../Friend/ViewModel/YinMineFansModel.swift | 33 ++ yinmeng-ios/Modules/User/VC/UserInfoVC.swift | 442 ++++++++---------- .../Modules/User/VC/YinMineSettingVC.swift | 166 +++++++ .../Modules/User/VM/UserViewModel.swift | 25 + .../User/View/Cell/YinMineSettingCell.swift | 81 ++++ .../User/View/Cell/YinUserInfoMoreCell.swift | 110 +++++ .../View/Cell/YinUserInfoMoreItemCell.swift | 82 ++++ .../User/View/YinUserInfoHeadItemView.swift | 103 ++++ .../User/View/YinUserInfoHeadView.swift | 404 ++++++++++++++++ 120 files changed, 3451 insertions(+), 450 deletions(-) create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image0.imageset/yin_paly_image0@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image1.imageset/yin_paly_image1@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image2.imageset/yin_paly_image2@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image3.imageset/yin_paly_image3@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image4.imageset/yin_paly_image4@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image5.imageset/yin_paly_image5@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image6.imageset/yin_paly_image6@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image7.imageset/yin_paly_image7@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image8.imageset/yin_paly_image8@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Home/yin_paly_image9.imageset/yin_paly_image9@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/mine_user_id_copy.imageset/mine_user_id_copy@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_avatar_reviewing.imageset/yin_mine_avatar_reviewing@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_grade.imageset/yin_mine_btn_my_grade@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_my_room.imageset/yin_mine_btn_my_room@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_noble_privilege.imageset/yin_mine_btn_noble_privilege@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_btn_wallet_recharge.imageset/yin_mine_btn_wallet_recharge@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_head_setting_btn.imageset/yin_mine_head_setting_btn@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_header_arrow.imageset/yin_mine_header_arrow@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_realname_auth.imageset/yin_mine_mron_realname_auth@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_mron_service.imageset/yin_mine_mron_service@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_setting_arrow.imageset/yin_mine_setting_arrow@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/Mine/yin_mine_user_head_copy.imageset/yin_mine_user_head_copy@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/auth/yin_mine_visitor_icon.imageset/yin_mine_visitor_icon@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/auth/yin_tableView_empty_icon.imageset/yin_tableView_empty_icon@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/public/about_records_arrow_bg.imageset/about_records_arrow_bg@3x.png create mode 100644 yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/Contents.json create mode 100644 yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@2x.png create mode 100644 yinmeng-ios/Assets.xcassets/public/yin_base_nav_back.imageset/yin_base_nav_back@3x.png rename yinmeng-ios/Modules/Home/{ => Model}/HomeSearchRoomModel.swift (100%) rename yinmeng-ios/Modules/Home/{ => Model}/HomeVoiceModel.swift (100%) create mode 100644 yinmeng-ios/Modules/Home/Model/YinHomeSearchLiveRoomModel.swift rename yinmeng-ios/Modules/Home/{ => Tool}/PlayVoiceManager.swift (100%) create mode 100644 yinmeng-ios/Modules/Home/VC/HomeSearchRecordVC.swift rename yinmeng-ios/Modules/Home/{ => VC}/HomeSearchRoomVC.swift (100%) rename yinmeng-ios/Modules/Home/{ => VC}/HomeSearchVC.swift (100%) rename yinmeng-ios/Modules/Home/{ => VC}/HomeVoiceVC.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeSearchNavView.swift (100%) create mode 100644 yinmeng-ios/Modules/Home/View/HomeSearchRecordCell.swift create mode 100644 yinmeng-ios/Modules/Home/View/HomeSearchRecordTextCell.swift rename yinmeng-ios/Modules/Home/{ => View}/HomeSearchRoomCell.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceChooseItemVeiw.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceChooseTypeView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceFollowCell.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceFollowView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceGuideView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoicePlayMusicItemView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoicePublishView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceRecordBtnView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceRecordView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceSearchView.swift (100%) rename yinmeng-ios/Modules/Home/{ => View}/HomeVoiceUserInfoView.swift (100%) rename yinmeng-ios/Modules/User/{VM => Model}/UserObject.swift (58%) create mode 100644 yinmeng-ios/Modules/User/Model/YinMineSettingModel.swift create mode 100644 yinmeng-ios/Modules/User/Model/YinUserInfoMoreItemModel.swift create mode 100644 yinmeng-ios/Modules/User/VC/Friend/VC/YinMineFansVC.swift create mode 100644 yinmeng-ios/Modules/User/VC/Friend/VC/YinMineVisitorVC.swift create mode 100644 yinmeng-ios/Modules/User/VC/Friend/View/YinMineFansCell.swift create mode 100644 yinmeng-ios/Modules/User/VC/Friend/View/YinMineFansEmptyCell.swift create mode 100644 yinmeng-ios/Modules/User/VC/Friend/View/YinMineVisitorCell.swift create mode 100644 yinmeng-ios/Modules/User/VC/Friend/ViewModel/YinMineFansModel.swift create mode 100644 yinmeng-ios/Modules/User/VC/YinMineSettingVC.swift create mode 100644 yinmeng-ios/Modules/User/View/Cell/YinMineSettingCell.swift create mode 100644 yinmeng-ios/Modules/User/View/Cell/YinUserInfoMoreCell.swift create mode 100644 yinmeng-ios/Modules/User/View/Cell/YinUserInfoMoreItemCell.swift create mode 100644 yinmeng-ios/Modules/User/View/YinUserInfoHeadItemView.swift create mode 100644 yinmeng-ios/Modules/User/View/YinUserInfoHeadView.swift 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 0000000000000000000000000000000000000000..3ec2a3cdf40006d22d9bd05b7b69e06c0f495c35 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!VDy@FgET4QW60^A+A9BKQ^FTH#Z(A$6gZT z7tHYVXY2jX71>vG4S_-?o-U3d9M_W>n1Y$vI0C{Oj81Vs;OSrzP*!DJ!EmIYgkh3` piiU#_^9tDxhg-h94jQVA46$283hl*Ro&fbTc)I$ztaD0e0sw@$IFbMW literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..59379be7ccc2f94692f0ec91d13e67e511bc8c36 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~e!VDy5o>bTbq$C1-LR^9Le{4XxZf-nKj=dzv zFPP!!&(`~&E3&WX8UlrkJY5_^IIbr%Fai3dcTd04XABN!Rn+62Y_33$r_bu)On`njxgN@xNAR9HBm literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9f8d6ec80fea14cd1b051fdb25815948b7afbef0 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!VDy@FgET4QW60^A+A9BKQ^FTH#Z(A$6gZT z7tHYVXY2jX71>vG4S_=Do-U3d9M_W@8m6#l9KOhSNFa9cToDr>mdKI;Vst0Jd#A1ONa4 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..33ff32f68d5369124b93513ba39117e57a95093d GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~e!VDy5o>bTbq$C1-LR^9Le{4XxZf-nKj=dzv zFPP!!&(`~&E3&WX8UlrMJzX3_IIbr*G)!U9IDC=ulz@nXfe&v3$B}?=1|@;Tdl))C i7zlL9$}YGSEX1G{$y>eGZQd)OMg~t;KbLh*2~7a0QaZ)} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..271d39598914a4d3fde1d3fb2a31418a81a85452 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!VDz+Cmdc6q$C1-LR^9Le{4XxZf-nKj=dzv zFPP!!&(`~&E3&WX8Ulq(JY5_^IIbrfm?khZO<`dxWfeGlv2o!Zh9d$Z4rvTi9VHx6 p1=s`>jT;_0uw3B_;dIjEWKcEZwS1YNA_LUV;OXk;vd$@?2>|chIc5L= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..175dec4cc42d7d0e1e88df4d4c50efe5f732bc46 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~e!VDy5o>bTbq$C1-LR^9Le{4XxZf-nKj=dzv zFPP!!&(`~&E3&WX8UlrkJY5_^IIbrfm?ktZl(K3p-os$6tjc(*prpZwg*8B88CyWx nE~W{LDvcZ~BsBP39NsddUgr7Ur+a7*P&b38tDnm{r-UW|g@`*m literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..30a99f73b41cefeb0d0aeafdcd3385f9c1eb9cb5 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!VDz+Cmdc6q$C1-LR^9Le{4XxZf-nKj=dzv zFPP!y)7JZ+D|TI&3NlC6)5S4_<9f1zX+i@-A*06PJq(i>gQiVlNNJd2X~`g|uw)5C iI>S-LAcv^}M;R_0=c#Nsc>gm{BZH@_pUXO@geCyq0X$;> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9174a346468eed13dfd25447ebc9b1b7fe1d0588 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~e!VDy5o>bTbq$C1-LR^9Le{4XxZf-nKj=dzv zFPPzH>!Z&Vx0T;0eg+B|c)B=-a9mFg2ux^TC}h-FyoX^jV+dO!!&FBJg_e^X+zm!O lybW57948oFu_`SPVd!S(n;e$DEfA=e!PC{xWt~$(696rUIsgCw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7b8b199d0353a9879734d9a3553059138a511da8 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!VDy@FgET4QW60^A+A9BKQ^FTH#Z(A$6gZT z7tHYUY3u#Z6}v7>1({>!>Eal|aXs0bTbq$C1-LR^9Le{4XxZf-nKj=dzv zFPP!!&(`~&E3&WX8UlrMJY5_^IIbrfm@+6T1cU<#4SfbhA2%y*#n0z?K^O3&;IlK4_w-R;NqTr7k2MEf8fxSeFrY@-hFo4 zw%hv;UIxk@J8|piiJNE6Jv?>x{_&Hym3Vd>0GcjY666=mu%*k~A=zemeO8Rmw-X!I zEuUJNW+21<{hqPwaVempHcuDF5Q)oMFL?4DR^V|6!&Gk1ACi{b;l~M@&6$ aFN4=9uJy;NS7-uV#Ng@b=d#Wzp$PyIVxXu1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..55fd7c82dc1f837fbcd2478dac9036e3bd1b4054 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX3?zBp#Z3TGApt%iu0VS4{tG8goZY+s{O-Ny z_v}A^;K1d*2QB~wAqXh4Yw!8J2QKd0e_;<$aNqge2QKbC2$J2k>okzu2b9`({>YK5 zK-q%_F9Ss$eSTI2G*`ML$S;`T7wd$AU9Pd8AK%Z{yMAS|w}o+s?4Ehna^bRXv;S5D zm96k}aSYKo|Mv1puEPo|%Rf3wO07Zuf#yZNerEOhp~QS@H6*C<7Q z>Xs*}D>bgyI`}^QE4^TLQ~89->L(d4C!1$)-s^1d_xeV9qL`1#gSUYz_g&xXaw=@` zvu9I0opfUznG~OXs}R*Larl4U{z>7b2_>_`8LaL->r7TCtFO58tvJ_WkA|+p{QVnR vKKnW{DyFUukWQO6VU?Q0>E!&=-+~_ZJz9V)v3qUY9hpf;(8IJvXgo=82ZS zU7kgaIzrLzGmdb#J&Jq3LM(fK%Bod6p0MU>`~5z-ggO7gL7v}NORr?E7ZTJKxw?;2 zG3fTH`r8XUrLsTmi3=)v8~ZkKn!Nn_fM;!MZ2gR5CWTzG$Ubt$Mq#(uZ~Fq~asjjV zN>6gx&zG+Dj#JW#(-Ziucjw60zn3-ljkh^x>am?jOrAj zMy>UGrkqy$E7xXm<8YEqw%)6dSK=KD49~L!UGn=nvy?sMxnE9Y0sHZ_itm)x9PQ%P zoo1sika?{lP;2vXucXu8IKDr;C0>{mknbJXow=}HXx`acl^pSR&k}mWbL!?sh?Y(B z?Ow}l({x!xcNcG~!O_&H^P$sxJ963Ojzs&11bw%7zVX`Yk5Z!RZ7b$nm?bj*yomIb z89(lG{%hNPQ18jP9_KT^&Gi1vo!eTT^!9;e%f$V6Ub!pU^z$E&idgfR(f?TSwbhj` zv))#GkUI3f)Ig8-+I_`6)A}#`?6Na&Tw7bV;b+gjIUoMj{AWI+cW>#uM~V5sWX9m> L>gTe~DWM4f7B7kC literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f7b9d15ffd3aeaca7b0fc408d8826a13d03af96c GIT binary patch literal 1519 zcmYjRdpHwn7@xMGp-5M9DwlI+Nm5R=PN9ZPYvq=(O37s@r<5)tHm22#$R%58*i>rm z#AwveNg_rq5w^BaWQYyrlJ6|%@|^d1zxVh1-plWK-hbZ9dkAg@2onSZ0x`g0F`gO} zXxz> zCOAX~y@TL+3pkzulDJ@M8ho7q@=qZ2Dri-JJ0cLD2Zl#M`U4P?3tmeBqX+~sfN~f# zb%6R-@VF6_)q|pHP+S9U2|+@E9zAE5W?{?Io&+z*)FQ;UJR|>BG>obIlxnXUl8Q=s zkwKP66}2(0D6yHx#kjx;EgS>_W8g5(-us@3v)iNd?I6@=Lk~)M9isKdPKGw-EpX}A zvF|HF@aDE?TnqH&7% z(`eya#6Zjn_zRkc-O3#kvhbXH!f~%R?2Y=y`2B{zS{B7Hqw5O+$b7!=c5*TRR%NYGj}B$k-9af#^X20L$-#gFGx%tLD$|u#@^Dl zB^*=cE0yj2Wk}dge&Dmi^!LC0Y^~rRn|a<)S>k!OhEz+BvQf$|AKpu| z*v0oV^^rABGWi>3Xk@$A#5gLgb8Vq~z)w7OuWZmGoFR@1&i8pF8R*5+gB?kU)lSGd zA%AQ@eNY-1`%>&^p4Zs-!R=;t#x+jbrn%cG3oc5&h;w4E_i!C-gKr}iCKWjL^JGM3 z@uXA82b=^pcYDJ7Z@7jr8Qz!VRzWyrUtp?I*9!L&v)rNT9@HxCP0GBgHf$J)v`+E9 z!ON)s%Z4C99VQ~fbx)D5JC>B_^c2TFX?b7peu2>4En;VSU2AgXP`!TmTiQZ*bWE(<2Q!>`y+!(6h(JN%B>4&WP(KTRs!Sdu@9Lys(h9$cB#e6FV87ymn>9VTs^ z=X6zuCKAu)(N}U7UQTo2Z#FzmN|9HW7fwlh7iw45zKI>i)A2jkar4Y^6>QbDG^4ai z^w2RBfAy30;#KJ zMb^-xQrGs1ll$QIzoE?P^Ax7Et;WvWEyhe=xJU8SA(_t>H%>Qo>9?PAe;Rg@_%N(f z*a_@Pv-Dbifx^^T-Ig+5gp9`e_J^QHWzV-sgSMTu?)4ZJvAtor9w945g)(vxYxE7lz z-1(xKPZn+C7JtYnxqI7Je;Q4F+=;bMST0lG?IT%hk literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..494e62d7d127f49a0ed08f06642a2b047b48e410 GIT binary patch literal 3131 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f476d650c7fc159de6ebf602a6c813794ba7f19a GIT binary patch literal 4597 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..44791be9512cbec1e3cd1b34135aca6768749296 GIT binary patch literal 2858 zcmW+&c{mjA6L;k%kt1{{`9{j>@Fl5l<;X2`$dQc|<;>F^ z7F)85m7x~e|pY|EnA0}&) z$=YDDXiRp_u=;<-rEOT*hBfBjqNog@0Zebe)H+0$vUtRfFZKRX)v-3$s|Z3!ZRYg9ffQX#1r8K3DSlkl?aJLum(V9 z!t4gT9EPz~=vssX5`3e=FABsFVS@!DtB^rrw+LPh0XyLE3Utmv$ta|gV1)rKWGEbk zb#|BN(6|8jS;!uT{1M0-f%rkFS%CU^_%IEh#~_yo*dcg2$YOJSCqv^Dl#N2}2xJVw z3c%+Xz)wNJ1k{d0`Z#0}p`sTiY0x$WZzdpb3{pw(=_kDX3abq0S%z*Z^iY66hB`8| z&%^r(csT||!;tU^V#?qLl{L5oKNjKF9JI_r`3#gz0)7-KMxkl|O1{Acz!(i$enZt1 z&%-s}216_Xp#PKN3kc>5dDMj>Mu>IWfe5MI^O-9N(68uTy2rzt3%pn4Ob zv}en!4w9>3fU=T028|?mH@t=$UccYPKzBe!{yMJ277-;*2^69=;*?=nl%}|%xUrb( zh1bJk+6Po(94}F7H%A#=)LIdKS#(~7>|Pe1sIv?06?M_`+@$}#p3voFS*+IpQhY+r zl(M$c8Z9a!u)oMWwcr1PJ>yq5AL6vFaEM@vG}Bh>ajnCltg~*v<~+$}wK4Vf;R4)V zS?5OP=Ch?916FBgbui6i7R(%PoNDvZ|5bcr@hRS2Z~MvJO85TnH9M|b zCRXs_dGNy0@fb{J_r9KYDATZs1&tudtBDB-Wkh=)pB1F5j;BwgXFlOsu`%N2TZNex zEOyc$Fz_D9L-%l=)Rn_t=$SVbUwkg@(Rs_ex3TVC21E!J|F#jEa-x}b%J^gv;Q;>{Mjrzo1zrL+x@-zR$@Zx$@k@v(v6b}7&_VRAWF&R zrCG*nv!}{u45rF?>y;#s z9e=hcN`2U+U#jxJTKvEeq0N_5@P>)f7m|`%&#m0}C&H#jjLqwJi`svi@Iv@$M{;5q zehCVl-_okr_1Bvs4L_(3(Xl&e~h*m zDJ<7Ib+jmSLQi+OhaB0I)Ya;dcKWCoqPMqj&S}u9n!7+tI7-8XssC@(KXo;x-GcX> zA_NAxe4iY;n6llFOq_E)6fBG_(4z2oSZSh%O_AQihZBR4%ON=kM}-|+&W%Y!6}t%h zIFx)<{>S&mztp|woL;6N%MvV>+!ZKle+&9+wRctvAA0J80oA*)@ZP^AFs5)Eqm*^ z$+Mkb6x>ww9)IvJrC9MdE!a|VkcaVY*N_RhIaI7;cqnPd8LD6(x66(SoUdrj($k%F z^$*i_dq_>6ul7evJ$y|i1xZU%Ds^`h+vQB;QY7wiE_n1-q?YW` z#ee*h?(`A+9In$~k<9s`(UkY`Vxyn5HC}dWYZg@BE94-BrxQFF6Inptl z3=vwMty@Rxs%oxCPuTffVO^!!62-kKg^;d?s2^ZSYLCv?6^jN_@&jph&`H-!w* z5V2%gks7b&OA0~-j>hz;tF$fmm~&BNE%O)1gc;hG%M!sIGWNZ>x>B|KY*bNF7?mf0fLV}$@RVG{p*hS-uv;!%Jqy`Ou2>N&mMOOf}W7cR9W%e?iN8dc2mYG8Cq+p*!m6k7#-gz7oB zS|1K#?6BTx81{2G-+4zpj#D(%{LpcWnl`#cA5KMGb$_v})w4GQYbTjF0~1uBXYuv2 zv$G?3&SqM=zf9(J<{_D}H?meJ99aoFTIQdB4&RbQT#Uqs@UG7va~MKrmKE2Sa~ zBz2H>_WHQTVX>H3xoReIn@35?Diytxo(>2B(37^g&dr^N(d58c zJ{2``;}Ux)U5MPj?9M_j4-B?pv-C4d)Z^&K?7I79)Hu~dreb|iff^3qwc}RKOq%;< zwSQERN`89t@#TULLIFZ#uiJbNmJ+4xSXgz}bMcA%JulO%Q+@w_sixgAvbGsvuK*l| MdS<#M7aha?2fKP}qyPW_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ec998badc590696fe922fe1a618ac1e39bcdd9be GIT binary patch literal 3760 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..08db2f72049d0af0028ee30c7c776d9cf00d19e9 GIT binary patch literal 3058 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 Q^&b=urltq|sA3!SKQdiOg8%>k literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..60fa327092fb6dcf14a0d2c19f0f16378864e63d GIT binary patch literal 2702 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7e682ee8cd8e93d5573c63b28a0610d70fbd3a79 GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAjKdw@@fE0ET}22@p5)z#HCH8r)h zwUOn4B0zCu5jYztrKYBa%!RNaS|FwY*+2kS0~7=TAop&I^Dm%NbV`E!f*I!DSNQ&G zhA?k)1n2wBhiqiTPA|!Lb>qS$E%kMuAKkg^@8ht&r>eBT!(8w2YGH*h3=E8~JzX3_ zA`ZU|e_7OIAfRX3q9QTD*&$Hyqu%@fHL5C67Zx4pdu(y|pVD>rZ?~0q$2aqQ@^m_P zn`L22wVJ`4Uh{L_lGV}-XIy4K3!j-ad7c5=?{nFo&i2R|sGa`u$>Nm8*?^xb)6cx= zGJf1ON5!=3^wP#fUFUaC+#G$P+1qQ%*B3$ObjseYEUF3r*zI4xS$)ln^4jIHeYuL2 zhc=y+%HF2>d}8YMhMCDbqxt{*cD29oRIAQS^d|eMD_`!f{mdPDaGs6IOl|Ax&2Gh2 zr?h`CU*eoredx=@`pwsfiK{?QTo)!Mr-F7C!2 zZZW5K&%K0Z2{q~0e5hD_Y*tp`nu}k1cex8X)-eZ!toeK8?9n^kc14kQD-Q8)<8_$z zVSb?L#0PtncFb~dQ#zWV+sO0O$gAZ13(gkRb6uaOx*Yo3FoWxYm%?T{hd%8BCFhlr zoGRB}GHwz3wy8%uaoUEvyVwOpciot3qIztL^#o0~)vrEz$(UL*PuwB#@s*LjTGA&r zg#}p!n;t%Ew^p%ndEoeanhBGC&W8|g|9>BzzbNHb`E#;OT=2stwRwB?T?kq_|KFZ3 zmp}e-J*u(CrcM0K2eC!wOB?;r0ZG51V=lMI!2{g9l8sS SbRPvK7Y0vPKbLh*2~7Y%hBJZy literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..417c717de6c68992ba0490fac2c2020c9bcff60a GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp@KrF_=3?y|_o{0e|?*N|=S0KHcN}%wShb7QBiIO0{ zV21BXKR>2=%_*fuX??0*Zig2B_(&t;ucLK6U2Pk%B1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..dde81c8988b7081e2834525ade9e35f2c8f93151 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^B0#Lf!3-obN;vz0RCs_-h%1oZO#@J6Ip+q@Xql2A zzhH*@d>_8OwAYsxzj4}+^-{R{p+xhiJ2vFGFP+%z_{jS;P~8+y7sn8d^R1Vn`C1fs zSOWqa1ldyNd@uR``pUQU<|+H(5b@{uf^y3=i7ykr!qry+W3NXL8##HRls;K2xt{%(yxFX^GC7TL4 zJ1$+`S;uD>1oYIIEYX_wDC0x^Mz(8_YW{P#J{H)Q@J!=he;JcpneZCkXu~@|_c3_7 L`njxgN@xNAJeZ}P literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..03dfa57dc254458fcb404cccaa2c72d6ebea6290 GIT binary patch literal 871 zcmXX^4NQ|~5Uv6l)^@9)wEa35fr=7Jl!zJ{TmXwuLcT!D7!h@yh?{gcHoG)L1BeEY zOxI*m4cJbUqNACNX~3X^Z9xA3D{cZZK^+z-f3?WJ#b;mHE_d&nd+zSJJMEaI|8i3ccxgxCdPVEDXWXg3(G0 zm*d4*JUfNINLYp2qP%{j<`SZikW$*A?xy+Sd)}Tme%Q&~L|}Kulic|ho9=gW2fQWjh3+KpCuz1T73eY(`(7T((~7rWs?I*j;>fq23{8JdD6{&CXRcm4Ad9&>(LNMc61Jryq@beO z6~37FNr`-ScSL0XLp|M9JSxck;DF~78_TjHI{>X@WvJM{zFDfhuGvSg^P1Um zzjRdY{Zn4AMisYnxwNtVMbF;#8R`vWfh@b#Gbl=3wz8QKMJ_g9@v(D6(wC>2nauYX zx#dHCv5XwSwRs!*oHvsA)n13cGAy6HU`6-I)`syD->|+Pkk<@XrQThc-o}#;qN05Jcv5sLPFDOcG|SjC literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f1903745729c8958db90f039ea257e7f685170ea GIT binary patch literal 1159 zcmYLIX;70_6pf}3#IOj+lCY(06%?VMMQpKZ0z|ezf^pdF$7uZ>e50Zz1#adB5d%W_|r(p2#u!j+yB^M++LFx%zA<%50-qpGn z29sd^2_S)tlNIn*2CxQGJXlk~I|aO7fwd)=YlPP|Ahd$Hr?5H;%j2*(01NFf^AKk4 z!&nhCo5RW^DDFak9P~y)Hx=5vVCfa8y5NlvWDMwyfUW@OBttt9Bs*Yn5GKlDreMAW23XL#2P7^a{}sAJp~VeaTtV#kcioUKa(C`YA%Rqs6J}1a_82>6WulVS zUZ5@y7R0~kYAj7X5fL!icCUhy!-x#_{nFLJ+z>nV{8{c%lJmA|`gS7}YNLou+)s-e zR20T0j=1Qb(=mo(F0pKQ7%eugLtGD_Cv`fXXx=Pg$cswwUzNGrOr}R1 ztxdgTiq*`1LU%C*TV|NO12=bC!{bQO<_01wGt!!W!tUbm%mLrDD979K{YFYJd;-Sf z5#4p`Ma8Mw2%jmptHULwM{?~9=F%h%h2~}VGdBg*H0>U_K-{iBx;h}4uzdL=BkQ-> zD`xd9@bGZ6@U9p!%bzulmdx|>`43L+8DHeYvsUXOY0F+kA@@^%DoKr_2$-ck$4V34 zt$cn<*_u~e`8wqfYIW)1Z+|eASNeMwFvWL8dRd_j-xZ8<@~xg)3qgY%qa4D0))$Hn zHSCNq(aDcFWYp=5lVj6eN3T8EF_9b4iMi&PKODSEnL=OIX znJ8F*A#uCxZZIubmegHs#OqqRGIwn9?=u01FMdkNyF;_i#wuup$!!J)jib)^`S+uK zM(5dMPVXnkEQp-rIOdsIYs~|lZ!>x><>aAblY@l?nYiJ$M+{@T*yQ$S{5!J)Ja*zU z!tvfPOHR%P%&5|*isaO1pHgto!X;~G`OFJqMIBldCt!q$kF6B77{>48L=Rj>XICsz zoUe)aI;4|Zs6H-BEVj8aCtEPAbX>Zj8$Xy%x*Yz!oh~=|T!oR8(KsC|=T>U1`X#UJ z$_~+6XdsX8kb1LeJwu{{XCDjyLb1xYiF`l82&K9T&8!dkXId+)Exd;P$uO_`_P)}b zn=&inVtZlQm<_M7yXcKWy?r&0&m{PkHypukVxOz9p$2h)`uEvI@`WALi* zfT*iXRiLEIY9BFQna~=b>hJTc%05lk3%2E(+69LT-XGR)A7$AeoosEGua7#>gZWeT x1twkK#J=+C_2!b93|DQ(qa{{mQ4YI*FjWDgr=KK*eD7AO%1JYlHvS0<{PKsr3I} z4>TWP+P~@`pqalb1AtooRR#VBq8gx$0sk9A|JMfnuMhd(5>~n8I}^}-1|>m$!3B+_#N^&AER?f={_Hpg03v*rcHultE z1_s7_PZ!6Kh{JCud-gRO2)G{P`)p%s?5R+E>7`cj|J|mm#Wq$Yc1)Q%|45Vm)x|pd zL_1xSesVlp+kL)n!8#d!ziE7rIj(ek%icFHFyTnXoRduLpCA34%Y3Gis0uA%=>QSXM(m!EIg z-#A5Fa7z7jlQmOMr{H+n;dJXJ@rzt@H6|&C@0;D6anxylkS~K~)8ey-7o=Dvo)H#| zndnmK6KT%hpAg&J61lA5Ky%fqwZ^+XuYF@U>zacQ2ZxfumX(})5^mXDKY3l9%nRdvlS#f&`C(X=>Q{yX#IlS#;iIVQ1vcySc+@$#F+P zr`odcUVdwpeV^E7v+#VCJ;)rnyC`I~+}Cx^QEQ~a?^^LjwL4~Lt^U9mnC`I2G4gn& wP{LHZsat0#uKgQV$y}PPCDiHiNwALb{uRa72d$;Vfzig`>FVdQ&MBb@05TpfSpWb4 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ec68ef7851e424decaedaf4d3e5b8f50f4025f51 GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!k2l#}z0_lI%f&YQ1Bf3g_`fFbf0I8*yfz4`7$^cnU1834Rtr*DjVtc_`23m4OJ`0~SWcrz#yvT}<=*|K9)qvTRzZ^<}X=3`Un{KHHseJ`7t=UXT2m0lmzH(lZL-8$>wR_7YQ3gc_@znZXZJe0Z3LQElM zbwvC#^IHZM|MLG@6s>sh;a2eMG(Ouu)2B&$KmU{PlV-j9u33Ze%}T z`9DU(^^GIH=X#&2f3sN4g+-mV7dLA(tooPpmhs;~t5r!4ZcOR}b zR_Eq3UFbc=EYs{Cp}vnZ&Wv3p$fD%+#m-qDwl$vXC@mBhd~)`*@PT`!JCZB899Qe{ z8ox4RUR!i$m%W+Xk40tODW7BPwyfE(`9sRIt;Ssbcaqm$u;31_RD1O%dtTwugL8x9 z*cxtXWo&2IveiTBamV?sUzukG3O1y!wqC|)B|Odf!2g|f3x0`g)iB5uZT!2hL61w~ zi$eYO10H3J&Mj{Y6pa$EiC8dwi}`cEi%BqBnRQ3S@_2^XvzqHzea@%u-m5WT%RjSc z+nnpg^UkU)a!j%=x%+*M?D-?=>0#zvi+}7~^K{MJ)3qFp%Rm2Gy>E+y8E5v}8v7;P z&*Wb(mKLb#NR2#q>#=mST>s&o879rbtRGIfANqIj@$|VSf^!wu|8J?)KlA6H73WKa z*V)&$$1n#}WcvK}S7ll7_~@=v77O|83boJ9^Cy;)%Y2!G`+8goHobA}id* tey|@>F!SJ1VGm(`-1MdCEW=DzhD8nnFK@_LRRRrQ@O1TaS?83{1OOfeER{R z*l+^KK6&!_i4(7mAAfb?#A_e}hJfO)PM&;m;sj9rt9J!+cLFsFl?3?(GyHrYbUP|{`>lf&Xz4NoWjo(eOl(} z>K!m8!lUETdcF`-BV$wgvIps!2kRQ-i22WQ%mvv4FO#uIac`N_` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..051c8e21c4d68cf8389d1097cf012bc04cd44288 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQaQ2{<7u0VRv{tJ8dUEH_-!v6i| z_X5#@3wsY-1fqRF#{P>y*#n0z?K^O3&;IlK4_w-R;NqTr7k2MEf8fxSeFrY@-hFo4 zw%hv;UIxk@J8|piiJNE6Jv?>x{_&Hym3Vd>0GcjY666=mu%*k~A=zemeO8Rmw-X!I zEuUJNW+21<{hqPwaVempHcuDF5Q)oMFL?4DR^V|6!&Gk1ACi{b;l~M@&6$ aFN4=9uJy;NS7-uV#Ng@b=d#Wzp$PyIVxXu1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..55fd7c82dc1f837fbcd2478dac9036e3bd1b4054 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX3?zBp#Z3TGApt%iu0VS4{tG8goZY+s{O-Ny z_v}A^;K1d*2QB~wAqXh4Yw!8J2QKd0e_;<$aNqge2QKbC2$J2k>okzu2b9`({>YK5 zK-q%_F9Ss$eSTI2G*`ML$S;`T7wd$AU9Pd8AK%Z{yMAS|w}o+s?4Ehna^bRXv;S5D zm96k}aSYKo|Mv1puEPo|%Rf3wO07Zuf#yZNerEOhp~QS@H6*C<7Q z>Xs*}D>bgyI`}^QE4^TLQ~89->L(d4C!1$)-s^1d_xeV9qL`1#gSUYz_g&xXaw=@` zvu9I0opfUznG~OXs}R*Larl4U{z>7b2_>_`8LaL->r7TCtFO58tvJ_WkA|+p{QVnR vKKnW{DyFUukWQO6VU?Q0?k+*z96zxLTeJ|`!$i*m*jrgm_f-MBt^vW1ee%!NIBGS_(RW>~w`bVJl_ z`(E+no~GG6bd3T54>fgt1@7i&4&ct7TSVe!nf5gJh z)~A#=Biu`|UC z;{%swH}r`$ba20io;T9}dlZ_YDirSlgMh)))z4*}Q$iB}OtHSx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..69ae485834f430532342fb73425957d1ec6877be GIT binary patch literal 711 zcmeAS@N?(olHy`uVBq!ia0vp^P9V&|3?#2~eYgdr@&kNAT!D0IYHE6VI*?3DOM{R= z1`s4CCj&`{ERa!DRD>)GWM^b#AS(bG0_36rpfVtU2xetv%{4bS23o0H666=m5FV@Y z;1K76Ox~q-VofY_XZ_ePUFY0{)YrzJt`~S#m0K!2`Mmhq2?hqnC!Q{jArXh)Udx_5 z%Rr>zq4NZ96_$f7vx`1|_+OvQ-?TedwRfuiTfOr=&R5P@ODtyCeRsdV3*Y7fEzYz} z7hYyGr-sesuI$pcbV&&CVf`IBq1#|hvztq8sm`Za%Z_f)@>*%o(3@g%J~}=q{m4hI zvVW<+RF1WL_Bynfwe~!S$XG<{!XRBwTKFmS3 z>c>teMEI?na(em8bwNxWF>KySUpIAzD?fW*x6*r^^A+jut=$#3=ULQTWw|{s<6xis zvic8KUE(i)J`vYZxT|lC+75H2X^{ddK6ZXOob!BcTk|HGGWza~3BG)XU1|5Ng21mk z6d4mOAHDG?KEipucOFwP)2hq7>GKL~W2V0HYp`V87wsC@=JL9F<;&tDYx?cJbTK_U z(j;G4xa4K{5n~An;RnY*YaX}TGn=7ut>9^=Lvt+tY8Em#?|VDV_Ke#VCLXRM+z~5< z0_E!ke>u!~FymsiWyHyfKY!Kq=1#L*lWFq*!I~dCYi`Y-mvvdQ$Es<1h|V9+i3&-c z{IX)b4cmYG{L5xqoY?%qEJ-av_^1@$?z{Dm*eh?ww5Rf0RRWU-gQu&X%Q~loCII$G BH){X@ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f2a40525027e63fb78c1dfd38362920d0b07b444 GIT binary patch literal 23105 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e624ea037e53b79596795f0fdf1b7a48db7bb873 GIT binary patch literal 47439 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%0D{FpXmf4|P-sttKAy4yz>y~-z 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..aeb893e4704ff8cb38947c58d7b80b479b91f2ae GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w(Ey(iS0KG;`3@jjuyos^mD?9B z-w9;jUv%mnP=c)_$S;^7y-(NOyk6mdKI;Vst0HOvkNdN!< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3e5e55163fb407c45e0249ef92d29896958e10c6 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k3?#4J%UA`ZoC178T!HkWMH?0^+p%c*wuQ^K zFIv81a^0i)aK+9=t9GwibqpxDe9gWkD|ankv6FE+ z9~;mVp^_lKU{VN&cJIoJmMl5Wl)okRK-oM`7sn8b(|4zMb2S+7xcK(2 z{hEL4&i_?n=COW?3m&bJ-(z6#GOkCRf2OhCM1d`;XPFmWQ<)?g(5@Zgbmd71i`4Jg zNiL?6$K@rO+1H+nT5*>vRMyUB!pf#si=M~ad63l1&BN%!)gydX#=eLD2~*4+&Oi!T%foL7y#LUnf;DH(`8G7{DK*NKVkcNbX~f?t~~F@ z*SD@ruk_fqxII4H(b7~|@=d*?6Hwt|PZ!4!kK=DIdkeJ~aJU8v{om%+Tc7)F|5>rH z3pUGleh%ggbyyklYJS#xqLvW%n727V`^=Z^wo2j??|Oc7 zoA{IQ#MH*m*VU$4D`-y@RWMfHpaL{CK#f2EQB(Kk!cL$CawS22!3@=`Ki@wU{Blu&dspA<2hr~O zYnP{l*xsBYe$+2l>o|v>2Ll5mho_5UNW|f{*CYFy4Mbc5`6Y}k&hR;3y7%8Gn)m7d ze;P|XD$5z&r#Y$yOj7Zj^yTT)Tb8kt&fZ*>VtRefrTD(Ayv{zegY%bNbt&HbGDoj+ zS=-HbCYN6@rLE1#^fo_xJ3j5};tbvX(>894B0rqJc{pai&F8Ck6CT-FFZx+xz`iIl z(M9RJjO>}ljCIo^zu0WHOVDd;PnuF2a^%A$_QNh8pR8`|{B~pa@$L?(w+r142hUzp zX8U$(H-ZnV@>Qm&xAgK+@%}nO658H7)KFVdQ&MBb@00yYL8UO$Q literal 0 HcmV?d00001 diff --git a/yinmeng-ios/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 + }() + +}