diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj index 1a2d79d4..922d48a3 100644 --- a/YuMi.xcodeproj/project.pbxproj +++ b/YuMi.xcodeproj/project.pbxproj @@ -252,6 +252,28 @@ 23E9EA792A8385CC00B792F2 /* XPTreasureFairyGiftView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA772A8385CB00B792F2 /* XPTreasureFairyGiftView.m */; }; 23E9EA7C2A83977400B792F2 /* MessageContentTreasureFairyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA7B2A83977400B792F2 /* MessageContentTreasureFairyView.m */; }; 23E9EA7F2A839B2F00B792F2 /* MessageTreasureFairyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA7E2A839B2F00B792F2 /* MessageTreasureFairyModel.m */; }; + 23E9EA842A84B6FD00B792F2 /* XPMineUserInfoTagModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA802A84B6FC00B792F2 /* XPMineUserInfoTagModel.m */; }; + 23E9EA852A84B6FD00B792F2 /* XPSoundCardModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA832A84B6FD00B792F2 /* XPSoundCardModel.m */; }; + 23E9EA882A84B75900B792F2 /* XPMineUserInfoHeaderTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA862A84B75900B792F2 /* XPMineUserInfoHeaderTagView.m */; }; + 23E9EA8B2A84B9BD00B792F2 /* XPMineUserInfoTagFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA8A2A84B9BD00B792F2 /* XPMineUserInfoTagFlowLayout.m */; }; + 23E9EA8E2A84BC9000B792F2 /* XPMineUserInfoHeaderTagCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA8D2A84BC9000B792F2 /* XPMineUserInfoHeaderTagCell.m */; }; + 23E9EA912A84BD5B00B792F2 /* XPMineUserInfoIndividualTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA8F2A84BD5B00B792F2 /* XPMineUserInfoIndividualTagView.m */; }; + 23E9EA942A84BE4800B792F2 /* XPGiftUserDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA922A84BE4800B792F2 /* XPGiftUserDataViewController.m */; }; + 23E9EA972A84C37000B792F2 /* XPMineUserInfoRecordedSoundVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA952A84C37000B792F2 /* XPMineUserInfoRecordedSoundVC.m */; }; + 23E9EA9A2A84C39700B792F2 /* XPMineUserInfoRecordedSoundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA992A84C39700B792F2 /* XPMineUserInfoRecordedSoundView.m */; }; + 23E9EA9E2A84C42B00B792F2 /* SGYProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA9D2A84C42B00B792F2 /* SGYProgressView.m */; }; + 23E9EAA12A84C53900B792F2 /* TTNewAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EA9F2A84C53800B792F2 /* TTNewAlertView.m */; }; + 23E9EAA32A84C80300B792F2 /* pi_new_loading.svga in Resources */ = {isa = PBXBuildFile; fileRef = 23E9EAA22A84C80300B792F2 /* pi_new_loading.svga */; }; + 23E9EAA62A84C97C00B792F2 /* XPMineUserInfoTagVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EAA52A84C97C00B792F2 /* XPMineUserInfoTagVC.m */; }; + 23E9EAAD2A84C9B800B792F2 /* XPMineUserInfoTagItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EAA82A84C9B700B792F2 /* XPMineUserInfoTagItemView.m */; }; + 23E9EAAE2A84C9B800B792F2 /* XPMineUserInfoTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EAAA2A84C9B700B792F2 /* XPMineUserInfoTagView.m */; }; + 23E9EAAF2A84C9B800B792F2 /* XPMineUserInfoTagHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EAAB2A84C9B800B792F2 /* XPMineUserInfoTagHeadView.m */; }; + 23E9EAB22A84C9DE00B792F2 /* XPMineUserInfoTagViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EAB12A84C9DE00B792F2 /* XPMineUserInfoTagViewCell.m */; }; + 23E9EAB52A84CB2700B792F2 /* XPMineUserInfoTagEmptyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EAB32A84CB2600B792F2 /* XPMineUserInfoTagEmptyView.m */; }; + 23E9EABB2A84CCBE00B792F2 /* XPMineDataSkillDataCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EAB92A84CCBD00B792F2 /* XPMineDataSkillDataCollectionViewCell.m */; }; + 23E9EB152A84D02400B792F2 /* XPMineUserInfoEditPickView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EB142A84D02400B792F2 /* XPMineUserInfoEditPickView.m */; }; + 23E9EB182A84D0E700B792F2 /* XPMineUserInfoEditMainTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EB162A84D0E700B792F2 /* XPMineUserInfoEditMainTagView.m */; }; + 23E9EB1B2A84D28A00B792F2 /* XPMineUserInfoEditTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23E9EB1A2A84D28A00B792F2 /* XPMineUserInfoEditTagView.m */; }; 73FFADDC93E195344047A2EC /* Pods_YuMi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF623970097D653132D69A /* Pods_YuMi.framework */; }; 9B0086C627BA392B0032BD2B /* AnchorStageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0086C527BA392B0032BD2B /* AnchorStageView.m */; }; 9B0086CA27BA4F570032BD2B /* AnchorMicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0086C927BA4F570032BD2B /* AnchorMicroView.m */; }; @@ -1805,6 +1827,49 @@ 23E9EA7B2A83977400B792F2 /* MessageContentTreasureFairyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageContentTreasureFairyView.m; sourceTree = ""; }; 23E9EA7D2A839B2F00B792F2 /* MessageTreasureFairyModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessageTreasureFairyModel.h; sourceTree = ""; }; 23E9EA7E2A839B2F00B792F2 /* MessageTreasureFairyModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageTreasureFairyModel.m; sourceTree = ""; }; + 23E9EA802A84B6FC00B792F2 /* XPMineUserInfoTagModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagModel.m; sourceTree = ""; }; + 23E9EA812A84B6FC00B792F2 /* XPSoundCardModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPSoundCardModel.h; sourceTree = ""; }; + 23E9EA822A84B6FC00B792F2 /* XPMineUserInfoTagModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagModel.h; sourceTree = ""; }; + 23E9EA832A84B6FD00B792F2 /* XPSoundCardModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPSoundCardModel.m; sourceTree = ""; }; + 23E9EA862A84B75900B792F2 /* XPMineUserInfoHeaderTagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoHeaderTagView.m; sourceTree = ""; }; + 23E9EA872A84B75900B792F2 /* XPMineUserInfoHeaderTagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoHeaderTagView.h; sourceTree = ""; }; + 23E9EA892A84B9BD00B792F2 /* XPMineUserInfoTagFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagFlowLayout.h; sourceTree = ""; }; + 23E9EA8A2A84B9BD00B792F2 /* XPMineUserInfoTagFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagFlowLayout.m; sourceTree = ""; }; + 23E9EA8C2A84BC8F00B792F2 /* XPMineUserInfoHeaderTagCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoHeaderTagCell.h; sourceTree = ""; }; + 23E9EA8D2A84BC9000B792F2 /* XPMineUserInfoHeaderTagCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoHeaderTagCell.m; sourceTree = ""; }; + 23E9EA8F2A84BD5B00B792F2 /* XPMineUserInfoIndividualTagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoIndividualTagView.m; sourceTree = ""; }; + 23E9EA902A84BD5B00B792F2 /* XPMineUserInfoIndividualTagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoIndividualTagView.h; sourceTree = ""; }; + 23E9EA922A84BE4800B792F2 /* XPGiftUserDataViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPGiftUserDataViewController.m; sourceTree = ""; }; + 23E9EA932A84BE4800B792F2 /* XPGiftUserDataViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPGiftUserDataViewController.h; sourceTree = ""; }; + 23E9EA952A84C37000B792F2 /* XPMineUserInfoRecordedSoundVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoRecordedSoundVC.m; sourceTree = ""; }; + 23E9EA962A84C37000B792F2 /* XPMineUserInfoRecordedSoundVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoRecordedSoundVC.h; sourceTree = ""; }; + 23E9EA982A84C39600B792F2 /* XPMineUserInfoRecordedSoundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoRecordedSoundView.h; sourceTree = ""; }; + 23E9EA992A84C39700B792F2 /* XPMineUserInfoRecordedSoundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoRecordedSoundView.m; sourceTree = ""; }; + 23E9EA9C2A84C42B00B792F2 /* SGYProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGYProgressView.h; sourceTree = ""; }; + 23E9EA9D2A84C42B00B792F2 /* SGYProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGYProgressView.m; sourceTree = ""; }; + 23E9EA9F2A84C53800B792F2 /* TTNewAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTNewAlertView.m; sourceTree = ""; }; + 23E9EAA02A84C53900B792F2 /* TTNewAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTNewAlertView.h; sourceTree = ""; }; + 23E9EAA22A84C80300B792F2 /* pi_new_loading.svga */ = {isa = PBXFileReference; lastKnownFileType = file; path = pi_new_loading.svga; sourceTree = ""; }; + 23E9EAA42A84C97C00B792F2 /* XPMineUserInfoTagVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagVC.h; sourceTree = ""; }; + 23E9EAA52A84C97C00B792F2 /* XPMineUserInfoTagVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagVC.m; sourceTree = ""; }; + 23E9EAA72A84C9B700B792F2 /* XPMineUserInfoTagItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagItemView.h; sourceTree = ""; }; + 23E9EAA82A84C9B700B792F2 /* XPMineUserInfoTagItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagItemView.m; sourceTree = ""; }; + 23E9EAA92A84C9B700B792F2 /* XPMineUserInfoTagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagView.h; sourceTree = ""; }; + 23E9EAAA2A84C9B700B792F2 /* XPMineUserInfoTagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagView.m; sourceTree = ""; }; + 23E9EAAB2A84C9B800B792F2 /* XPMineUserInfoTagHeadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagHeadView.m; sourceTree = ""; }; + 23E9EAAC2A84C9B800B792F2 /* XPMineUserInfoTagHeadView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagHeadView.h; sourceTree = ""; }; + 23E9EAB02A84C9DD00B792F2 /* XPMineUserInfoTagViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagViewCell.h; sourceTree = ""; }; + 23E9EAB12A84C9DE00B792F2 /* XPMineUserInfoTagViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagViewCell.m; sourceTree = ""; }; + 23E9EAB32A84CB2600B792F2 /* XPMineUserInfoTagEmptyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoTagEmptyView.m; sourceTree = ""; }; + 23E9EAB42A84CB2600B792F2 /* XPMineUserInfoTagEmptyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoTagEmptyView.h; sourceTree = ""; }; + 23E9EAB92A84CCBD00B792F2 /* XPMineDataSkillDataCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineDataSkillDataCollectionViewCell.m; sourceTree = ""; }; + 23E9EABA2A84CCBE00B792F2 /* XPMineDataSkillDataCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineDataSkillDataCollectionViewCell.h; sourceTree = ""; }; + 23E9EB132A84D02400B792F2 /* XPMineUserInfoEditPickView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditPickView.h; sourceTree = ""; }; + 23E9EB142A84D02400B792F2 /* XPMineUserInfoEditPickView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEditPickView.m; sourceTree = ""; }; + 23E9EB162A84D0E700B792F2 /* XPMineUserInfoEditMainTagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEditMainTagView.m; sourceTree = ""; }; + 23E9EB172A84D0E700B792F2 /* XPMineUserInfoEditMainTagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditMainTagView.h; sourceTree = ""; }; + 23E9EB192A84D28900B792F2 /* XPMineUserInfoEditTagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEditTagView.h; sourceTree = ""; }; + 23E9EB1A2A84D28A00B792F2 /* XPMineUserInfoEditTagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEditTagView.m; sourceTree = ""; }; 7DB00EC07F1D0ADFF900B38D /* Pods-YuMi.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YuMi.debug.xcconfig"; path = "Target Support Files/Pods-YuMi/Pods-YuMi.debug.xcconfig"; sourceTree = ""; }; 9B0086C427BA392B0032BD2B /* AnchorStageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AnchorStageView.h; sourceTree = ""; }; 9B0086C527BA392B0032BD2B /* AnchorStageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AnchorStageView.m; sourceTree = ""; }; @@ -4071,6 +4136,8 @@ 186A533B26FC6ED900D67B2C /* View */ = { isa = PBXGroup; children = ( + 23E9EAA02A84C53900B792F2 /* TTNewAlertView.h */, + 23E9EA9F2A84C53800B792F2 /* TTNewAlertView.m */, 186A533E26FC6ED900D67B2C /* TTAlertView.h */, 186A533C26FC6ED900D67B2C /* TTAlertView.m */, 186A533D26FC6ED900D67B2C /* TTActionSheetView.h */, @@ -4365,6 +4432,7 @@ 189DD5A726DFA09700AB55B1 /* Tools */ = { isa = PBXGroup; children = ( + 23E9EA9B2A84C42B00B792F2 /* SGYProgressView */, 23E9E9AB2A81E8E900B792F2 /* Event */, E83645A42A40AEF600E0DBE4 /* Bundle */, E83645652A40A2CA00E0DBE4 /* CardManager */, @@ -4998,6 +5066,15 @@ path = fairy; sourceTree = ""; }; + 23E9EA9B2A84C42B00B792F2 /* SGYProgressView */ = { + isa = PBXGroup; + children = ( + 23E9EA9C2A84C42B00B792F2 /* SGYProgressView.h */, + 23E9EA9D2A84C42B00B792F2 /* SGYProgressView.m */, + ); + path = SGYProgressView; + sourceTree = ""; + }; 9B0086C727BA4F4A0032BD2B /* Anchor */ = { isa = PBXGroup; children = ( @@ -8189,6 +8266,26 @@ E88B5CC226FB429C00DA9178 /* MineInfo */ = { isa = PBXGroup; children = ( + 23E9EB132A84D02400B792F2 /* XPMineUserInfoEditPickView.h */, + 23E9EB142A84D02400B792F2 /* XPMineUserInfoEditPickView.m */, + 23E9EA902A84BD5B00B792F2 /* XPMineUserInfoIndividualTagView.h */, + 23E9EA8F2A84BD5B00B792F2 /* XPMineUserInfoIndividualTagView.m */, + 23E9EA8C2A84BC8F00B792F2 /* XPMineUserInfoHeaderTagCell.h */, + 23E9EA8D2A84BC9000B792F2 /* XPMineUserInfoHeaderTagCell.m */, + 23E9EA892A84B9BD00B792F2 /* XPMineUserInfoTagFlowLayout.h */, + 23E9EA8A2A84B9BD00B792F2 /* XPMineUserInfoTagFlowLayout.m */, + 23E9EAAC2A84C9B800B792F2 /* XPMineUserInfoTagHeadView.h */, + 23E9EAAB2A84C9B800B792F2 /* XPMineUserInfoTagHeadView.m */, + 23E9EAA72A84C9B700B792F2 /* XPMineUserInfoTagItemView.h */, + 23E9EAA82A84C9B700B792F2 /* XPMineUserInfoTagItemView.m */, + 23E9EAB42A84CB2600B792F2 /* XPMineUserInfoTagEmptyView.h */, + 23E9EAB32A84CB2600B792F2 /* XPMineUserInfoTagEmptyView.m */, + 23E9EAA92A84C9B700B792F2 /* XPMineUserInfoTagView.h */, + 23E9EAAA2A84C9B700B792F2 /* XPMineUserInfoTagView.m */, + 23E9EAB02A84C9DD00B792F2 /* XPMineUserInfoTagViewCell.h */, + 23E9EAB12A84C9DE00B792F2 /* XPMineUserInfoTagViewCell.m */, + 23E9EA872A84B75900B792F2 /* XPMineUserInfoHeaderTagView.h */, + 23E9EA862A84B75900B792F2 /* XPMineUserInfoHeaderTagView.m */, E8EEB8FC26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.h */, E8EEB8FD26FC2DF8007C6EBA /* XPMineUserInfoCustomNavView.m */, E88B5CC326FB42B000DA9178 /* XPMineUserInfoHeaderView.h */, @@ -8332,6 +8429,7 @@ E8A1E45C276220B100B294CA /* Resources */ = { isa = PBXGroup; children = ( + 23E9EAA22A84C80300B792F2 /* pi_new_loading.svga */, 23E9EA6C2A83813000B792F2 /* fairy */, 14D8768129A751E100E1DD7F /* Image */, ); @@ -8925,6 +9023,10 @@ E8D34D57280821F3009C4835 /* UserInfo */ = { isa = PBXGroup; children = ( + 23E9EA822A84B6FC00B792F2 /* XPMineUserInfoTagModel.h */, + 23E9EA802A84B6FC00B792F2 /* XPMineUserInfoTagModel.m */, + 23E9EA812A84B6FC00B792F2 /* XPSoundCardModel.h */, + 23E9EA832A84B6FD00B792F2 /* XPSoundCardModel.m */, E8D34D5828082357009C4835 /* UserGiftWallInfoModel.h */, E8D34D5928082357009C4835 /* UserGiftWallInfoModel.m */, ); @@ -9165,6 +9267,12 @@ E8E70D7F26F2F39000F03460 /* SubViews */, E8E70D7526F2F15100F03460 /* XPMineViewController.h */, E8E70D7626F2F15100F03460 /* XPMineViewController.m */, + 23E9EA932A84BE4800B792F2 /* XPGiftUserDataViewController.h */, + 23E9EA922A84BE4800B792F2 /* XPGiftUserDataViewController.m */, + 23E9EAA42A84C97C00B792F2 /* XPMineUserInfoTagVC.h */, + 23E9EAA52A84C97C00B792F2 /* XPMineUserInfoTagVC.m */, + 23E9EA962A84C37000B792F2 /* XPMineUserInfoRecordedSoundVC.h */, + 23E9EA952A84C37000B792F2 /* XPMineUserInfoRecordedSoundVC.m */, 9BD8D4E128911E9900AE03FF /* XPMineCollectRoomListViewController.h */, 9BD8D4E228911E9900AE03FF /* XPMineCollectRoomListViewController.m */, 9BD9A17A27A0EE24004186FE /* XPMineVisitorViewController.h */, @@ -9290,12 +9398,16 @@ E896EFB12771C93B00AD2CC1 /* XPMineFriendNumberView.m */, 9B734F71288A787000CBDAA9 /* XPMineAccountView.h */, 9B734F72288A787000CBDAA9 /* XPMineAccountView.m */, + 23E9EABA2A84CCBE00B792F2 /* XPMineDataSkillDataCollectionViewCell.h */, + 23E9EAB92A84CCBD00B792F2 /* XPMineDataSkillDataCollectionViewCell.m */, E824544126F58FCE00BE8163 /* XPMinePayPwdInputView.h */, E824544226F58FCE00BE8163 /* XPMinePayPwdInputView.m */, E824544C26F5BC1A00BE8163 /* XPMineModifPayPwdView.h */, E824544D26F5BC1A00BE8163 /* XPMineModifPayPwdView.m */, E824545726F5E65900BE8163 /* XPMineVerifIdentityView.h */, E824545826F5E65900BE8163 /* XPMineVerifIdentityView.m */, + 23E9EA982A84C39600B792F2 /* XPMineUserInfoRecordedSoundView.h */, + 23E9EA992A84C39700B792F2 /* XPMineUserInfoRecordedSoundView.m */, 9BE01ACC28925F7D00B50299 /* XPMineNewUserRechargeView.h */, 9BE01ACD28925F7D00B50299 /* XPMineNewUserRechargeView.m */, ); @@ -9377,6 +9489,10 @@ E8EEB8FA26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m */, E8EEB90726FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.h */, E8EEB90826FC579A007C6EBA /* XPMineUserInfoEditTableViewCell.m */, + 23E9EB172A84D0E700B792F2 /* XPMineUserInfoEditMainTagView.h */, + 23E9EB162A84D0E700B792F2 /* XPMineUserInfoEditMainTagView.m */, + 23E9EB192A84D28900B792F2 /* XPMineUserInfoEditTagView.h */, + 23E9EB1A2A84D28A00B792F2 /* XPMineUserInfoEditTagView.m */, E8B846C026FD82DC00A777FE /* XPMineUserInfoAlbumCollectionViewCell.h */, E8B846C126FD82DC00A777FE /* XPMineUserInfoAlbumCollectionViewCell.m */, E8D34D4B28080351009C4835 /* XPMineDataClanTableViewCell.h */, @@ -9648,6 +9764,7 @@ E80EC82E28ACD84000D133C5 /* emoji.xml in Resources */, E80EC87928ACD84000D133C5 /* emoji_91@2x.png in Resources */, E80EC84C28ACD84000D133C5 /* emoji_120@2x.png in Resources */, + 23E9EAA32A84C80300B792F2 /* pi_new_loading.svga in Resources */, E80EC83628ACD84000D133C5 /* emoji_147@2x.png in Resources */, E80EC86B28ACD84000D133C5 /* emoji_200@2x.png in Resources */, E80EC88F28ACD84000D133C5 /* emoji_121@2x.png in Resources */, @@ -9801,6 +9918,7 @@ E8AB633628AE54A40023B0D2 /* XPSailingPrizeCollectionViewCell.m in Sources */, E85E7B4E2A4EB0D300B6D00A /* XPMineGuildSetNameViewController.m in Sources */, 2331C1642A5EB71000E1D940 /* NobleInfo.m in Sources */, + 23E9EB182A84D0E700B792F2 /* XPMineUserInfoEditMainTagView.m in Sources */, E824543A26F5880E00BE8163 /* XPLoginVerifBindPhoneProtocol.h in Sources */, E821077E2987D67100DE7040 /* MessageRiskAlertModel.m in Sources */, E818DD222A48977F00F163F7 /* XPLoginAreaTableViewCell.m in Sources */, @@ -9841,6 +9959,7 @@ E8950183282CAC6A007E459A /* XPMonentsPhotoView.m in Sources */, E8AC721E26F472BF007D6E91 /* XPMineSettingProtocol.h in Sources */, E8F63CB4298B563D00B338BA /* Api+SayHello.m in Sources */, + 23E9EA972A84C37000B792F2 /* XPMineUserInfoRecordedSoundVC.m in Sources */, E81E09C9290F71BF00A1F410 /* XPAdvertiseView.m in Sources */, 9BC5C91F277C902B007C8719 /* XPReleaseRadioView.m in Sources */, E84843AF27F59E7E0050D365 /* XPRoomPKResultView.m in Sources */, @@ -9887,6 +10006,7 @@ E82109B026F1D83500FC3319 /* LoginBindPhonePresent.m in Sources */, E81C1B1F27705F7A0020D1E4 /* XPArrangeMicViewController.m in Sources */, E8B825C726EA0D9A009E8E9F /* LoginVerifCodeProtocol.h in Sources */, + 23E9EAAE2A84C9B800B792F2 /* XPMineUserInfoTagView.m in Sources */, 2331C1B32A60F32D00E1D940 /* XPCandyTreeMoreRuleCell.m in Sources */, 14A6034C29A35EE600D2A6A5 /* XPMineItemTableViewCell.m in Sources */, 9BAC92F528E6E63000147DD8 /* XPRoomInsideOperationCell.m in Sources */, @@ -9913,6 +10033,7 @@ E87E62682A3F571D002F68C9 /* XPHomeContainerPresenter.m in Sources */, E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */, E85E7B2F2A4EB0D300B6D00A /* XPGoldIncomeSectionView.m in Sources */, + 23E9EAA12A84C53900B792F2 /* TTNewAlertView.m in Sources */, E8DEC9A12764A5D20078CB70 /* XPRoomMoreItemModel.m in Sources */, E80EC81028ACD84000D133C5 /* QExtendBoardView.m in Sources */, 9B87B3CD2926473D00085110 /* XPSessionListHeadFriendCell.m in Sources */, @@ -9937,6 +10058,7 @@ E87E62772A3F5907002F68C9 /* XPNewHomeRecommendTableViewCell.m in Sources */, 9BA812D228BF145700783EA7 /* ClientRedPacketModel.m in Sources */, 1427219229A75F6F00C7C423 /* MultipartFormDataParser.m in Sources */, + 23E9EAAF2A84C9B800B792F2 /* XPMineUserInfoTagHeadView.m in Sources */, E890BC04273CF0500007C46B /* XPGiftCountModel.m in Sources */, E899C68C275093B800E189E5 /* XPUserCardMicroItemModel.m in Sources */, 2331C1B52A60F32D00E1D940 /* XPCandyTreeViewController.m in Sources */, @@ -9981,6 +10103,7 @@ E82EE0F8272FDDFA00D15DC1 /* UserPrivacyView.m in Sources */, 2331C1672A5EB71000E1D940 /* NobleLevelUpModel.m in Sources */, 9BA812E428BF70A600783EA7 /* XPRoomRedPacketPwdView.m in Sources */, + 23E9EB1B2A84D28A00B792F2 /* XPMineUserInfoEditTagView.m in Sources */, 2331C1662A5EB71000E1D940 /* NobleCenterModel.m in Sources */, E8998D8B2859CB6A00C68558 /* XPMineUserInfoGiftWallSubViewController.m in Sources */, E8DEC9A42764A6600078CB70 /* XPMoreMenuPresenter.m in Sources */, @@ -10006,6 +10129,7 @@ E85E7B632A4EC35A00B6D00A /* XPWithdrawAccountModel.m in Sources */, 23E9EA642A837BE400B792F2 /* XPTreasureFairyShopingView.m in Sources */, E87DF4D42A42C9B1009C1185 /* HomeRecommendRoomModel.m in Sources */, + 23E9EAB22A84C9DE00B792F2 /* XPMineUserInfoTagViewCell.m in Sources */, 9B42869C28C1FD3D009034D2 /* XPOpenRedPacketCell.m in Sources */, 9BFE992E288142FD009DA429 /* RoomClassifyModel.m in Sources */, 142721AB29A75F6F00C7C423 /* DispatchQueueLogFormatter.m in Sources */, @@ -10060,6 +10184,7 @@ E88863D3278ED4C0004BCFAB /* Timestamp.m in Sources */, E8A3540A28FEC0510014A784 /* XPWishGiftListView.m in Sources */, E88863CF278EC393004BCFAB /* XPAcrossRoomPKPrizeView.m in Sources */, + 23E9EA8E2A84BC9000B792F2 /* XPMineUserInfoHeaderTagCell.m in Sources */, E87DF5082A42CE79009C1185 /* XPInRoomRecordPresenter.m in Sources */, 189DD6FF26E20E5900AB55B1 /* HttpRequestHelper.m in Sources */, E85E7B062A4EB0D200B6D00A /* XPGuildSearchPresenter.m in Sources */, @@ -10071,6 +10196,7 @@ 9BD63FAB277EE885006EB744 /* Api+RoomRadio.m in Sources */, E8A30BF328534B17003B4873 /* Api+FindNew.m in Sources */, E852D7412863249F001465ED /* XPMonentsReplyTableViewCell.m in Sources */, + 23E9EA942A84BE4800B792F2 /* XPGiftUserDataViewController.m in Sources */, 2331C16D2A5EB71000E1D940 /* XPNobleSettingNavView.m in Sources */, E8AEAED6271412EC0017FCE0 /* XPRoomViewController.m in Sources */, E80A086527F318620027B30C /* XPRoomPKPlayingView.m in Sources */, @@ -10122,6 +10248,7 @@ E8664ED627E434D5000171BA /* XPRoomPKRecordViewController.m in Sources */, E87E914E2796678D00A7B3F2 /* XPMineDressEmptyTableViewCell.m in Sources */, 9B7D804D27537950003DAC0C /* MessageCell.m in Sources */, + 23E9EAA62A84C97C00B792F2 /* XPMineUserInfoTagVC.m in Sources */, 9B044D9D282D2A6400DE4859 /* XPRoomAnchorRankEnterView.m in Sources */, E8950180282CAC49007E459A /* XPMonentsUserInfoView.m in Sources */, 18F404C927609A4300A6C548 /* MessagePresenter.m in Sources */, @@ -10264,6 +10391,7 @@ E81366F626F0C0DF0076364C /* LoginFullInfoPresenter.m in Sources */, E8A30BEE28534AB1003B4873 /* XPSessionFindNewPresenter.m in Sources */, 9BDA3E7727FD41C200517FE6 /* XPAnchorFansTeamViewController.m in Sources */, + 23E9EAAD2A84C9B800B792F2 /* XPMineUserInfoTagItemView.m in Sources */, 18A61BE8274F9CF000A09A54 /* SessionListViewController.m in Sources */, E8C1CD6A27D8937800376F83 /* XPRoomFaceCollectionViewCell.m in Sources */, 9B2EA7C02804037700ED17BF /* AnchorPKStageView.m in Sources */, @@ -10300,6 +10428,7 @@ E8751E6B28A64C6E0056EF44 /* XPSailingRankTableViewCell.m in Sources */, 9B1B72B528003664003FACE9 /* Api+AnchorPk.m in Sources */, E8EEB90626FC5772007C6EBA /* XPMineUserInfoEditViewController.m in Sources */, + 23E9EA912A84BD5B00B792F2 /* XPMineUserInfoIndividualTagView.m in Sources */, E8B846D626FDE01B00A777FE /* XPMineRechargePresenter.m in Sources */, E8A30BF628534B35003B4873 /* FindNewUserInfoModel.m in Sources */, E801274027E323C800BAC3F2 /* XPRoomPKViewController.m in Sources */, @@ -10319,6 +10448,7 @@ E8DAC5AC2858305A00012CFD /* XPRoomMessageBubbleView.m in Sources */, 1427218929A75F6F00C7C423 /* HTTPDataResponse.m in Sources */, E8B9843028AB90200022D026 /* XPMoentsTopicListView.m in Sources */, + 23E9EA9A2A84C39700B792F2 /* XPMineUserInfoRecordedSoundView.m in Sources */, E8E20BDE28164D3A0033B688 /* SessionNavView.m in Sources */, 9B734F76288A92FB00CBDAA9 /* XPMineFuntionItemModel.m in Sources */, E82D5C70276AE60000858D6D /* HeadwearModel.m in Sources */, @@ -10326,6 +10456,7 @@ E880B3A1278BD60C00A83B0D /* XPAcrossRoomPKSelectRoomView.m in Sources */, 9B3C181A292CE4FA003AF543 /* XPAnchorPKMatchView.m in Sources */, E80EC80D28ACD84000D133C5 /* QInputBarView.m in Sources */, + 23E9EA852A84B6FD00B792F2 /* XPSoundCardModel.m in Sources */, E8D48250278D68BA003C1D08 /* XPAcrpssRoomPKPanelView.m in Sources */, 23E9E9B52A81E8E900B792F2 /* XPAdjustEvent.m in Sources */, 18F404C3276098F100A6C548 /* Api+Message.m in Sources */, @@ -10394,6 +10525,7 @@ E8E70D8C26F2F5A500F03460 /* XPMineHeadItemCollectionViewCell.m in Sources */, 9BE9F0FC27FED2E100667200 /* XPAnchorFansJoinModel.m in Sources */, E87DF50B2A42CEC9009C1185 /* HomeEveryOneSearchModel.m in Sources */, + 23E9EA8B2A84B9BD00B792F2 /* XPMineUserInfoTagFlowLayout.m in Sources */, 186A534A26FC6ED900D67B2C /* TTActionSheetConfig.m in Sources */, 9B6E856A281A982A0041A321 /* XPRoomRecommendView.m in Sources */, E8DBB6FD27B63CE000AA285D /* LittleGameMicroView.m in Sources */, @@ -10522,6 +10654,7 @@ 23E9EA4B2A837BE400B792F2 /* XPTreasureFairySendView.m in Sources */, 9BD8D4E628911F7700AE03FF /* XPMineCollectRoomListPresenter.m in Sources */, E866B6E52759F96F009B002A /* XPMiniRoomView.m in Sources */, + 23E9EAB52A84CB2700B792F2 /* XPMineUserInfoTagEmptyView.m in Sources */, 2331C1AE2A60F32D00E1D940 /* CandyTreeInfoModel.m in Sources */, E818E34B286ECABF005EDF68 /* XPMonentsPublishPresenter.m in Sources */, E85E7B462A4EB0D300B6D00A /* XPGuildEmptyCollectionViewCell.m in Sources */, @@ -10550,6 +10683,7 @@ 9BFE0D8E2898C8C300F53C24 /* XPAnchorCardSkillCollectionViewCell.m in Sources */, E87DF4B72A42C2FD009C1185 /* XPFirstRechargeCollectionView.m in Sources */, E85E7B382A4EB0D300B6D00A /* XPMineGuildSearchMemberTableViewCell.m in Sources */, + 23E9EA842A84B6FD00B792F2 /* XPMineUserInfoTagModel.m in Sources */, E8998D852859B4FA00C68558 /* XPMineUserInfoGiftView.m in Sources */, 186A536B26FC6F2E00D67B2C /* XPShareItemCell.m in Sources */, 9B42869228C1AED4009034D2 /* XPReceiveRedPacketModel.m in Sources */, @@ -10562,6 +10696,7 @@ E872309326E8D31500B90D4F /* LoginVerifCodeView.m in Sources */, E82107872987E49100DE7040 /* MessageRedPacketModel.m in Sources */, 23E9EA5F2A837BE400B792F2 /* XPTreasureFairyExchangeView.m in Sources */, + 23E9EA9E2A84C42B00B792F2 /* SGYProgressView.m in Sources */, 23E9EA622A837BE400B792F2 /* XPTreasureFairyTrialsView.m in Sources */, E87E91552796B6DE00A7B3F2 /* XPRoomInviteUserViewController.m in Sources */, E880B3B5278C1FE400A83B0D /* XPAcrossRoomPKPresenter.m in Sources */, @@ -10623,6 +10758,7 @@ E85E7B362A4EB0D300B6D00A /* XPClanRoomCollectionViewCell.m in Sources */, 18F4043A275E20D900A6C548 /* TRTCRtcImpl.m in Sources */, E8899C7F27853B6A007944BE /* DatingMicroView.m in Sources */, + 23E9EA882A84B75900B792F2 /* XPMineUserInfoHeaderTagView.m in Sources */, E87DF4EC2A42CB60009C1185 /* XPSearchListTableViewCell.m in Sources */, E85E7B052A4EB0D200B6D00A /* XPClanPresenter.m in Sources */, E85E7BA52A4EC99300B6D00A /* XPMineChooseGiveDiamondView.m in Sources */, @@ -10729,6 +10865,7 @@ E87C0A9D27D9986700CB2241 /* XPRoomFaceCollectionFlowLayout.m in Sources */, 1427212C29A757EC00C7C423 /* MonentsListInfoModel.m in Sources */, 23E9EA432A837BE400B792F2 /* XPTreasureFairyPrizeRecordCell.m in Sources */, + 23E9EB152A84D02400B792F2 /* XPMineUserInfoEditPickView.m in Sources */, 9BA812D628BF52E100783EA7 /* XPRoomSendRedPacketViewController.m in Sources */, E86E79D328A4E94E006DAF48 /* SessionRiskView.m in Sources */, 23E9EA552A837BE400B792F2 /* XPTreasureFailyPrizeGiftView.m in Sources */, @@ -10746,6 +10883,7 @@ 9B0086C627BA392B0032BD2B /* AnchorStageView.m in Sources */, 9BCD02C72796C02800F396AA /* MicroNobleWaveView.m in Sources */, E874B88827215D39003954B9 /* MicroStateModel.m in Sources */, + 23E9EABB2A84CCBE00B792F2 /* XPMineDataSkillDataCollectionViewCell.m in Sources */, E877A7F427842EF800EFACED /* XPRoomDatingVipUpMicView.m in Sources */, E896EF9F2771AE7B00AD2CC1 /* XPMineAttentionViewController.m in Sources */, E89D60C1271D64B9001F8895 /* RoomInfoModel.m in Sources */, diff --git a/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@2x.png b/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@2x.png index 816cd22a..1dab13a1 100644 Binary files a/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@2x.png and b/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@2x.png differ diff --git a/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@3x.png b/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@3x.png index 88d813a4..2b961e15 100644 Binary files a/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@3x.png and b/YuMi/Assets.xcassets/Monents/monents_info_top.imageset/monents_info_top@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/Contents.json b/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/Contents.json new file mode 100644 index 00000000..75155bc4 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_guild_close@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_guild_close@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/mine_guild_close@2x.png b/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/mine_guild_close@2x.png new file mode 100644 index 00000000..b4f478d2 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/mine_guild_close@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/mine_guild_close@3x.png b/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/mine_guild_close@3x.png new file mode 100644 index 00000000..79dd8e91 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/Guild/mine_guild_close.imageset/mine_guild_close@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/Contents.json b/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/Contents.json new file mode 100644 index 00000000..2ede9f04 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_info_close@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_info_close@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/mine_info_close@2x.png b/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/mine_info_close@2x.png new file mode 100644 index 00000000..ca548ce5 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/mine_info_close@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/mine_info_close@3x.png b/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/mine_info_close@3x.png new file mode 100644 index 00000000..949eca43 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/Guild/mine_info_close.imageset/mine_info_close@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/Contents.json b/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/Contents.json new file mode 100644 index 00000000..d0b016a1 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_info_paly@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_info_paly@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/mine_info_paly@2x.png b/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/mine_info_paly@2x.png new file mode 100644 index 00000000..fcb55780 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/mine_info_paly@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/mine_info_paly@3x.png b/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/mine_info_paly@3x.png new file mode 100644 index 00000000..2356d948 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/Guild/mine_info_paly.imageset/mine_info_paly@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/Contents.json new file mode 100644 index 00000000..60e20bf9 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/mine_recorded_sound_bg@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/mine_recorded_sound_bg@2x.png new file mode 100644 index 00000000..b63c1e8a Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/mine_recorded_sound_bg@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/mine_recorded_sound_bg@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/mine_recorded_sound_bg@3x.png new file mode 100644 index 00000000..bf4a021e Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_bg.imageset/mine_recorded_sound_bg@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/Contents.json new file mode 100644 index 00000000..34ad914d --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_completed@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_completed@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/mine_recorded_sound_completed@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/mine_recorded_sound_completed@2x.png new file mode 100644 index 00000000..a5acd8da Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/mine_recorded_sound_completed@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/mine_recorded_sound_completed@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/mine_recorded_sound_completed@3x.png new file mode 100644 index 00000000..0789c37c Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completed.imageset/mine_recorded_sound_completed@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/Contents.json new file mode 100644 index 00000000..5afa3711 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_completeding@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_completeding@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/mine_recorded_sound_completeding@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/mine_recorded_sound_completeding@2x.png new file mode 100644 index 00000000..69573bce Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/mine_recorded_sound_completeding@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/mine_recorded_sound_completeding@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/mine_recorded_sound_completeding@3x.png new file mode 100644 index 00000000..ade5e8e5 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_completeding.imageset/mine_recorded_sound_completeding@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/Contents.json new file mode 100644 index 00000000..db376936 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_del@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_del@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/mine_recorded_sound_del@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/mine_recorded_sound_del@2x.png new file mode 100644 index 00000000..0b7b275a Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/mine_recorded_sound_del@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/mine_recorded_sound_del@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/mine_recorded_sound_del@3x.png new file mode 100644 index 00000000..8320b2b5 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_del.imageset/mine_recorded_sound_del@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/Contents.json new file mode 100644 index 00000000..946d1748 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_mic@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_mic@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/mine_recorded_sound_mic@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/mine_recorded_sound_mic@2x.png new file mode 100644 index 00000000..07f9c0ce Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/mine_recorded_sound_mic@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/mine_recorded_sound_mic@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/mine_recorded_sound_mic@3x.png new file mode 100644 index 00000000..ba95f75e Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_mic.imageset/mine_recorded_sound_mic@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/Contents.json new file mode 100644 index 00000000..c18b7d14 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_recording@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_recording@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/mine_recorded_sound_recording@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/mine_recorded_sound_recording@2x.png new file mode 100644 index 00000000..385aa66d Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/mine_recorded_sound_recording@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/mine_recorded_sound_recording@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/mine_recorded_sound_recording@3x.png new file mode 100644 index 00000000..10fff9a1 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_recording.imageset/mine_recorded_sound_recording@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/Contents.json new file mode 100644 index 00000000..7dea5d67 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_rerecord@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_rerecord@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/mine_recorded_sound_rerecord@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/mine_recorded_sound_rerecord@2x.png new file mode 100644 index 00000000..1a490448 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/mine_recorded_sound_rerecord@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/mine_recorded_sound_rerecord@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/mine_recorded_sound_rerecord@3x.png new file mode 100644 index 00000000..be1c997d Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_rerecord.imageset/mine_recorded_sound_rerecord@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/Contents.json new file mode 100644 index 00000000..101b0b30 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_save@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_save@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/mine_recorded_sound_save@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/mine_recorded_sound_save@2x.png new file mode 100644 index 00000000..974252ec Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/mine_recorded_sound_save@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/mine_recorded_sound_save@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/mine_recorded_sound_save@3x.png new file mode 100644 index 00000000..1b30019a Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_save.imageset/mine_recorded_sound_save@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/Contents.json b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/Contents.json new file mode 100644 index 00000000..e4bd64fd --- /dev/null +++ b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_recorded_sound_start_record@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_recorded_sound_start_record@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/mine_recorded_sound_start_record@2x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/mine_recorded_sound_start_record@2x.png new file mode 100644 index 00000000..3d414c84 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/mine_recorded_sound_start_record@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/mine_recorded_sound_start_record@3x.png b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/mine_recorded_sound_start_record@3x.png new file mode 100644 index 00000000..76f18d60 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/RecordedSound/mine_recorded_sound_start_record.imageset/mine_recorded_sound_start_record@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/gift_list_one.imageset/Contents.json b/YuMi/Assets.xcassets/jm/gift_list_one.imageset/Contents.json new file mode 100644 index 00000000..a592ebdf --- /dev/null +++ b/YuMi/Assets.xcassets/jm/gift_list_one.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gift_list_one@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gift_list_one@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/gift_list_one.imageset/gift_list_one@2x.png b/YuMi/Assets.xcassets/jm/gift_list_one.imageset/gift_list_one@2x.png new file mode 100644 index 00000000..3baf824c Binary files /dev/null and b/YuMi/Assets.xcassets/jm/gift_list_one.imageset/gift_list_one@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/gift_list_one.imageset/gift_list_one@3x.png b/YuMi/Assets.xcassets/jm/gift_list_one.imageset/gift_list_one@3x.png new file mode 100644 index 00000000..c5a561e9 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/gift_list_one.imageset/gift_list_one@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/gift_list_three.imageset/Contents.json b/YuMi/Assets.xcassets/jm/gift_list_three.imageset/Contents.json new file mode 100644 index 00000000..69d4cc38 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/gift_list_three.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gift_list_three@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gift_list_three@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/gift_list_three.imageset/gift_list_three@2x.png b/YuMi/Assets.xcassets/jm/gift_list_three.imageset/gift_list_three@2x.png new file mode 100644 index 00000000..d0438bab Binary files /dev/null and b/YuMi/Assets.xcassets/jm/gift_list_three.imageset/gift_list_three@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/gift_list_three.imageset/gift_list_three@3x.png b/YuMi/Assets.xcassets/jm/gift_list_three.imageset/gift_list_three@3x.png new file mode 100644 index 00000000..16c45792 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/gift_list_three.imageset/gift_list_three@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/gift_list_two.imageset/Contents.json b/YuMi/Assets.xcassets/jm/gift_list_two.imageset/Contents.json new file mode 100644 index 00000000..61b94743 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/gift_list_two.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "gift_list_two@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "gift_list_two@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/gift_list_two.imageset/gift_list_two@2x.png b/YuMi/Assets.xcassets/jm/gift_list_two.imageset/gift_list_two@2x.png new file mode 100644 index 00000000..e0916bc3 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/gift_list_two.imageset/gift_list_two@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/gift_list_two.imageset/gift_list_two@3x.png b/YuMi/Assets.xcassets/jm/gift_list_two.imageset/gift_list_two@3x.png new file mode 100644 index 00000000..f70beee7 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/gift_list_two.imageset/gift_list_two@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@2x.png b/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@2x.png index 21a18bd0..c53f5466 100644 Binary files a/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@2x.png and b/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@3x.png b/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@3x.png index 565bc4cd..c7494856 100644 Binary files a/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@3x.png and b/YuMi/Assets.xcassets/jm/mine_album_reviewing.imageset/album_reviewing@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/Contents.json b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/Contents.json index aa78fb17..384ec256 100644 --- a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/Contents.json +++ b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/Contents.json @@ -5,12 +5,12 @@ "scale" : "1x" }, { - "filename" : "avatar_reviewing@2x.png", + "filename" : "mine_avatar_reviewing@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "avatar_reviewing@3x.png", + "filename" : "mine_avatar_reviewing@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/avatar_reviewing@2x.png b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/avatar_reviewing@2x.png deleted file mode 100644 index 94117eb5..00000000 Binary files a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/avatar_reviewing@2x.png and /dev/null differ diff --git a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/avatar_reviewing@3x.png b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/avatar_reviewing@3x.png deleted file mode 100644 index 0bf699e5..00000000 Binary files a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/avatar_reviewing@3x.png and /dev/null differ diff --git a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/mine_avatar_reviewing@2x.png b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/mine_avatar_reviewing@2x.png new file mode 100644 index 00000000..9c685c1c Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/mine_avatar_reviewing@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/mine_avatar_reviewing@3x.png b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/mine_avatar_reviewing@3x.png new file mode 100644 index 00000000..afbb9569 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_avatar_reviewing.imageset/mine_avatar_reviewing@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/Contents.json b/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/Contents.json new file mode 100644 index 00000000..f0eb62ed --- /dev/null +++ b/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_info_tag_del@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_info_tag_del@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/mine_info_tag_del@2x.png b/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/mine_info_tag_del@2x.png new file mode 100644 index 00000000..ccf42436 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/mine_info_tag_del@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/mine_info_tag_del@3x.png b/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/mine_info_tag_del@3x.png new file mode 100644 index 00000000..6bcc6c0e Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_info_tag_del.imageset/mine_info_tag_del@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/Contents.json b/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/Contents.json new file mode 100644 index 00000000..ce07d5d1 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_item_sound@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_item_sound@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/mine_item_sound@2x.png b/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/mine_item_sound@2x.png new file mode 100644 index 00000000..aca880cc Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/mine_item_sound@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/mine_item_sound@3x.png b/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/mine_item_sound@3x.png new file mode 100644 index 00000000..de185d4e Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_item_sound.imageset/mine_item_sound@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/Contents.json b/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/Contents.json new file mode 100644 index 00000000..b526c0c0 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_user_info_head_edit@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_user_info_head_edit@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/mine_user_info_head_edit@2x.png b/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/mine_user_info_head_edit@2x.png new file mode 100644 index 00000000..1722b3eb Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/mine_user_info_head_edit@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/mine_user_info_head_edit@3x.png b/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/mine_user_info_head_edit@3x.png new file mode 100644 index 00000000..0ef1cd9c Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_user_info_head_edit.imageset/mine_user_info_head_edit@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/Contents.json b/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/Contents.json new file mode 100644 index 00000000..30706885 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "mine_userinfo_header_bg@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "mine_userinfo_header_bg@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/mine_userinfo_header_bg@2x.png b/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/mine_userinfo_header_bg@2x.png new file mode 100644 index 00000000..c6f782e8 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/mine_userinfo_header_bg@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/mine_userinfo_header_bg@3x.png b/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/mine_userinfo_header_bg@3x.png new file mode 100644 index 00000000..857aee62 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/mine_userinfo_header_bg.imageset/mine_userinfo_header_bg@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@2x.png b/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@2x.png index de9a9286..771b4b32 100644 Binary files a/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@2x.png and b/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@3x.png b/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@3x.png index fb4d1245..e1f205d2 100644 Binary files a/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@3x.png and b/YuMi/Assets.xcassets/jm/mine_userinfo_header_shadow_bg.imageset/mine_userinfo_header_shadow_bg@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/Contents.json b/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/Contents.json new file mode 100644 index 00000000..45919155 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "user_card_copy_id@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "user_card_copy_id@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/user_card_copy_id@2x.png b/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/user_card_copy_id@2x.png new file mode 100644 index 00000000..c0fd3010 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/user_card_copy_id@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/user_card_copy_id@3x.png b/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/user_card_copy_id@3x.png new file mode 100644 index 00000000..9e2b7bd9 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/user_card_copy_id.imageset/user_card_copy_id@3x.png differ diff --git a/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/Contents.json b/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/Contents.json new file mode 100644 index 00000000..8ed7a175 --- /dev/null +++ b/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "user_card_copy_id1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "user_card_copy_id1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/user_card_copy_id1@2x.png b/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/user_card_copy_id1@2x.png new file mode 100644 index 00000000..90b77bf3 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/user_card_copy_id1@2x.png differ diff --git a/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/user_card_copy_id1@3x.png b/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/user_card_copy_id1@3x.png new file mode 100644 index 00000000..f702f6c9 Binary files /dev/null and b/YuMi/Assets.xcassets/jm/user_card_copy_id1.imageset/user_card_copy_id1@3x.png differ diff --git a/YuMi/CustomUI/TTPopup/View/TTNewAlertView.h b/YuMi/CustomUI/TTPopup/View/TTNewAlertView.h new file mode 100644 index 00000000..0fadf882 --- /dev/null +++ b/YuMi/CustomUI/TTPopup/View/TTNewAlertView.h @@ -0,0 +1,20 @@ +// +// TTNewAlertView.h +// xplan-ios +// +// Created by duoban on 2023/1/9. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + + + +@interface TTNewAlertView : UIView +@property (nonatomic,copy) NSString *message; +@property (nonatomic, copy) TTPopupCompletionHandler confirmHandle; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/TTPopup/View/TTNewAlertView.m b/YuMi/CustomUI/TTPopup/View/TTNewAlertView.m new file mode 100644 index 00000000..532ec03b --- /dev/null +++ b/YuMi/CustomUI/TTPopup/View/TTNewAlertView.m @@ -0,0 +1,118 @@ +// +// TTNewAlertView.m +// xplan-ios +// +// Created by duoban on 2023/1/9. +// + +#import "TTNewAlertView.h" +@interface TTNewAlertView() +@property (nonatomic,strong) UIView *bgView; +@property (nonatomic,strong) UILabel *messageView; +@property (nonatomic,strong) UIButton *confirmBtn; +@property (nonatomic,strong) UIButton *cancelBtn; +@end +@implementation TTNewAlertView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor clearColor]; + [self addSubview:self.bgView]; + [self.bgView addSubview:self.messageView]; + [self.bgView addSubview:self.confirmBtn]; + [self.bgView addSubview:self.cancelBtn]; +} +- (void)initSubViewConstraints { + [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(kGetScaleWidth(310)); + make.height.mas_equalTo(kGetScaleWidth(149)); + make.center.equalTo(self); + }]; + + + [self.confirmBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(110)); + make.height.mas_equalTo(kGetScaleWidth(37)); + make.left.mas_equalTo(kGetScaleWidth(31)); + make.bottom.mas_equalTo(-kGetScaleWidth(31)); + }]; + + [self.cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.centerY.equalTo(self.confirmBtn); + make.right.mas_equalTo(-kGetScaleWidth(31)); + }]; + + [self.messageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kGetScaleWidth(25)); + make.centerX.equalTo(self); + make.left.right.equalTo(self).inset(kGetScaleWidth(10)); + }]; + + + +} +-(void)setMessage:(NSString *)message{ + _message = message; + _messageView.text = message; +} +-(void)confirmAction{ + [TTPopup dismiss]; + if(self.confirmHandle){ + self.confirmHandle(); + } +} +-(void)cancelAction{ + [TTPopup dismiss]; +} + +#pragma mark -懒加载 + +- (UIView *)bgView{ + if (!_bgView){ + _bgView = [UIView new]; + _bgView.backgroundColor = [UIColor whiteColor]; + [_bgView setCornerWithLeftTopCorner:kGetScaleWidth(12) rightTopCorner:kGetScaleWidth(12) bottomLeftCorner:kGetScaleWidth(12) bottomRightCorner:kGetScaleWidth(12) size:CGSizeMake(kGetScaleWidth(310), kGetScaleWidth(149))]; + } + return _bgView; +} +- (UILabel *)messageView{ + if (!_messageView){ + _messageView = [UILabel labelInitWithText:@"" font:kFontRegular(15) textColor:[DJDKMIMOMColor inputTextColor]]; + _messageView.textAlignment = NSTextAlignmentCenter; + _messageView.numberOfLines = 0; + } + return _messageView; +} +-(UIButton *)confirmBtn{ + if (!_confirmBtn){ + _confirmBtn = [UIButton new]; + [_confirmBtn setTitle:YMLocalizedString(@"XPGiftBarView6") forState:UIControlStateNormal]; + _confirmBtn.backgroundColor = UIColorFromRGB(0xE6E6F0); + _confirmBtn.layer.cornerRadius = kGetScaleWidth(37)/2; + _confirmBtn.layer.masksToBounds = YES; + [_confirmBtn addTarget:self action:@selector(confirmAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _confirmBtn; +} +-(UIButton *)cancelBtn{ + if (!_cancelBtn){ + _cancelBtn = [UIButton new]; + [_cancelBtn setTitle:YMLocalizedString(@"XPShareView7") forState:UIControlStateNormal]; + UIImage *image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(kGetScaleWidth(110), kGetScaleWidth(37))]; + _cancelBtn.backgroundColor = [UIColor colorWithPatternImage:image]; + _cancelBtn.layer.cornerRadius = kGetScaleWidth(37)/2; + _cancelBtn.layer.masksToBounds = YES; + [_cancelBtn addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _cancelBtn; +} +@end diff --git a/YuMi/CustomUI/XNDJTDDLoadingTool.h b/YuMi/CustomUI/XNDJTDDLoadingTool.h index 128b2bae..c1216a1a 100644 --- a/YuMi/CustomUI/XNDJTDDLoadingTool.h +++ b/YuMi/CustomUI/XNDJTDDLoadingTool.h @@ -29,6 +29,12 @@ NS_ASSUME_NONNULL_BEGIN */ + (void)hideHUDInView:(nullable UIView *)view; + ++(void)hideOnlyView:(UIView *)view; ++(void)showOnlyView:(UIView *)view; + + + /** 显示成功message, 默认显示在窗口上, 2.5s后消失, 默认不拦截点击事件 diff --git a/YuMi/CustomUI/XNDJTDDLoadingTool.m b/YuMi/CustomUI/XNDJTDDLoadingTool.m index 86dcf537..b93a2a07 100644 --- a/YuMi/CustomUI/XNDJTDDLoadingTool.m +++ b/YuMi/CustomUI/XNDJTDDLoadingTool.m @@ -9,8 +9,8 @@ #import "XNDJTDDLoadingTool.h" #import "GCDHelper.h" #import -#import "DJDKMIMOMColor.h" -#import "ClientConfig.h" +#import "MvpViewController.h" +#import #define kDelayTime 2.5 @interface XNDJTDDLoadingTool () @@ -30,13 +30,45 @@ static NSArray * _animationImages = nil; + (void)hideHUDInView:(nullable UIView *)view { dispatch_main_sync_safe(^{ if (view) { - [MBProgressHUD hideHUDForView:view animated:NO]; - [MBProgressHUD hideHUDForView:[UIApplication sharedApplication].keyWindow animated:NO]; + MBProgressHUD *hud = [XNDJTDDLoadingTool HUDForView:view]; + + if (hud != nil && hud.mode != MBProgressHUDModeText) { + hud.removeFromSuperViewOnHide = YES; + [hud hideAnimated:NO]; + } + MBProgressHUD *windowHud = [XNDJTDDLoadingTool HUDForView:kWindow]; + if (windowHud != nil && windowHud.mode != MBProgressHUDModeText) { + windowHud.removeFromSuperViewOnHide = YES; + [windowHud hideAnimated:NO]; + } } else { - [MBProgressHUD hideHUDForView:[UIApplication sharedApplication].keyWindow animated:NO]; + MBProgressHUD *windowHud = [XNDJTDDLoadingTool HUDForView:kWindow]; + if (windowHud != nil && windowHud.mode != MBProgressHUDModeText) { + windowHud.removeFromSuperViewOnHide = YES; + [windowHud hideAnimated:NO]; + } } }); } + + ++ (MBProgressHUD *)HUDForView:(UIView *)view { + NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator]; + for (UIView *subview in subviewsEnum) { + if ([subview isKindOfClass:[MBProgressHUD class]]) { + MBProgressHUD *hud = (MBProgressHUD *)subview; + id hasFinished = [hud valueForKey:@"hasFinished"]; + if (hasFinished != nil) { + if([hasFinished boolValue] == NO){ + return hud; + } + + } + } + } + return nil; +} + /** 隐藏HUD */ @@ -150,6 +182,8 @@ static NSArray * _animationImages = nil; * 在窗口上显示菊花 */ + (void)showLoading { + [self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow]; + return; [self showLoadingInView:[UIApplication sharedApplication].keyWindow]; } @@ -157,6 +191,8 @@ static NSArray * _animationImages = nil; * 在view上显示菊花 */ + (void)showLoadingInView:(nullable UIView *)view { + [self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow]; + return; [self showLoadingInView:view enabled:YES]; } @@ -164,6 +200,8 @@ static NSArray * _animationImages = nil; * 在view上显示菊花 */ + (void)showLoadingInView:(nullable UIView *)view enabled:(BOOL)enabled { + [self showGIFLoadingInView:[UIApplication sharedApplication].keyWindow]; + return; [self showLoadingWithMessage:@"" inView:view enabled:enabled]; } @@ -171,6 +209,7 @@ static NSArray * _animationImages = nil; * 在窗口上显示菊花+文字 */ + (void)showLoadingWithMessage:(NSString *)message { + [self showLoadingWithMessage:message inView:[UIApplication sharedApplication].keyWindow]; } @@ -178,6 +217,7 @@ static NSArray * _animationImages = nil; * 在view上显示菊花+文字 */ + (void)showLoadingWithMessage:(NSString *)message inView:(nullable UIView *)view { + [self showLoadingWithMessage:message inView:view enabled:YES]; } @@ -185,6 +225,8 @@ static NSArray * _animationImages = nil; * 在view上显示菊花+文字 */ + (void)showLoadingWithMessage:(NSString *)message inView:(nullable UIView *)view enabled:(BOOL)enabled { + + if (!view) { view = [UIApplication sharedApplication].keyWindow; } @@ -235,10 +277,9 @@ static NSArray * _animationImages = nil; dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; - hud.minSize = CGSizeMake(168, 133); - hud.userInteractionEnabled = enabled; + hud.minSize = CGSizeMake(100, 150); + hud.userInteractionEnabled = NO; hud.mode = MBProgressHUDModeCustomView; - hud.minSize = CGSizeMake(150, 150); [hud.bezelView addSubview:[self loadingView]]; hud.backgroundColor = bgColor; hud.bezelView.color = [UIColor clearColor]; @@ -248,33 +289,32 @@ static NSArray * _animationImages = nil; + (void)showAnchorLoading { - if (![ClientConfig shareConfig].canOpen) { - return; - } + UIView *view = [UIApplication sharedApplication].delegate.window; dispatch_main_sync_safe(^{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; hud.userInteractionEnabled = NO; hud.mode = MBProgressHUDModeCustomView; - hud.minSize = CGSizeMake(100, 100 + 16 + 30); - [hud.bezelView addSubview:[self anchorSwitchLoadingView]]; + hud.minSize = CGSizeMake(100, 150); + [hud.bezelView addSubview:[self loadingView ]]; hud.bezelView.color = [UIColor clearColor]; hud.removeFromSuperViewOnHide = YES; }); } + (void)showAnchorLoading:(UIView *)view { - dispatch_main_sync_safe(^{ - MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; - hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; - hud.userInteractionEnabled = NO; - hud.mode = MBProgressHUDModeCustomView; - hud.minSize = CGSizeMake(100, 100 + 16 + 30); - [hud.bezelView addSubview:[self anchorSwitchLoadingView]]; - hud.bezelView.color = [UIColor clearColor]; - hud.removeFromSuperViewOnHide = YES; - }); + + dispatch_main_sync_safe(^{ + MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; + hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; + hud.userInteractionEnabled = NO; + hud.mode = MBProgressHUDModeCustomView; + hud.minSize = CGSizeMake(100, 150); + [hud.bezelView addSubview:[self loadingView ]]; + hud.bezelView.color = [UIColor clearColor]; + hud.removeFromSuperViewOnHide = YES; + }); } #pragma mark - private @@ -287,104 +327,69 @@ static NSArray * _animationImages = nil; + (UIView *)loadingView { - UIView *loadingBGView = [[UIView alloc] init]; - loadingBGView.layer.cornerRadius = 20; - loadingBGView.backgroundColor = [UIColor whiteColor]; - UIImageView *loadingImageView = [[UIImageView alloc] init]; - - UILabel *loadingTitleLabel = [[UILabel alloc] init]; - loadingTitleLabel = [[UILabel alloc] init]; - loadingTitleLabel.textColor = [UIColor colorWithRed:(153.0)/255.0f green:(153.0)/255.0f blue:(153.0)/255.0f alpha:1]; - loadingTitleLabel.font = [UIFont systemFontOfSize:14]; - loadingTitleLabel.text = YMLocalizedString(@"XNDJTDDLoadingTool0"); - loadingTitleLabel.textAlignment = NSTextAlignmentCenter; - - [loadingBGView addSubview:loadingImageView]; - [loadingBGView addSubview:loadingTitleLabel]; - - loadingBGView.frame = CGRectMake(0,0,120,120); - loadingImageView.frame = CGRectMake((CGRectGetWidth(loadingBGView.frame)-80)/ 2, 10, 80, 80); - loadingTitleLabel.frame = CGRectMake(0, CGRectGetMaxY(loadingImageView.frame) + 8, loadingBGView.frame.size.width, 15); - - loadingImageView.animationImages = [self loadingAnchorAnimationImages]; - [loadingImageView startAnimating]; - return loadingBGView; + UIView *bgView = [UIView new]; + bgView.backgroundColor = [UIColor clearColor]; + bgView.frame = CGRectMake(0, 0, 100, 150); + SVGAParser *parser = [[SVGAParser alloc]init]; + SVGAImageView* playView = [[SVGAImageView alloc]init]; + playView.contentMode = UIViewContentModeScaleAspectFit; + playView.frame = CGRectMake(0, 0, 100,150); + playView.backgroundColor = [UIColor clearColor]; + playView.userInteractionEnabled = NO; + + [parser parseWithNamed:@"pi_new_loading" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { + + playView.layer.masksToBounds = YES; + playView.contentMode = UIViewContentModeScaleAspectFill; + + + playView.videoItem = videoItem; + [playView startAnimation]; + } failureBlock:^(NSError * _Nonnull error) { + + }]; + + [bgView addSubview:playView]; + + return bgView; } -+ (NSArray *)loadingAnimationImages { - - if (XNDJTDDLoadingTool.animationImages.count > 0) { - return XNDJTDDLoadingTool.animationImages; - } - NSString * countString = @"00"; - NSMutableArray * imageArray= [NSMutableArray array]; - for (int i = 0; i <= 27; i++) { - if (i < 10) { - countString = [NSString stringWithFormat:@"0%d", i]; - } else { - countString = [NSString stringWithFormat:@"%d", i]; - } - NSString * loadingImageName = [NSString stringWithFormat:@"loading_0%@", countString]; - UIImage * image = [UIImage imageNamed:loadingImageName]; - [imageArray addObject:image]; - } - NSArray * array = [imageArray copy]; - [XNDJTDDLoadingTool setAnimationImages:array]; - return array; -} -+ (UIView *)anchorSwitchLoadingView { - UIView *loadingBGView = [[UIView alloc] init]; - loadingBGView.layer.cornerRadius = 20; - loadingBGView.backgroundColor = [UIColor clearColor]; - UIImageView *loadingImageView = [[UIImageView alloc] init]; - - UILabel *loadingTitleLabel = [[UILabel alloc] init]; - loadingTitleLabel = [[UILabel alloc] init]; - loadingTitleLabel.textColor = UIColorFromRGB(0xC9BCF2); - loadingTitleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium]; - loadingTitleLabel.text = YMLocalizedString(@"XNDJTDDLoadingTool0"); - loadingTitleLabel.textAlignment = NSTextAlignmentCenter; - - [loadingBGView addSubview:loadingImageView]; - [loadingBGView addSubview:loadingTitleLabel]; - - loadingBGView.frame = CGRectMake(0,0,100,100 + 16 + 30); - loadingImageView.frame = CGRectMake(0, 0, 100, 100); - loadingTitleLabel.frame = CGRectMake(0, CGRectGetMaxY(loadingImageView.frame) + 8, loadingBGView.frame.size.width, 15); - loadingImageView.animationImages = [self loadingAnchorAnimationImages]; - [loadingImageView startAnimating]; - return loadingBGView; -} -+ (NSArray *)loadingAnchorAnimationImages { - NSString * countString = @"00"; - NSMutableArray * imageArray= [NSMutableArray array]; - for (int i = 0; i <= 47; i++) { - if (i < 10) { - countString = [NSString stringWithFormat:@"0%d", i]; - } else { - countString = [NSString stringWithFormat:@"%d", i]; ++(void)hideOnlyView:(UIView *)view{ + + dispatch_main_sync_safe(^{ + if (view) { + UIView *getView; + if([view isKindOfClass:[MvpViewController class]]){ + getView = ((MvpViewController *)view).view; + }else{ + getView = view; + } + MBProgressHUD *hud = [XNDJTDDLoadingTool HUDForView:getView]; + if (hud != nil && hud.mode != MBProgressHUDModeText) { + hud.removeFromSuperViewOnHide = YES; + [hud hideAnimated:NO]; + } } - NSString * loadingImageName = [NSString stringWithFormat:@"anchorLoading_0%@", countString]; - UIImage * image = [UIImage imageNamed:loadingImageName]; - [imageArray addObject:image]; + }); +} ++(void)showOnlyView:(UIView *)view{ + if (!view) { + view = [UIApplication sharedApplication].keyWindow; } - NSArray * array = [imageArray copy]; - return array; -} - -+ (NSArray *)animationImages { - if (_animationImages == nil) { - _animationImages = [NSArray array]; - } - return _animationImages; -} - -+ (void)setAnimationImages:(NSArray *)animationImages { - if (animationImages != _animationImages) { - _animationImages = animationImages; - } + [self hideOnlyView:view]; + dispatch_main_sync_safe(^{ + MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; + hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor; + hud.minSize = CGSizeMake(100, 150); + hud.userInteractionEnabled = NO; + hud.mode = MBProgressHUDModeCustomView; + [hud.bezelView addSubview:[self loadingView]]; + hud.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.35]; + hud.bezelView.color = [UIColor clearColor]; + hud.removeFromSuperViewOnHide = YES; + }); } diff --git a/YuMi/Modules/YMMine/Api/Api+Mine.h b/YuMi/Modules/YMMine/Api/Api+Mine.h index dc822bb0..8daa4db1 100644 --- a/YuMi/Modules/YMMine/Api/Api+Mine.h +++ b/YuMi/Modules/YMMine/Api/Api+Mine.h @@ -304,14 +304,37 @@ NS_ASSUME_NONNULL_BEGIN /// @param ticket ticket + (void)setPayPassword:(HttpRequestHelperCompletion)completion newPasswd:(NSString *)newPasswd uid:(NSString *)uid ticket:(NSString *)ticket; -+(void)requestQueryWithRoomType:(HttpRequestHelperCompletion)completion; + ///收益记录 +(void)requestRecordIncome:(HttpRequestHelperCompletion)completion; ///得到兑换界面信息 +(void)getExchangeDiamondInformation:(HttpRequestHelperCompletion)completion; +(void)confirmExchangeDiamond:(HttpRequestHelperCompletion)completion goldNum:(NSString *)goldNum diamondNum:(NSString *)diamondNum currency:(NSString *)currency; +/// 得到声音卡信息 +/// - Parameters: +/// - completion: 完成 +/// - uid: 用户id ++(void)getSoundCardInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid; +/// 保存声音卡信息 +/// - Parameters: +/// - completion: 完成 +/// - audioUrl: 声音链接 +/// - second: 秒数 ++(void)saveSoundCardInfo:(HttpRequestHelperCompletion)completion audioUrl:(NSString *)audioUrl second:(NSString *)second; +///删除声音卡 ++(void)deleteSoundCardInfo:(HttpRequestHelperCompletion)completion; +///得到个人简介标签 ++(void)getTagList:(HttpRequestHelperCompletion)completion; +///保存个人简介标签 ++(void)saveTagList:(HttpRequestHelperCompletion)completion labels:(NSString *)labels; +//////获取地区列表 ++(void)getAreaList:(HttpRequestHelperCompletion)completion; +///保存地区列表 ++(void)saveAreaConfigWithArea:(HttpRequestHelperCompletion)completion region:(NSString *)region; +/// ++(void)requestQueryWithRoomType:(HttpRequestHelperCompletion)completion; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Api/Api+Mine.m b/YuMi/Modules/YMMine/Api/Api+Mine.m index 0c99e011..ccd51b52 100644 --- a/YuMi/Modules/YMMine/Api/Api+Mine.m +++ b/YuMi/Modules/YMMine/Api/Api+Mine.m @@ -405,5 +405,39 @@ NSString * fang = [NSString stringFromBase64String:@"Z29sZEV4Y2hhbmdlRGlhbW9uZC9leGNoYW5nZQ=="];///goldExchangeDiamond/exchange [self makeRequest:fang method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__,goldNum,diamondNum,currency, nil]; } +/// 得到声音卡信息 +/// - Parameters: +/// - completion: 完成 +/// - uid: 用户id ++(void)getSoundCardInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid{ + [self makeRequest:@"audioCard/get" method:HttpRequestHelperMethodGET completion:completion,__FUNCTION__,uid, nil]; +} +/// 保存声音卡信息 +/// - Parameters: +/// - completion: 完成 +/// - audioUrl: 声音链接 +/// - second: 秒数 ++(void)saveSoundCardInfo:(HttpRequestHelperCompletion)completion audioUrl:(NSString *)audioUrl second:(NSString *)second{ + [self makeRequest:@"audioCard/save" method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__,audioUrl,second, nil]; +} +///删除声音卡 ++(void)deleteSoundCardInfo:(HttpRequestHelperCompletion)completion{ + [self makeRequest:@"audioCard/del" method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__, nil]; +} ++(void)getTagList:(HttpRequestHelperCompletion)completion{ + [self makeRequest:@"label/edit" method:HttpRequestHelperMethodGET completion:completion,__FUNCTION__, nil]; +} +///保存个人简介标签 ++(void)saveTagList:(HttpRequestHelperCompletion)completion labels:(NSString *)labels{ + [self makeRequest:@"label/save" method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__,labels, nil]; +} +//////获取地区列表 ++(void)getAreaList:(HttpRequestHelperCompletion)completion{ + [self makeRequest:@"region/config" method:HttpRequestHelperMethodGET completion:completion,__FUNCTION__, nil]; +} +///保存地区列表 ++(void)saveAreaConfigWithArea:(HttpRequestHelperCompletion)completion region:(NSString *)region{ + [self makeRequest:@"region/save" method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__,region, nil]; +} @end diff --git a/YuMi/Modules/YMMine/Model/UserInfo/XPMineUserInfoTagModel.h b/YuMi/Modules/YMMine/Model/UserInfo/XPMineUserInfoTagModel.h new file mode 100644 index 00000000..5434d27c --- /dev/null +++ b/YuMi/Modules/YMMine/Model/UserInfo/XPMineUserInfoTagModel.h @@ -0,0 +1,40 @@ +// +// XPMineUserInfoTagModel.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineUserInfoTagModel : NSObject +/// +@property (nonatomic,copy) NSArray *groups; +/// +@property (nonatomic,copy) NSArray *labels; +/// +@property (nonatomic,copy) NSArray *meLabels; + + + +@end + + +@interface XPMineUserInfoTagItemModel : NSObject +/// +@property (nonatomic,copy) NSString *group; +/// +@property (nonatomic,copy) NSString *label; +/// +@property (nonatomic,assign) BOOL picked; +/// +@property (nonatomic,assign) CGFloat width; + +/// +@property (nonatomic,assign) BOOL isNoChooseTag; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Model/UserInfo/XPMineUserInfoTagModel.m b/YuMi/Modules/YMMine/Model/UserInfo/XPMineUserInfoTagModel.m new file mode 100644 index 00000000..003731b0 --- /dev/null +++ b/YuMi/Modules/YMMine/Model/UserInfo/XPMineUserInfoTagModel.m @@ -0,0 +1,21 @@ +// +// XPMineUserInfoTagModel.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import "XPMineUserInfoTagModel.h" + +@implementation XPMineUserInfoTagModel ++ (NSDictionary *)objectClassInArray{ + return @{ + @"labels":XPMineUserInfoTagItemModel.class + }; +} +@end + + +@implementation XPMineUserInfoTagItemModel + +@end diff --git a/YuMi/Modules/YMMine/Model/UserInfo/XPSoundCardModel.h b/YuMi/Modules/YMMine/Model/UserInfo/XPSoundCardModel.h new file mode 100644 index 00000000..98f1e547 --- /dev/null +++ b/YuMi/Modules/YMMine/Model/UserInfo/XPSoundCardModel.h @@ -0,0 +1,22 @@ +// +// XPSoundCardModel.h +// xplan-ios +// +// Created by duoban on 2023/1/4. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPSoundCardModel : NSObject +@property (nonatomic,copy) NSString *uid; +//音频七牛云url +@property (nonatomic,copy) NSString *audioUrl; +///录音时间 +@property (nonatomic,assign) NSInteger second; +//0,没录制,1,已上传,2,审核通过,3,审核不通过,4,下架 +@property (nonatomic,assign) int status; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Model/UserInfo/XPSoundCardModel.m b/YuMi/Modules/YMMine/Model/UserInfo/XPSoundCardModel.m new file mode 100644 index 00000000..fb0a4f5c --- /dev/null +++ b/YuMi/Modules/YMMine/Model/UserInfo/XPSoundCardModel.m @@ -0,0 +1,12 @@ +// +// XPSoundCardModel.m +// xplan-ios +// +// Created by duoban on 2023/1/4. +// + +#import "XPSoundCardModel.h" + +@implementation XPSoundCardModel + +@end diff --git a/YuMi/Modules/YMMine/Model/XPMineUserInfoEditModel.h b/YuMi/Modules/YMMine/Model/XPMineUserInfoEditModel.h index 05052d8a..5d313217 100644 --- a/YuMi/Modules/YMMine/Model/XPMineUserInfoEditModel.h +++ b/YuMi/Modules/YMMine/Model/XPMineUserInfoEditModel.h @@ -1,19 +1,22 @@ // -// YMMineUserInfoEditModel.h -// YUMI +// XPMineUserInfoEditModel.h +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSInteger, XPMineUserInfoEditType) { - XPMineUserInfoEditType_Avatar,///头像 - XPMineUserInfoEditType_Nick,///名字 - XPMineUserInfoEditType_Birth,///生日 - XPMineUserInfoEditType_Photo,///相册 - XPMineUserInfoEditType_UseDes,///用户描述 + XPMineUserInfoEditType_Avatar,///头像 + XPMineUserInfoEditType_Nick,///名字 + XPMineUserInfoEditType_Birth,///生日 + XPMineUserInfoEditType_Photo,///相册 + XPMineUserInfoEditType_UseDes,///用户描述 + XPMineUserInfoEditType_Sound,///声音 + XPMineUserInfoEditType_Tag,///标签 + XPMineUserInfoEditType_Area,///地区 }; @interface XPMineUserInfoEditModel : NSObject @@ -30,6 +33,7 @@ typedef NS_ENUM(NSInteger, XPMineUserInfoEditType) { ///相册 @property (nonatomic,copy) NSArray *photoArray; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.h b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.h index f2d61588..3cf1f9af 100644 --- a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.h +++ b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.h @@ -1,12 +1,11 @@ // -// YMMineUserInfoEditPresenter.h -// YUMI +// XPMineUserInfoEditPresenter.h +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import "BaseMvpPresenter.h" - NS_ASSUME_NONNULL_BEGIN @class UserInfoModel; @interface XPMineUserInfoEditPresenter : BaseMvpPresenter @@ -15,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)getUserInfo; ///获取个人资料页编辑的数据源 -- (void)getUserInfoEditDataSourceWithUserInfo:(UserInfoModel *)userInfo; +- (void)getUserInfoEditDataSourceWithUserInfo:(UserInfoModel *)userInfo ; /// 补全资料 /// @param avatar 头像 @@ -23,13 +22,17 @@ NS_ASSUME_NONNULL_BEGIN /// @param birth 生日 /// @param userDesc 用户的签名 - (void)complectionInfoWithAvatar:(NSString * _Nullable)avatar - nick:(NSString * _Nullable)nick - birth:(NSString * _Nullable)birth - userDesc:(NSString * _Nullable)userDesc; + nick:(NSString * _Nullable)nick + birth:(NSString * _Nullable)birth + userDesc:(NSString * _Nullable)userDesc; /// 上传头像 /// @param avatar 头像 - (void)uploadAvatar:(UIImage *)avatar; +///获取地区列表 +-(void)getAreaList; +///保存地区列表 +-(void)saveAreaConfigWithArea:(NSString *)area; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.m b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.m index d3b3d6da..9f02f8eb 100644 --- a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.m +++ b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoEditPresenter.m @@ -1,8 +1,8 @@ // -// YMMineUserInfoEditPresenter.m -// YUMI +// XPMineUserInfoEditPresenter.m +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import "XPMineUserInfoEditPresenter.h" @@ -11,10 +11,10 @@ ///Tool #import "AccountInfoStorage.h" #import "UploadImage.h" -#import "NSMutableDictionary+Saft.h" ///Model #import "XPMineUserInfoEditModel.h" #import "UserInfoModel.h" + ///P #import "XPMineUserInfoEditProtocol.h" @interface XPMineUserInfoEditPresenter () @@ -28,6 +28,13 @@ @property (nonatomic,strong) XPMineUserInfoEditModel *photoItem; ///介绍 @property (nonatomic,strong) XPMineUserInfoEditModel *desItem; +///标签 +@property (nonatomic,strong) XPMineUserInfoEditModel *tagItem; +///地区 +@property (nonatomic,strong) XPMineUserInfoEditModel *areaItem; +///声音 +@property (nonatomic,strong) XPMineUserInfoEditModel *soundItem;; + /// @property (nonatomic,strong) NSMutableArray *editArray; ///日期的格式 @@ -38,37 +45,41 @@ ///获取用户信息 - (void)getUserInfo { - NSString * uid = [AccountInfoStorage instance].getUid; - [Api getUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { - UserInfoModel * infoModel = [UserInfoModel modelWithDictionary:data.data]; - [[self getView] onGetUserInfoSuccess:infoModel]; - }] uid:uid]; + NSString * uid = [AccountInfoStorage instance].getUid; + [Api getUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + UserInfoModel * infoModel = [UserInfoModel modelWithDictionary:data.data]; + [[self getView] onGetUserInfoSuccess:infoModel]; + }] uid:uid]; } ///获取个人资料页编辑的数据源 - (void)getUserInfoEditDataSourceWithUserInfo:(UserInfoModel *)userInfo { - ///数据组装 - if (self.editArray.count <= 0) { - [self.editArray addObject:self.avatarItem]; - [self.editArray addObject:self.nickItem]; - [self.editArray addObject:self.birthItem]; - [self.editArray addObject:self.photoItem]; - [self.editArray addObject:self.desItem]; - } - - + ///数据组装 + if (self.editArray.count <= 0) { + [self.editArray addObject:self.avatarItem]; + [self.editArray addObject:self.nickItem]; + [self.editArray addObject:self.birthItem]; + [self.editArray addObject:self.photoItem]; + [self.editArray addObject:self.areaItem]; + [self.editArray addObject:self.tagItem]; + [self.editArray addObject:self.soundItem]; + [self.editArray addObject:self.desItem]; + + } + + self.avatarItem.isReview = userInfo.isReview; self.avatarItem.avatarUrl = userInfo.isReview ? userInfo.reviewingAvatar : userInfo.avatar; - - self.nickItem.subTitle = userInfo.nick; - NSString *dateStr = [self.dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:userInfo.birth/1000]]; - self.birthItem.subTitle = dateStr; - - self.photoItem.photoArray = userInfo.privatePhoto; - - self.desItem.subTitle = userInfo.userDesc.length > 0 ? userInfo.userDesc : @""; - ///数据回传 - [[self getView] getUserInfoEditDataSourceSuccess:self.editArray]; + + self.nickItem.subTitle = userInfo.nick; + NSString *dateStr = [self.dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:userInfo.birth/1000]]; + self.birthItem.subTitle = dateStr; + + self.photoItem.photoArray = userInfo.privatePhoto; + + self.desItem.subTitle = userInfo.userDesc.length > 0 ? userInfo.userDesc : @""; + ///数据回传 + [[self getView] getUserInfoEditDataSourceSuccess:self.editArray]; } /// 补全资料 @@ -77,113 +88,149 @@ /// @param birth 生日 /// @param userDesc 用户的签名 - (void)complectionInfoWithAvatar:(NSString * _Nullable)avatar - nick:(NSString * _Nullable)nick - birth:(NSString * _Nullable)birth - userDesc:(NSString * _Nullable)userDesc { - NSString * uid = [AccountInfoStorage instance].getUid; - NSString * ticket = [[AccountInfoStorage instance] getTicket]; - NSMutableDictionary * dic = [NSMutableDictionary dictionary]; - if (avatar.length > 0) { - [dic safeSetObject:avatar forKey:@"avatar"]; - } - - if (nick.length > 0) { - [dic safeSetObject:nick forKey:@"nick"]; - } - - if (birth.length > 0) { - [dic safeSetObject:birth forKey:@"birth"]; - } - - if (userDesc.length > 0) { - [dic safeSetObject:userDesc forKey:@"userDesc"]; - } - - [dic safeSetObject:uid forKey:@"uid"]; - [dic safeSetObject:ticket forKey:@"ticket"]; - [Api completeUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + nick:(NSString * _Nullable)nick + birth:(NSString * _Nullable)birth + userDesc:(NSString * _Nullable)userDesc { + NSString * uid = [AccountInfoStorage instance].getUid; + NSString * ticket = [[AccountInfoStorage instance] getTicket]; + NSMutableDictionary * dic = [NSMutableDictionary dictionary]; + if (avatar.length > 0) { + [dic setValue:avatar forKey:@"avatar"]; + } + + if (nick.length > 0) { + [dic setValue:nick forKey:@"nick"]; + } + + if (birth.length > 0) { + [dic setValue:birth forKey:@"birth"]; + } + + if (userDesc.length > 0) { + [dic setValue:userDesc forKey:@"userDesc"]; + } + + [dic setObject:uid forKey:@"uid"]; + [dic setObject:ticket forKey:@"ticket"]; + [Api completeUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { UserInfoModel * infoModel = [UserInfoModel modelWithDictionary:data.data]; [[self getView] completeUserInfoSuccess:infoModel]; - }] userInfo:dic]; + }] userInfo:dic]; } /// 上传头像 /// @param avatar 头像 - (void)uploadAvatar:(UIImage *)avatar { - [Api qiniuUpLoadImage:[self createHttpCompletion:^(BaseModel * _Nonnull data) { - NSString *key = data.data[@"key"]; - NSString *token = data.data[@"token"]; - [UploadImage uploadImage:avatar named:key token:token success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) { - NSString *url = resp[@"path"]; - [[self getView] uploadImageSuccess:url]; - } failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) { - [[self getView] showErrorToast:YMLocalizedString(@"XPMineUserInfoEditPresenter0")]; - }]; - }]]; + [Api qiniuUpLoadImage:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + NSString *key = data.data[@"key"]; + NSString *token = data.data[@"token"]; + [UploadImage uploadImage:avatar named:key token:token success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) { + NSString *url = resp[@"path"]; + [[self getView] uploadImageSuccess:url]; + } failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) { + [[self getView] showErrorToast:YMLocalizedString(@"XPMineUserInfoEditPresenter0")]; + }]; + }]]; } - +///获取地区列表 +-(void)getAreaList{ + [Api getAreaList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView]getAreaListSuccess:data.data]; + }showLoading:NO]]; +} +///保存地区列表 +-(void)saveAreaConfigWithArea:(NSString *)area{ + [Api saveAreaConfigWithArea:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView]saveAreaSuccess]; + }showLoading:YES errorToast:YES] region:area]; +} #pragma mark - Getters And Setters - (XPMineUserInfoEditModel *)nickItem { - if (!_nickItem) { - _nickItem = [[XPMineUserInfoEditModel alloc] init]; - _nickItem.type = XPMineUserInfoEditType_Nick; - _nickItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter1"); - } - return _nickItem; + if (!_nickItem) { + _nickItem = [[XPMineUserInfoEditModel alloc] init]; + _nickItem.type = XPMineUserInfoEditType_Nick; + _nickItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter1"); + } + return _nickItem; } - (XPMineUserInfoEditModel *)avatarItem { - if (!_avatarItem) { - _avatarItem = [[XPMineUserInfoEditModel alloc] init]; - _avatarItem.type = XPMineUserInfoEditType_Avatar; + if (!_avatarItem) { + _avatarItem = [[XPMineUserInfoEditModel alloc] init]; + _avatarItem.type = XPMineUserInfoEditType_Avatar; _avatarItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter2"); - } - return _avatarItem; + } + return _avatarItem; } - (XPMineUserInfoEditModel *)birthItem { - if (!_birthItem) { - _birthItem = [[XPMineUserInfoEditModel alloc] init]; - _birthItem.type = XPMineUserInfoEditType_Birth; - _birthItem.title =YMLocalizedString(@"XPMineUserInfoEditPresenter3"); - } - return _birthItem; + if (!_birthItem) { + _birthItem = [[XPMineUserInfoEditModel alloc] init]; + _birthItem.type = XPMineUserInfoEditType_Birth; + _birthItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter3"); + } + return _birthItem; +} +-(XPMineUserInfoEditModel *)areaItem{ + if (!_areaItem){ + _areaItem = [XPMineUserInfoEditModel new]; + _areaItem.type = XPMineUserInfoEditType_Area; + _areaItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter10"); + } + return _areaItem; +} +- (XPMineUserInfoEditModel *)tagItem{ + if (!_tagItem){ + _tagItem = [XPMineUserInfoEditModel new]; + _tagItem.type = XPMineUserInfoEditType_Tag; + _tagItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter8"); + _tagItem.subTitle = YMLocalizedString(@"XPMineUserInfoEditPresenter9"); + } + return _tagItem; } - - (XPMineUserInfoEditModel *)photoItem { - if (!_photoItem) { - _photoItem = [[XPMineUserInfoEditModel alloc] init]; - _photoItem.type = XPMineUserInfoEditType_Photo; + if (!_photoItem) { + _photoItem = [[XPMineUserInfoEditModel alloc] init]; + _photoItem.type = XPMineUserInfoEditType_Photo; _photoItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter4"); - } - return _photoItem; + } + return _photoItem; } - (XPMineUserInfoEditModel *)desItem { - if (!_desItem) { - _desItem = [[XPMineUserInfoEditModel alloc] init]; - _desItem.type = XPMineUserInfoEditType_UseDes; + if (!_desItem) { + _desItem = [[XPMineUserInfoEditModel alloc] init]; + _desItem.type = XPMineUserInfoEditType_UseDes; _desItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter5"); - } - return _desItem; + } + return _desItem; +} +- (XPMineUserInfoEditModel *)soundItem{ + if (!_soundItem){ + _soundItem = [[XPMineUserInfoEditModel alloc]init]; + _soundItem.type = XPMineUserInfoEditType_Sound; + _soundItem.title = YMLocalizedString(@"XPMineUserInfoEditPresenter6"); + _soundItem.subTitle = YMLocalizedString(@"XPMineUserInfoEditPresenter7"); + } + return _soundItem; } - - (NSMutableArray *)editArray { - if (!_editArray) { - _editArray = [NSMutableArray array]; - } - return _editArray; + if (!_editArray) { + _editArray = [NSMutableArray array]; + } + return _editArray; } - (NSDateFormatter *)dateFormatter { - if (!_dateFormatter) { - _dateFormatter = [[NSDateFormatter alloc] init]; - _dateFormatter.dateFormat = @"yyyy-MM-dd"; - } - return _dateFormatter; + if (!_dateFormatter) { + _dateFormatter = [[NSDateFormatter alloc] init]; + _dateFormatter.dateFormat = @"yyyy-MM-dd"; + + } + return _dateFormatter; } diff --git a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.h b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.h index 2ca77310..b3cdcf9f 100644 --- a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.h +++ b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.h @@ -27,7 +27,20 @@ NS_ASSUME_NONNULL_BEGIN ///@param targetUid 被访问用户的uid - (void)visitUser:(NSString *)targetUid; +/// 上传声音文件 +/// @param filePath 文件路径 +- (void)uploadVoice:(NSString *)filePath; +/// 保存声音 +/// @param audioUrl 声音链接 +/// @param second 秒数 +-(void)saveSoundWithUrl:(NSString *)audioUrl second:(NSString *)second; +///删除声音 +-(void)deleteSound; +///得到个人简介标签 +-(void)getTagList; +////保存个人简介标签 +-(void)saveTagListWithLabels:(NSString *)labels; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.m b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.m index e79ca5e3..43f0a501 100644 --- a/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.m +++ b/YuMi/Modules/YMMine/Presenter/XPMineUserInfoPresenter.m @@ -9,8 +9,11 @@ ///Tool #import "Api+Mine.h" #import "AccountInfoStorage.h" +#import "UploadFile.h" ///Model #import "UserInfoModel.h" +#import "XPSoundCardModel.h" +#import "XPMineUserInfoTagModel.h" ///P #import "XPMineUserInfoProtocol.h" @@ -63,5 +66,44 @@ [Api uploadVisitUserCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) { }] uid:targetUid]; } - +/// 上传声音文件 +/// @param filePath 文件路径 +- (void)uploadVoice:(NSString *)filePath { + [Api qiniuUpLoadImage:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + NSString *key = data.data[@"key"]; + NSString *token = data.data[@"token"]; + [UploadFile uploadFile:filePath named:key token:token success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) { + NSString *url = resp[@"path"]; + [[self getView] uploadVoiceFileToThirdSuccess:url]; + } failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) { + [[self getView] uploadVoiceFileFail:message]; + }]; + } fail:^(NSInteger code, NSString * _Nullable msg) { + [[self getView] uploadVoiceFileFail:msg]; + }showLoading:NO]]; +} +-(void)saveSoundWithUrl:(NSString *)audioUrl second:(NSString *)second{ + [Api saveSoundCardInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView]saveSoundSuccess:audioUrl]; + } fail:^(NSInteger code, NSString * _Nullable msg) { + [[self getView]saveSoundFailWithMsg:msg]; + } showLoading:NO] audioUrl:audioUrl second:second]; +} +-(void)deleteSound{ + [Api deleteSoundCardInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView]deleteSoundSuccess]; + } showLoading:YES]]; +} +///得到个人简介标签 +-(void)getTagList{ + [Api getTagList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + XPMineUserInfoTagModel *model = [XPMineUserInfoTagModel modelWithDictionary:data.data]; + [[self getView]getTagListSuccess:model]; + }showLoading:YES]]; +} +-(void)saveTagListWithLabels:(NSString *)labels{ + [Api saveTagList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + [[self getView]saveTagListSuccess]; + }showLoading:YES errorToast:YES] labels:labels]; +} @end diff --git a/YuMi/Modules/YMMine/Protocol/XPMineUserInfoEditProtocol.h b/YuMi/Modules/YMMine/Protocol/XPMineUserInfoEditProtocol.h index d2db4dba..7893dc9e 100644 --- a/YuMi/Modules/YMMine/Protocol/XPMineUserInfoEditProtocol.h +++ b/YuMi/Modules/YMMine/Protocol/XPMineUserInfoEditProtocol.h @@ -1,15 +1,16 @@ // -// YMMineUserInfoEditProtocol.h -// YUMI +// XPMineUserInfoEditProtocol.h +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import NS_ASSUME_NONNULL_BEGIN -@class UserInfoModel; +@class UserInfoModel,XPMineUserInfoTagModel; @protocol XPMineUserInfoEditProtocol +@optional ///获取编辑个人资料页面的数据 - (void)getUserInfoEditDataSourceSuccess:(NSArray *)array; ///补全资料 @@ -18,6 +19,10 @@ NS_ASSUME_NONNULL_BEGIN - (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo; /// 上传头像成功 - (void)uploadImageSuccess:(NSString *)url; +///获取地区列表 +-(void)getAreaListSuccess:(NSArray *)list; +///保存地区列表 +-(void)saveAreaSuccess; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/Protocol/XPMineUserInfoProtocol.h b/YuMi/Modules/YMMine/Protocol/XPMineUserInfoProtocol.h index 04093593..86d8f146 100644 --- a/YuMi/Modules/YMMine/Protocol/XPMineUserInfoProtocol.h +++ b/YuMi/Modules/YMMine/Protocol/XPMineUserInfoProtocol.h @@ -1,15 +1,16 @@ // -// YMMineUserInfoProtocol.h -// YUMI +// XPMineUserInfoProtocol.h +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import NS_ASSUME_NONNULL_BEGIN -@class UserInfoModel; +@class UserInfoModel,XPSoundCardModel,XPMineUserInfoTagModel; @protocol XPMineUserInfoProtocol +@optional ///获取用户信息成功 - (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo; ///获取用户详细信息成功 @@ -18,6 +19,23 @@ NS_ASSUME_NONNULL_BEGIN - (void)attentionUserSuccess:(BOOL)status; ///获取关注状态 - (void)getAttentionStateSuccess:(BOOL)status; + +///上传声音卡成功 +/// @param fileUrl 声音url +- (void)uploadVoiceFileToThirdSuccess:(NSString *)fileUrl; +/// 上传声音卡失败 +/// @param message 失败消息 +- (void)uploadVoiceFileFail:(NSString *)message; +///保存声音成功 +-(void)saveSoundSuccess:(NSString *)fileUrl; +///保存声音失败 +-(void)saveSoundFailWithMsg:(NSString *)msg; +///删除声音失败 +-(void)deleteSoundSuccess; +///得到个人标签成功、 +-(void)getTagListSuccess:(XPMineUserInfoTagModel *)model; +///保存个人标签成功 +-(void)saveTagListSuccess; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.h b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.h index c050982b..9cd47948 100644 --- a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.h +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.h @@ -1,8 +1,8 @@ // -// YMMineDataGiftCollectionViewCell.h -// YUMI +// XPMineDataGiftCollectionViewCell.h +// xplan-ios // -// Created by YUMI on 2022/4/14. +// Created by 冯硕 on 2022/4/14. // #import @@ -11,6 +11,21 @@ NS_ASSUME_NONNULL_BEGIN @class UserGiftWallInfoModel; @interface XPMineDataGiftCollectionViewCell : UICollectionViewCell @property (nonatomic,strong) UserGiftWallInfoModel *giftInfo; +-(void)setLevel:(int)level; @end + + + + + + + + + + + + + + NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.m b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.m index b0a3fdfd..7f088030 100644 --- a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.m +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftCollectionViewCell.m @@ -1,21 +1,25 @@ // -// YMMineDataGiftCollectionViewCell.m -// YUMI +// XPMineDataGiftCollectionViewCell.m +// xplan-ios // -// Created by YUMI on 2022/4/14. +// Created by 冯硕 on 2022/4/14. // #import "XPMineDataGiftCollectionViewCell.h" ///Third #import ///Tool -#import "DJDKMIMOMColor.h" #import "NetImageView.h" #import "UIView+Corner.h" ///Model #import "UserGiftWallInfoModel.h" @interface XPMineDataGiftCollectionViewCell () +///背景 +@property (nonatomic,strong) UIView *bgView; +///排名 +@property (nonatomic,strong) UIImageView *levelImageView; + ///礼物头像 @property (nonatomic,strong) NetImageView *giftImageView; ///礼物个数 @@ -25,66 +29,114 @@ @implementation XPMineDataGiftCollectionViewCell - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - self.backgroundColor = [UIColor clearColor]; - [self.contentView addSubview:self.giftImageView]; - [self.contentView addSubview:self.giftNumberLabel]; + self.backgroundColor = [UIColor clearColor]; + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.giftImageView]; + [self.bgView addSubview:self.giftNumberLabel]; + [self.bgView addSubview:self.levelImageView]; } - (void)initSubViewConstraints { - [self.giftImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(47, 47)); - make.top.centerX.mas_equalTo(self.contentView); - }]; - - [self.giftNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerX.mas_equalTo(self.contentView); - make.top.mas_equalTo(self.giftImageView.mas_bottom).offset(3); - make.size.mas_equalTo(CGSizeMake(51, 15)); - }]; + [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.contentView); + }]; + + + [self.giftImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(59), kGetScaleWidth(63))); + make.centerX.mas_equalTo(self.contentView); + make.top.mas_equalTo(kGetScaleWidth(5)); + }]; + + [self.giftNumberLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.mas_equalTo(self.contentView); + make.bottom.mas_equalTo(self.bgView).offset(-kGetScaleWidth(6)); + make.height.mas_equalTo(kGetScaleWidth(14)); + }]; + [self.levelImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.top.mas_equalTo(kGetScaleWidth(3)); + make.width.height.mas_equalTo(kGetScaleWidth(19)); + }]; } #pragma mark - Getters And Setters + +-(void)setLevel:(int)level{ + [self.giftImageView mas_updateConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(59.72), kGetScaleWidth(63.03))); + }]; + if(level == 1){ + self.levelImageView.hidden = NO; + _levelImageView.image = [UIImage imageNamed:@"gift_list_one"]; + }else if(level == 2){ + self.levelImageView.hidden = NO; + _levelImageView.image = [UIImage imageNamed:@"gift_list_two"]; + }else if(level == 3){ + self.levelImageView.hidden = NO; + _levelImageView.image = [UIImage imageNamed:@"gift_list_three"]; + }else{ + [self.giftImageView mas_updateConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(60.16), kGetScaleWidth(55.58))); + }]; + self.levelImageView.hidden = YES; + } +} + - (void)setGiftInfo:(UserGiftWallInfoModel *)giftInfo { - _giftInfo = giftInfo; - if (_giftInfo) { - self.giftImageView.imageUrl = _giftInfo.picUrl; - self.giftNumberLabel.text = [NSString stringWithFormat:@"X%ld", _giftInfo.reciveCount]; - } + _giftInfo = giftInfo; + if (_giftInfo) { + self.giftImageView.imageUrl = _giftInfo.picUrl; + self.giftNumberLabel.text = [NSString stringWithFormat:@"X%ld", _giftInfo.reciveCount]; + } } - (NetImageView *)giftImageView { - if (!_giftImageView) { - NetImageConfig * config = [[NetImageConfig alloc]init]; - config.imageType = ImageTypeUserIcon; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _giftImageView = [[NetImageView alloc] initWithConfig:config]; - } - return _giftImageView; + if (!_giftImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeUserIcon; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _giftImageView = [[NetImageView alloc] initWithConfig:config]; + } + return _giftImageView; } - (UILabel *)giftNumberLabel { - if (!_giftNumberLabel) { - _giftNumberLabel = [[UILabel alloc] init]; - _giftNumberLabel.font = [UIFont systemFontOfSize:10]; - _giftNumberLabel.textColor = [DJDKMIMOMColor mainTextColor]; - _giftNumberLabel.backgroundColor = UIColorFromRGB(0xF1F1FA); - _giftNumberLabel.textAlignment = NSTextAlignmentCenter; - [_giftNumberLabel setCornerWithLeftTopCorner:2 rightTopCorner:6 bottomLeftCorner:6 bottomRightCorner:2 size:CGSizeMake(51, 15)]; - } - return _giftNumberLabel; + if (!_giftNumberLabel) { + _giftNumberLabel = [[UILabel alloc] init]; + _giftNumberLabel.font = [UIFont systemFontOfSize:kGetScaleWidth(10) weight:UIFontWeightRegular]; + _giftNumberLabel.textColor = UIColorFromRGB(0x6D6B89); + _giftNumberLabel.textAlignment = NSTextAlignmentCenter; + + } + return _giftNumberLabel; } - +- (UIView *)bgView{ + if (!_bgView){ + _bgView = [UIView new]; + _bgView.backgroundColor = UIColorFromRGB(0xF3F5FA); + _bgView.layer.cornerRadius = kGetScaleWidth(8); + _bgView.layer.masksToBounds = YES; + } + return _bgView; +} +- (UIImageView *)levelImageView{ + if (!_levelImageView){ + _levelImageView = [UIImageView new]; + _levelImageView.hidden = NO; + } + return _levelImageView; +} @end diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.h b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.h index 30bb1723..c11491f2 100644 --- a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.h +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.h @@ -1,8 +1,8 @@ // -// YMMineDataGiftTableViewCell.h -// YUMI +// XPMineDataGiftTableViewCell.h +// xplan-ios // -// Created by YUMI on 2022/4/14. +// Created by 冯硕 on 2022/4/14. // #import diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.m b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.m index ce62bc35..676654ba 100644 --- a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.m +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineDataGiftTableViewCell.m @@ -1,8 +1,8 @@ // -// YMMineDataGiftTableViewCell.m -// YUMI +// XPMineDataGiftTableViewCell.m +// xplan-ios // -// Created by YUMI on 2022/4/14. +// Created by 冯硕 on 2022/4/14. // #import "XPMineDataGiftTableViewCell.h" @@ -12,8 +12,6 @@ #import #import ///Tool -#import "YUMIMacroUitls.h" -#import "DJDKMIMOMColor.h" #import "UIImageConstant.h" #import "UIButton+EnlargeTouchArea.h" #import "UIImage+Utils.h" @@ -23,10 +21,10 @@ @interface XPMineDataGiftTableViewCell () ///背景 @property (nonatomic,strong) UIImageView * backImageView; -///显示更多 +/////显示更多 @property (nonatomic,strong) UIButton *arrowButton; -///标题 -@property (nonatomic,strong) UILabel *titleLabel; +/////标题 +//@property (nonatomic,strong) UILabel *titleLabel; ///分页标题 @property (nonatomic, strong) NSArray *titles; ///分页控件 @@ -42,186 +40,188 @@ @implementation XPMineDataGiftTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { - if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - self.backgroundColor = [UIColor clearColor]; - self.selectionStyle = UITableViewCellSelectionStyleNone; - [self.contentView addSubview:self.backImageView]; - - [self.backImageView addSubview:self.titleLabel]; - [self.backImageView addSubview:self.arrowButton]; - [self.backImageView addSubview:self.titleView]; - [self.backImageView addSubview:self.containerView]; + self.backgroundColor = [UIColor clearColor]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + [self.contentView addSubview:self.backImageView]; + +// [self.backImageView addSubview:self.titleLabel]; + [self.backImageView addSubview:self.arrowButton]; + [self.backImageView addSubview:self.titleView]; + [self.backImageView addSubview:self.containerView]; } - (void)initSubViewConstraints { - [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.contentView).inset(15); - make.top.mas_equalTo(self.contentView); - make.bottom.mas_equalTo(self.contentView).offset(-15); - }]; - - [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.backImageView).offset(12); - make.top.mas_equalTo(self.backImageView).offset(12); - }]; - - [self.arrowButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(13, 22)); - make.centerY.mas_equalTo(self.titleLabel); - make.right.mas_equalTo(self.backImageView).offset(-15); - }]; - - [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerX.mas_equalTo(self.backImageView); - make.width.mas_equalTo(100 * 2 + 20); - make.height.mas_equalTo(30); - make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(23); - }]; - - [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.bottom.mas_equalTo(self.backImageView); - make.top.mas_equalTo(self.titleView.mas_bottom).offset(20); - }]; + [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.contentView).inset(15); + make.top.mas_equalTo(self.contentView); + make.bottom.mas_equalTo(self.contentView).offset(-15); + }]; + +// [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { +// make.left.mas_equalTo(self.backImageView).offset(12); +// make.top.mas_equalTo(self.backImageView).offset(12); +// }]; +// + [self.arrowButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(13, 22)); + make.centerY.equalTo(self.titleView); + make.right.mas_equalTo(self.backImageView).offset(-15); + }]; + + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.mas_equalTo(self.backImageView); + make.width.mas_equalTo(kGetScaleWidth(200)); + make.height.mas_equalTo(kGetScaleWidth(30)); + make.top.mas_equalTo(kGetScaleWidth(14)); + }]; + + [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.mas_equalTo(self.backImageView); + make.top.mas_equalTo(self.titleView.mas_bottom).offset(kGetScaleWidth(20)); + }]; + } #pragma mark - JXCategoryViewDelegate - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { - return self.titles.count; + return self.titles.count; } - (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { - if (index == 0) { - return self.normalGiftView; - } else { - return self.luckyGiftView; - } + if (index == 0) { + return self.normalGiftView; + } else { + return self.luckyGiftView; + } } #pragma mark - Event Response - (void)arrowButtonAction:(UIButton *)sender { - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineDataGiftTableViewCell:didClickMore:)]) { - [self.delegate xPMineDataGiftTableViewCell:self didClickMore:sender]; - } + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineDataGiftTableViewCell:didClickMore:)]) { + [self.delegate xPMineDataGiftTableViewCell:self didClickMore:sender]; + } } #pragma mark - Getters And Setters - (void)setUserGiftWall:(NSArray *)userGiftWall { - _userGiftWall = userGiftWall; - if (_userGiftWall.count > 12) { - NSMutableArray * array = [_userGiftWall mutableCopy]; - _userGiftWall = [array subarrayWithRange:NSMakeRange(0, 12)]; - } - self.normalGiftView.datasource = _userGiftWall; + _userGiftWall = userGiftWall; + if (_userGiftWall.count > 11) { + NSMutableArray * array = [_userGiftWall mutableCopy]; + _userGiftWall = [array subarrayWithRange:NSMakeRange(0, 11)]; + } + + self.normalGiftView.datasource = _userGiftWall; } - (void)setUserLuckyBagGiftWall:(NSArray *)userLuckyBagGiftWall { - _userLuckyBagGiftWall = userLuckyBagGiftWall; - if (_userLuckyBagGiftWall.count > 12) { - NSMutableArray * array = [_userLuckyBagGiftWall mutableCopy]; - _userLuckyBagGiftWall = [array subarrayWithRange:NSMakeRange(0, 12)]; - } - self.luckyGiftView.datasource = _userLuckyBagGiftWall; + _userLuckyBagGiftWall = userLuckyBagGiftWall; + if (_userLuckyBagGiftWall.count > 11) { + NSMutableArray * array = [_userLuckyBagGiftWall mutableCopy]; + _userLuckyBagGiftWall = [array subarrayWithRange:NSMakeRange(0, 11)]; + } + self.luckyGiftView.datasource = _userLuckyBagGiftWall; } - (UIImageView *)backImageView { - if (!_backImageView) { - _backImageView = [[UIImageView alloc] init]; - _backImageView.userInteractionEnabled = YES; - _backImageView.layer.cornerRadius = 10; - _backImageView.backgroundColor =[DJDKMIMOMColor appCellBackgroundColor]; - _backImageView.layer.shadowColor = UIColorFromRGB(0xE4E4E4).CGColor; - _backImageView.layer.shadowOpacity = 1; - _backImageView.layer.shadowOffset = CGSizeMake(0, 2); - _backImageView.layer.shadowRadius = 8; - } - return _backImageView; -} - -- (UILabel *)titleLabel { - if (!_titleLabel) { - _titleLabel = [[UILabel alloc] init]; - _titleLabel.text = YMLocalizedString(@"XPMineDataGiftTableViewCell0"); - _titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; - _titleLabel.textColor = [DJDKMIMOMColor mainTextColor]; - } - return _titleLabel; + if (!_backImageView) { + _backImageView = [[UIImageView alloc] init]; + _backImageView.userInteractionEnabled = YES; + _backImageView.layer.cornerRadius = 10; + _backImageView.backgroundColor =[DJDKMIMOMColor appCellBackgroundColor]; + _backImageView.layer.shadowColor = UIColorFromRGB(0xE4E4E4).CGColor; + _backImageView.layer.shadowOpacity = 1; + _backImageView.layer.shadowOffset = CGSizeMake(0, 2); + _backImageView.layer.shadowRadius = 8; + } + return _backImageView; } +//- (UILabel *)titleLabel { +// if (!_titleLabel) { +// _titleLabel = [[UILabel alloc] init]; +// _titleLabel.text = @"礼物墙"; +// _titleLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; +// _titleLabel.textColor = [DJDKMIMOMColor mainTextColor]; +// } +// return _titleLabel; +//} +// - (UIButton *)arrowButton { - if (!_arrowButton) { - _arrowButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateNormal]; - [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateSelected]; - [_arrowButton addTarget:self action:@selector(arrowButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - [_arrowButton setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; - } - return _arrowButton; + if (!_arrowButton) { + _arrowButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateNormal]; + [_arrowButton setImage:[UIImage imageNamed:@"room_setting_arrow"] forState:UIControlStateSelected]; + [_arrowButton addTarget:self action:@selector(arrowButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [_arrowButton setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + } + return _arrowButton; } - (JXCategoryTitleView *)titleView { - if (!_titleView) { - _titleView = [[JXCategoryTitleView alloc] init]; - _titleView.delegate = self; - _titleView.titles = self.titles; - _titleView.backgroundColor = [UIColor clearColor]; - _titleView.titleColor = [DJDKMIMOMColor secondTextColor]; - _titleView.titleSelectedColor = [DJDKMIMOMColor mainTextColor]; - _titleView.titleFont = [UIFont systemFontOfSize:12]; - _titleView.titleSelectedFont = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium]; - _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; - _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; - _titleView.defaultSelectedIndex = 0; - _titleView.cellSpacing = 20; - _titleView.cellWidthIncrement = 5; - _titleView.cellWidth = 60; - _titleView.listContainer = self.containerView; - - JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init]; - lineView.indicatorImageViewSize = CGSizeMake(60, 8); - lineView.verticalMargin = 6; - lineView.indicatorImageView.image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xFFC000), UIColorFromRGB(0xFFD15A)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(60, 8)]; - lineView.indicatorImageView.layer.masksToBounds = YES; - lineView.indicatorImageView.layer.cornerRadius = 6; - _titleView.indicators = @[lineView]; - } - return _titleView; + if (!_titleView) { + _titleView = [[JXCategoryTitleView alloc] init]; + _titleView.delegate = self; + _titleView.titles = self.titles; + _titleView.backgroundColor = [UIColor clearColor]; + _titleView.titleColor = UIColorFromRGB(0xB3B3C3); + _titleView.titleSelectedColor = UIColorFromRGB(0x1F1A4E); + _titleView.titleFont = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; + _titleView.titleSelectedFont = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; + _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; + _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; + _titleView.defaultSelectedIndex = 0; + _titleView.cellSpacing = 20; + _titleView.cellWidthIncrement = 5; + _titleView.cellWidth = 60; + _titleView.listContainer = self.containerView; + + JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init]; + lineView.indicatorImageViewSize = CGSizeMake(15, 3); + lineView.verticalMargin = 0; + lineView.indicatorImageView.image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(15, 3)]; + lineView.indicatorImageView.layer.masksToBounds = YES; + lineView.indicatorImageView.layer.cornerRadius = 1.5; + _titleView.indicators = @[lineView]; + } + return _titleView; } - (JXCategoryListContainerView *)containerView { - if (!_containerView) { - _containerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; - _containerView.defaultSelectedIndex = 0; - _containerView.scrollView.tag = 1009; - } - return _containerView; + if (!_containerView) { + _containerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; + _containerView.defaultSelectedIndex = 0; + _containerView.scrollView.tag = 1009; + } + return _containerView; } - (NSArray *)titles { - if (!_titles) { - _titles = @[YMLocalizedString(@"XPWishGiftCreateItemViewController0"), YMLocalizedString(@"XPMineDataGiftTableViewCell2")]; - } - return _titles; + if (!_titles) { + _titles = @[YMLocalizedString(@"XPMineDataGiftTableViewCell0"), YMLocalizedString(@"XPMineDataGiftTableViewCell1")]; + } + return _titles; } - (XPMineUserInfoGiftView *)normalGiftView { - if (!_normalGiftView) { - _normalGiftView = [[XPMineUserInfoGiftView alloc] init]; - } - return _normalGiftView; + if (!_normalGiftView) { + _normalGiftView = [[XPMineUserInfoGiftView alloc] init]; + } + return _normalGiftView; } - (XPMineUserInfoGiftView *)luckyGiftView { - if (!_luckyGiftView) { - _luckyGiftView = [[XPMineUserInfoGiftView alloc] init]; - } - return _luckyGiftView; + if (!_luckyGiftView) { + _luckyGiftView = [[XPMineUserInfoGiftView alloc] init]; + } + return _luckyGiftView; } @end diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditMainTagView.h b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditMainTagView.h new file mode 100644 index 00000000..0a8f606f --- /dev/null +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditMainTagView.h @@ -0,0 +1,17 @@ +// +// XPMineUserInfoEditMainTagView.h +// xplan-ios +// +// Created by duoban on 2023/2/23. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineUserInfoEditMainTagView : UIView +@property (nonatomic,strong) NSMutableArray *itemList; +@property (nonatomic,assign) CGFloat maxWidth; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditMainTagView.m b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditMainTagView.m new file mode 100644 index 00000000..bbc7abb9 --- /dev/null +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditMainTagView.m @@ -0,0 +1,47 @@ +// +// XPMineUserInfoEditMainTagView.m +// xplan-ios +// +// Created by duoban on 2023/2/23. +// + +#import "XPMineUserInfoEditMainTagView.h" +#import "XPMineUserInfoTagModel.h" +#import "XPMineUserInfoEditTagView.h" +@interface XPMineUserInfoEditMainTagView() + +@end +@implementation XPMineUserInfoEditMainTagView + + +-(void)setItemList:(NSMutableArray *)itemList{ + _itemList = itemList; + CGFloat x = 0; + if(self.subviews.count > 0){ + for (UIView *view in self.subviews) { + [view removeFromSuperview]; + } + } + for (int i = 0; i < _itemList.count; i++) { + XPMineUserInfoTagItemModel *model = _itemList[i]; + if(i > 0){ + XPMineUserInfoTagItemModel *getModel = _itemList[i-1]; + x = x + getModel.width + kGetScaleWidth(5); + } + XPMineUserInfoEditTagView *tagView = [[XPMineUserInfoEditTagView alloc]initWithFrame:CGRectZero]; + [self addSubview:tagView]; + [tagView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(x); + make.centerY.equalTo(self); + make.height.mas_equalTo(kGetScaleWidth(18)); + make.width.mas_equalTo(model.width); + }]; + tagView.isTag = i < 3; + tagView.title = model.label; + + } + +} + + +@end diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.h b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.h index bd2cc03c..389565f5 100644 --- a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.h +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.h @@ -1,17 +1,21 @@ // -// YMMineUserInfoEditTableViewCell.h -// YUMI +// XPMineUserInfoEditTableViewCell.h +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import +#import "XPSoundCardModel.h" NS_ASSUME_NONNULL_BEGIN @class XPMineUserInfoEditModel; @interface XPMineUserInfoEditTableViewCell : UITableViewCell ///数据 @property (nonatomic,strong) XPMineUserInfoEditModel *itmeModel; +@property (nonatomic,strong) XPSoundCardModel *soundModel; +@property (nonatomic,strong) NSMutableArray *itemList; +@property (nonatomic,assign) CGFloat maxWidth; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.m b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.m index e78335f0..c816af34 100644 --- a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.m +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTableViewCell.m @@ -1,23 +1,26 @@ // -// YMMineUserInfoEditTableViewCell.m -// YUMI +// XPMineUserInfoEditTableViewCell.m +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import "XPMineUserInfoEditTableViewCell.h" ///Third #import ///Tool -#import "DJDKMIMOMColor.h" + ///Model +#import "XPMineUserInfoTagModel.h" #import "XPMineUserInfoEditModel.h" #import "UserPhoto.h" - +#import "XPMineUserInfoTagFlowLayout.h" #import "NetImageView.h" #import "UIImage+Utils.h" - +#import "XPMineUserInfoHeaderTagCell.h" +#import "XPMineUserInfoEditMainTagView.h" @interface XPMineUserInfoEditTableViewCell () + ///容器 @property (nonatomic,strong) UIStackView *stackView; ///标题 @@ -38,278 +41,415 @@ @property (nonatomic,strong) NetImageView *thirdPhotoImageView; ///分割线 @property (nonatomic,strong) UIView * partLineView; +///声音 +@property (nonatomic,strong) UIImageView *soundView; +///声音时间 +@property (nonatomic,strong) UILabel *soundTimeView; /// @property (nonatomic,strong) NSMutableArray *photoViewArray; +//审核View +@property (nonatomic,strong) UIImageView *reviewView; + +/// +@property (nonatomic,strong) XPMineUserInfoEditMainTagView *editTagView; + + @end @implementation XPMineUserInfoEditTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { - if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - self.backgroundColor = [UIColor clearColor]; - self.selectionStyle = UITableViewCellSelectionStyleNone; - [self.contentView addSubview:self.stackView]; - [self.contentView addSubview:self.partLineView]; - - [self.stackView addArrangedSubview:self.titleLabel]; - [self.stackView addArrangedSubview:self.avatarImageView]; - [self.stackView addArrangedSubview:self.subTitleLabel]; - [self.stackView addArrangedSubview:self.phototStackView]; - [self.stackView addArrangedSubview:self.arrowImageView]; - - [self.phototStackView addArrangedSubview:self.thirdPhotoImageView]; - [self.phototStackView addArrangedSubview:self.secondPhotoImageView]; - [self.phototStackView addArrangedSubview:self.firstPhotoImageView]; - - [self.photoViewArray addObject:self.firstPhotoImageView]; - [self.photoViewArray addObject:self.secondPhotoImageView]; - [self.photoViewArray addObject:self.thirdPhotoImageView]; + + self.backgroundColor = [UIColor clearColor]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + [self.contentView addSubview:self.stackView]; + [self.contentView addSubview:self.partLineView]; + [self.soundView addSubview:self.soundTimeView]; + + [self.stackView addArrangedSubview:self.titleLabel]; + [self.stackView addArrangedSubview:self.avatarImageView]; + [self.stackView addArrangedSubview:self.subTitleLabel]; + + UIView *emptyVeiw = [UIView new]; + [self.stackView addArrangedSubview:emptyVeiw]; + [emptyVeiw mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_greaterThanOrEqualTo(5); + }]; + [self.stackView addArrangedSubview:self.phototStackView]; + [self.stackView addArrangedSubview:self.soundView]; + [self.stackView addArrangedSubview:self.arrowImageView]; + + [self.phototStackView addArrangedSubview:self.thirdPhotoImageView]; + [self.phototStackView addArrangedSubview:self.secondPhotoImageView]; + [self.phototStackView addArrangedSubview:self.firstPhotoImageView]; + + + + + + [self.photoViewArray addObject:self.firstPhotoImageView]; + [self.photoViewArray addObject:self.secondPhotoImageView]; + [self.photoViewArray addObject:self.thirdPhotoImageView]; + + [self.avatarImageView addSubview:self.reviewView]; + [self.contentView addSubview:self.editTagView]; + } - (void)initSubViewConstraints { - [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.mas_equalTo(self.contentView); - make.bottom.mas_equalTo(self.partLineView.mas_top); - make.left.right.mas_equalTo(self.contentView).inset(15); - }]; - - [self.partLineView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.contentView).inset(25); - make.bottom.mas_equalTo(self.contentView); - make.height.mas_equalTo(1); - }]; - - [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(50, 50)); - }]; - - [self.arrowImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(6, 10)); - }]; - - [self.firstPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(35); - }]; - - [self.secondPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(self.firstPhotoImageView); - }]; - - [self.thirdPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(self.firstPhotoImageView); - }]; + [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(self.contentView); + make.bottom.mas_equalTo(self.partLineView.mas_top); + make.left.right.mas_equalTo(self.contentView).inset(kGetScaleWidth(16)); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(kGetScaleWidth(58)); + }]; + [self.subTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.equalTo(self.arrowImageView.mas_left).mas_offset(-kGetScaleWidth(2)); + }]; + [self.partLineView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.contentView).inset(kGetScaleWidth(16)); + make.bottom.mas_equalTo(self.contentView); + make.height.mas_equalTo(kGetScaleWidth(0.5)); + }]; + + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(50), kGetScaleWidth(50))); + make.right.equalTo(self.arrowImageView.mas_left).mas_offset(-kGetScaleWidth(2)); + }]; + + [self.arrowImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(kGetScaleWidth(20), kGetScaleWidth(20))); + }]; + [self.soundView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(kGetScaleWidth(85)); + make.height.mas_equalTo(kGetScaleWidth(28)); + make.right.equalTo(self.arrowImageView.mas_left).mas_offset(-kGetScaleWidth(2)); + }]; + [self.soundTimeView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.soundView); + make.left.mas_equalTo(kGetScaleWidth(44)); + }]; + [self.firstPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(40)); + }]; + + [self.secondPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(self.firstPhotoImageView); + }]; + + [self.thirdPhotoImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(self.firstPhotoImageView); + }]; + [self.reviewView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.equalTo(self.avatarImageView); + make.height.mas_equalTo(kGetScaleWidth(15)); + }]; + + [self.editTagView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(kGetScaleWidth(220)); + make.right.equalTo(self.arrowImageView.mas_left).mas_offset(kGetScaleWidth(3)); + make.centerY.equalTo(self.contentView); + make.height.mas_equalTo(kGetScaleWidth(18)); + }]; } - (void)loadPhotoViewWithPhotoArray:(NSArray *)array { - if (array.count > 3) { - array = [array subarrayWithRange:NSMakeRange(0, 3)]; - } - self.firstPhotoImageView.hidden = YES; - self.secondPhotoImageView.hidden = YES; - self.thirdPhotoImageView.hidden = YES; - for (int i = 0; i < array.count; i++) { - NetImageView * imageView = [self.photoViewArray objectAtIndex:i]; - NSString * imageUrl = [array objectAtIndex:i].photoUrl; - if (imageUrl.length > 0) { - imageView.imageUrl = imageUrl; - imageView.hidden = NO; - } - } + if (array.count > 3) { + array = [array subarrayWithRange:NSMakeRange(0, 3)]; + } + self.firstPhotoImageView.hidden = YES; + self.secondPhotoImageView.hidden = YES; + self.thirdPhotoImageView.hidden = YES; + for (int i = 0; i < array.count; i++) { + NetImageView * imageView = [self.photoViewArray safeObjectAtIndex1:i]; + NSString * imageUrl = [array objectAtIndex:i].photoUrl; + if (imageUrl.length > 0) { + imageView.imageUrl = imageUrl; + imageView.hidden = NO; + } + } } - (void)configCellWithModel:(XPMineUserInfoEditModel *)model{ - switch (model.type) { - case XPMineUserInfoEditType_Avatar: - { - self.subTitleLabel.hidden = YES; - self.phototStackView.hidden = YES; - self.avatarImageView.hidden = NO; + _soundView.hidden = YES; + _editTagView.hidden = YES; + switch (model.type) { + case XPMineUserInfoEditType_Avatar: + { + self.subTitleLabel.hidden = YES; + self.phototStackView.hidden = YES; + self.avatarImageView.hidden = NO; if (model.isReview) { - [self.avatarImageView loadImageWithUrl:model.avatarUrl completion:^(UIImage * _Nonnull image, NSURL * _Nonnull url) { - UIImage * waterImage = [UIImage imageNamed:@"mine_avatar_reviewing"]; - float ratio = waterImage.size.height / waterImage.size.width; - float rectY = image.size.height * (1 - ratio); - self.avatarImageView.image = [UIImage waterImageWithImage:image waterImage:waterImage waterImageRect:CGRectMake(0, rectY, image.size.width, image.size.height * ratio)]; - }]; + self.reviewView.hidden = NO; } else { + self.reviewView.hidden = YES; self.avatarImageView.imageUrl = model.avatarUrl; } - } - break; - case XPMineUserInfoEditType_Birth: - { - self.subTitleLabel.hidden = NO; - self.phototStackView.hidden = YES; - self.avatarImageView.hidden = YES; - } - break; - case XPMineUserInfoEditType_Nick: - { - self.subTitleLabel.hidden = NO; - self.phototStackView.hidden = YES; - self.avatarImageView.hidden = YES; - } - break; - case XPMineUserInfoEditType_UseDes: - { - self.subTitleLabel.hidden = NO; - self.phototStackView.hidden = YES; - self.avatarImageView.hidden = YES; - } - break; - case XPMineUserInfoEditType_Photo: - { - self.subTitleLabel.hidden = YES; - self.phototStackView.hidden = NO; - self.avatarImageView.hidden = YES; - [self loadPhotoViewWithPhotoArray:model.photoArray]; - } - break; - - default: - break; - } + } + break; + case XPMineUserInfoEditType_Birth: + { + self.subTitleLabel.hidden = NO; + self.phototStackView.hidden = YES; + self.avatarImageView.hidden = YES; + } + break; + case XPMineUserInfoEditType_Nick: + { + self.subTitleLabel.hidden = NO; + self.phototStackView.hidden = YES; + self.avatarImageView.hidden = YES; + } + break; + case XPMineUserInfoEditType_UseDes: + { + self.subTitleLabel.hidden = NO; + self.phototStackView.hidden = YES; + self.avatarImageView.hidden = YES; + } + break; + case XPMineUserInfoEditType_Photo: + { + self.subTitleLabel.hidden = YES; + self.phototStackView.hidden = NO; + self.avatarImageView.hidden = YES; + [self loadPhotoViewWithPhotoArray:model.photoArray]; + } + break; + case XPMineUserInfoEditType_Sound: + { + + self.subTitleLabel.hidden = NO; + self.phototStackView.hidden = YES; + self.avatarImageView.hidden = YES; + break; + } + case XPMineUserInfoEditType_Tag: + { + + + self.phototStackView.hidden = YES; + self.avatarImageView.hidden = YES; + self.subTitleLabel.hidden = self.itemList.count > 0; + self.editTagView.hidden = !self.subTitleLabel.hidden; + break; + } + case XPMineUserInfoEditType_Area: + { + + self.subTitleLabel.hidden = NO; + self.phototStackView.hidden = YES; + self.avatarImageView.hidden = YES; + break; + } + default: + break; + } } #pragma mark - Getters And Setters +-(void)setMaxWidth:(CGFloat)maxWidth{ + _maxWidth = maxWidth; + [_editTagView mas_updateConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(_maxWidth); + }]; + +} +-(void)setItemList:(NSMutableArray *)itemList{ + _itemList = itemList; + _editTagView.itemList = _itemList; +} + +-(void)setSoundModel:(XPSoundCardModel *)soundModel{ + _soundModel = soundModel; + if(_itmeModel.type == XPMineUserInfoEditType_Sound){ + _soundView.hidden = !(_soundModel.status == 1 || _soundModel.status == 2); + _subTitleLabel.hidden = _soundModel.status == 1 || _soundModel.status == 2; + _soundTimeView.text = [NSString stringWithFormat:@"%ld\"",_soundModel.second]; + } + +} - (void)setItmeModel:(XPMineUserInfoEditModel *)itmeModel { - _itmeModel = itmeModel; - if (_itmeModel) { - self.titleLabel.text = _itmeModel.title; - self.subTitleLabel.text = _itmeModel.subTitle; - [self configCellWithModel:itmeModel]; - } + _itmeModel = itmeModel; + if (_itmeModel) { + self.titleLabel.text = _itmeModel.title; + self.subTitleLabel.text = _itmeModel.subTitle; + [self configCellWithModel:itmeModel]; + } } - (UIStackView *)stackView { - if (!_stackView) { - _stackView = [[UIStackView alloc] init]; - _stackView.axis = UILayoutConstraintAxisHorizontal; - _stackView.distribution = UIStackViewDistributionFill; - _stackView.alignment = UIStackViewAlignmentCenter; - _stackView.spacing = 10; - } - return _stackView; + if (!_stackView) { + _stackView = [[UIStackView alloc] init]; + _stackView.axis = UILayoutConstraintAxisHorizontal; + _stackView.distribution = UIStackViewDistributionFill; + _stackView.alignment = UIStackViewAlignmentCenter; + _stackView.spacing = kGetScaleWidth(10); + } + return _stackView; } - (UILabel *)titleLabel { - if (!_titleLabel) { - _titleLabel = [[UILabel alloc] init]; - _titleLabel.font = [UIFont systemFontOfSize:14]; - _titleLabel.textColor = [DJDKMIMOMColor mainTextColor]; - [_titleLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; - } - return _titleLabel; + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.font = kFontMedium(14); + _titleLabel.textColor = [DJDKMIMOMColor inputTextColor]; + [_titleLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; + } + return _titleLabel; } - (UILabel *)subTitleLabel { - if (!_subTitleLabel) { - _subTitleLabel = [[UILabel alloc] init]; - _subTitleLabel.textColor = [DJDKMIMOMColor secondTextColor]; - _subTitleLabel.font = [UIFont systemFontOfSize:12.f]; - _subTitleLabel.textAlignment = NSTextAlignmentRight; - } - return _subTitleLabel; + if (!_subTitleLabel) { + _subTitleLabel = [[UILabel alloc] init]; + _subTitleLabel.textColor = UIColorFromRGB(0x6D6B89); + _subTitleLabel.font = kFontMedium(14); + _subTitleLabel.textAlignment = NSTextAlignmentRight; + + } + return _subTitleLabel; } - (NetImageView *)avatarImageView { - if (!_avatarImageView) { + if (!_avatarImageView) { NetImageConfig * config = [[NetImageConfig alloc]init]; config.imageType = ImageTypeUserIcon; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _avatarImageView = [[NetImageView alloc] initWithConfig:config]; - _avatarImageView.userInteractionEnabled = YES; - _avatarImageView.layer.cornerRadius = 25; - _avatarImageView.layer.masksToBounds = YES; - } - return _avatarImageView; + _avatarImageView = [[NetImageView alloc] initWithConfig:config]; + _avatarImageView.userInteractionEnabled = YES; + _avatarImageView.layer.cornerRadius = kGetScaleWidth(25); + _avatarImageView.layer.masksToBounds = YES; + } + return _avatarImageView; } - (UIImageView *)arrowImageView { - if (!_arrowImageView) { - _arrowImageView = [[UIImageView alloc] init]; - _arrowImageView.userInteractionEnabled = YES; - _arrowImageView.image = [UIImage imageNamed:@"mine_item_arrow"]; - [_arrowImageView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - } - return _arrowImageView; + if (!_arrowImageView) { + _arrowImageView = [[UIImageView alloc] init]; + _arrowImageView.userInteractionEnabled = YES; + _arrowImageView.image = [UIImage imageNamed:@"mine_item_arrow"]; + [_arrowImageView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; + } + return _arrowImageView; } - (UIStackView *)phototStackView { - if (!_phototStackView) { - _phototStackView = [[UIStackView alloc] init]; - _phototStackView.axis = UILayoutConstraintAxisHorizontal; - _phototStackView.distribution = UIStackViewDistributionFill; - _phototStackView.alignment = UIStackViewAlignmentFill; - _phototStackView.spacing = 10; - } - return _phototStackView; + if (!_phototStackView) { + _phototStackView = [[UIStackView alloc] init]; + _phototStackView.axis = UILayoutConstraintAxisHorizontal; + _phototStackView.distribution = UIStackViewDistributionFill; + _phototStackView.alignment = UIStackViewAlignmentFill; + _phototStackView.spacing = kGetScaleWidth(8); + } + return _phototStackView; } - (NetImageView *)firstPhotoImageView { - if (!_firstPhotoImageView) { + if (!_firstPhotoImageView) { NetImageConfig * config = [[NetImageConfig alloc]init]; config.imageType = ImageTypeUserIcon; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _firstPhotoImageView = [[NetImageView alloc] initWithConfig:config]; - _firstPhotoImageView.userInteractionEnabled = YES; - _firstPhotoImageView.layer.masksToBounds = YES; - _firstPhotoImageView.layer.cornerRadius = 5; - _firstPhotoImageView.hidden = YES; - } - return _firstPhotoImageView; + _firstPhotoImageView = [[NetImageView alloc] initWithConfig:config]; + _firstPhotoImageView.userInteractionEnabled = YES; + _firstPhotoImageView.layer.masksToBounds = YES; + _firstPhotoImageView.contentMode = UIViewContentModeScaleAspectFill; + _firstPhotoImageView.clipsToBounds = YES; + _firstPhotoImageView.layer.cornerRadius = kGetScaleWidth(6); + _firstPhotoImageView.hidden = YES; + } + return _firstPhotoImageView; } - (NetImageView *)secondPhotoImageView { - if (!_secondPhotoImageView) { + if (!_secondPhotoImageView) { NetImageConfig * config = [[NetImageConfig alloc]init]; config.imageType = ImageTypeUserIcon; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _secondPhotoImageView = [[NetImageView alloc] initWithConfig:config]; - _secondPhotoImageView.userInteractionEnabled = YES; - _secondPhotoImageView.layer.masksToBounds = YES; - _secondPhotoImageView.layer.cornerRadius = 5; - _secondPhotoImageView.hidden = YES; - } - return _secondPhotoImageView; + _secondPhotoImageView = [[NetImageView alloc] initWithConfig:config]; + _secondPhotoImageView.userInteractionEnabled = YES; + _secondPhotoImageView.layer.masksToBounds = YES; + _secondPhotoImageView.contentMode = UIViewContentModeScaleAspectFill; + _secondPhotoImageView.clipsToBounds = YES; + _secondPhotoImageView.layer.cornerRadius = kGetScaleWidth(6); + _secondPhotoImageView.hidden = YES; + } + return _secondPhotoImageView; } - (NetImageView *)thirdPhotoImageView { - if (!_thirdPhotoImageView) { + if (!_thirdPhotoImageView) { NetImageConfig * config = [[NetImageConfig alloc]init]; config.imageType = ImageTypeUserIcon; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - _thirdPhotoImageView = [[NetImageView alloc] initWithConfig:config]; - _thirdPhotoImageView.userInteractionEnabled = YES; - _thirdPhotoImageView.layer.masksToBounds = YES; - _thirdPhotoImageView.layer.cornerRadius = 5; - _thirdPhotoImageView.hidden = YES; - } - return _thirdPhotoImageView; + _thirdPhotoImageView = [[NetImageView alloc] initWithConfig:config]; + _thirdPhotoImageView.userInteractionEnabled = YES; + _thirdPhotoImageView.layer.masksToBounds = YES; + _thirdPhotoImageView.contentMode = UIViewContentModeScaleAspectFill; + _thirdPhotoImageView.clipsToBounds = YES; + _thirdPhotoImageView.layer.cornerRadius = kGetScaleWidth(6); + _thirdPhotoImageView.hidden = YES; + } + return _thirdPhotoImageView; } - (UIView *)partLineView { - if (!_partLineView) { - _partLineView = [[UIView alloc] init]; - _partLineView.backgroundColor = [DJDKMIMOMColor dividerColor]; - } - return _partLineView; + if (!_partLineView) { + _partLineView = [[UIView alloc] init]; + _partLineView.backgroundColor = UIColorFromRGB(0xF1F1F1); + } + return _partLineView; +} +-(UIImageView *)soundView{ + if (!_soundView){ + _soundView = [UIImageView new]; + _soundView.image = kImage(@"mine_item_sound"); + } + return _soundView; +} +- (UILabel *)soundTimeView{ + if (!_soundTimeView){ + _soundTimeView = [UILabel labelInitWithText:@"0\"" font:kFontMedium(14) textColor:[UIColor whiteColor]]; + } + return _soundTimeView; +} +- (NSMutableArray *)photoViewArray { + if (!_photoViewArray) { + _photoViewArray = [NSMutableArray array]; + } + return _photoViewArray; +} +- (UIImageView *)reviewView{ + if (!_reviewView){ + _reviewView = [UIImageView new]; + _reviewView.hidden = YES; + _reviewView.image = kImage(@"mine_avatar_reviewing"); + UILabel *titleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineHeadView7") font:[UIFont systemFontOfSize:9 weight:UIFontWeightRegular] textColor:[UIColor whiteColor]]; + titleView.textAlignment = NSTextAlignmentCenter; + [_reviewView addSubview:titleView]; + [titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(_reviewView); + }]; + } + return _reviewView; } - -- (NSMutableArray *)photoViewArray { - if (!_photoViewArray) { - _photoViewArray = [NSMutableArray array]; - } - return _photoViewArray; +- (XPMineUserInfoEditMainTagView *)editTagView{ + if (!_editTagView){ + _editTagView = [[XPMineUserInfoEditMainTagView alloc]initWithFrame:CGRectZero]; + } + return _editTagView; } @end diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTagView.h b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTagView.h new file mode 100644 index 00000000..2c067e9e --- /dev/null +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTagView.h @@ -0,0 +1,21 @@ +// +// XPMineUserInfoEditTagView.h +// xplan-ios +// +// Created by duoban on 2023/2/23. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineUserInfoEditTagView : UIView +/// +@property (nonatomic,assign) BOOL isTag; +/// +@property (nonatomic,copy) NSString *title; +/// +@property (nonatomic,strong,readonly) UILabel *titleView; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTagView.m b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTagView.m new file mode 100644 index 00000000..6f06c6b6 --- /dev/null +++ b/YuMi/Modules/YMMine/View/Cell/MineInfo/XPMineUserInfoEditTagView.m @@ -0,0 +1,52 @@ +// +// XPMineUserInfoEditTagView.m +// xplan-ios +// +// Created by duoban on 2023/2/23. +// + +#import "XPMineUserInfoEditTagView.h" +@interface XPMineUserInfoEditTagView() +@property (nonatomic,strong) UILabel *titleView; +@end +@implementation XPMineUserInfoEditTagView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.titleView]; + self.layer.cornerRadius = kGetScaleWidth(9); + self.layer.masksToBounds = YES; +} +- (void)initSubViewConstraints { + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; +} +-(void)setIsTag:(BOOL)isTag{ + _isTag = isTag; + self.backgroundColor = _isTag ? [UIColor colorWithRed:58/255.0 green:213/255.0 blue:248/255.0 alpha:0.12]: UIColorFromRGB(0xF3F5F9); + _titleView.textColor = _isTag ? UIColorFromRGB(0x00C4EA):UIColorFromRGB(0x6D6B89); +} +- (void)setTitle:(NSString *)title{ + _title = title; + _titleView.text = _title; +} +#pragma mark -懒加载 +- (UILabel *)titleView{ + if (!_titleView){ + _titleView = [UILabel labelInitWithText:@"" font:kFontRegular(10) textColor:UIColorFromRGB(0x00C4EA)]; + _titleView.textAlignment = NSTextAlignmentCenter; + } + return _titleView; +} + +@end diff --git a/YuMi/Modules/YMMine/View/Guild/View/XPMineGuildViewController.m b/YuMi/Modules/YMMine/View/Guild/View/XPMineGuildViewController.m index e32bc0bd..2f7d6b0b 100644 --- a/YuMi/Modules/YMMine/View/Guild/View/XPMineGuildViewController.m +++ b/YuMi/Modules/YMMine/View/Guild/View/XPMineGuildViewController.m @@ -594,7 +594,7 @@ UIKIT_EXTERN NSString *kInviteMemeberSuccess; } ///复制id -(void)copyNameAction{ - [XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"XPMineUserInfoHeaderView3")]; + [XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"XPMineUserInfoHeaderView0")]; UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = self.clanDetailInfo.hall.ownerErbanNo; } diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.h b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.h index d8ca64c4..8cbef334 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.h +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.h @@ -1,18 +1,29 @@ // -// YMMineUserDataViewController.h -// YUMI +// XPMineUserDataViewController.h +// xplan-ios // -// Created by YUMI on 2022/4/14. +// Created by 冯硕 on 2022/4/14. // #import "MvpViewController.h" #import +#import "MonentsInfoModel.h" + NS_ASSUME_NONNULL_BEGIN @class UserInfoModel, MineSkillCardListInfoModel, XPMineUserDataViewController; +@protocol XPMineUserDataViewControllerDelegate + +///请求技能卡中有声音的技能 +- (void)xPMineUserDataViewController:(XPMineUserDataViewController *)viewController didGetVoiceSuccess:(MineSkillCardListInfoModel *)voiceCard; + +@end @interface XPMineUserDataViewController : MvpViewController @property (nonatomic,copy) NSString *userUid; ///用户信息 @property (nonatomic,strong) UserInfoModel *userInfo; +@property (nonatomic,strong) NSArray*dynamicInfo; +///代理 +@property (nonatomic,weak) id delegate; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m index 8f1f1cba..a4e80a96 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserDataViewController.m @@ -1,8 +1,8 @@ // -// YMMineUserDataViewController.m -// YUMI +// XPMineUserDataViewController.m +// xplan-ios // -// Created by YUMI on 2022/4/14. +// Created by 冯硕 on 2022/4/14. // #import "XPMineUserDataViewController.h" @@ -10,237 +10,444 @@ #import ///Tool #import "AccountInfoStorage.h" -#import "YUMIMacroUitls.h" -#import "TTPopup.h" -#import "DJDKMIMOMColor.h" -#import "YUMIHtmlUrl.h" +#import "XPMonentsLayoutConfig.h" ///View + #import "XPMineDataClanTableViewCell.h" #import "XPMineDataGiftTableViewCell.h" +#import "XPMonentsTableViewCell.h" +#import "XPMonentsEmptyTableViewCell.h" ///Model #import "ClanDetailInfoModel.h" #import "UserInfoModel.h" +#import "MineSkillCardListInfoModel.h" ///P #import "XPMineUserDataPresenter.h" #import "XPMineUserDataProtocol.h" +#import "XPMonentsMineProtocol.h" ///View + #import "XPMineUserInfoGiftWallViewController.h" #import "XPMineClanViewController.h" #import "XPMineGuildViewController.h" -#import "XPWebViewController.h" -@interface XPMineUserDataViewController () +#import "XPMonentsDetailViewController.h" +@interface XPMineUserDataViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///家族信息 @property (nonatomic,strong) ClanDetailInfoModel *clanDetailInfo; +///技能卡 +@property (nonatomic,strong) NSArray *skillArray; ///是否折叠 @property (nonatomic,assign) BOOL isFold; @property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView); ///是否展示加入家族房间 @property (nonatomic,assign) BOOL isShowEnterClan; +///数据源 +@property (nonatomic,strong) NSMutableArray *datasource; +@property (nonatomic,strong) UIView *headView; +/// +/// +@property (nonatomic,assign) BOOL isOpne; @end @implementation XPMineUserDataViewController - (BOOL)isHiddenNavBar { - return YES; + return YES; } - (__kindof id)createPresenter { - return [[XPMineUserDataPresenter alloc] init]; + return [[XPMineUserDataPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; - [self initHettpRequest]; - [self initSubViews]; - [self initSubViewConstraints]; + [self initHettpRequest]; + [self initSubViews]; + [self initSubViewConstraints]; } #pragma mark - Http - (void)initHettpRequest { - self.isFold = YES; - self.isShowEnterClan = NO; - [self.presenter getClanDetailInfo:self.userUid currentUserUid:[AccountInfoStorage instance].getUid]; + self.isOpne = self.userUid.integerValue == [[AccountInfoStorage instance]getUid].integerValue; + self.isFold = YES; + self.isShowEnterClan = NO; + [self.presenter getClanDetailInfo:self.userUid currentUserUid:[AccountInfoStorage instance].getUid]; } #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.tableView]; + [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; -} - -///实名认证弹窗 -- (void)showRealNameAuthenticationTipsAlertView { - TTAlertConfig *config = [[TTAlertConfig alloc] init]; - config.message = YMLocalizedString(@"XPMineUserDataViewController0"); - config.messageLineSpacing = 4; - config.confirmButtonConfig.title = YMLocalizedString(@"XPMineUserDataViewController1"); - config.confirmButtonConfig.titleColor = UIColor.whiteColor; - config.confirmButtonConfig.backgroundColor = [DJDKMIMOMColor appMainColor]; - - TTAlertMessageAttributedConfig *nameAttrConf = [[TTAlertMessageAttributedConfig alloc] init]; - nameAttrConf.text = YMLocalizedString(@"XPMineUserDataViewController2"); - nameAttrConf.color = [DJDKMIMOMColor appMainColor]; - config.messageAttributedConfig = @[nameAttrConf]; - - [TTPopup alertWithConfig:config confirmHandler:^{ - - } cancelHandler:^{ - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 2; + return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (section == 0) { - return (self.clanDetailInfo.clan.elderUid.length > 0 || self.clanDetailInfo.hall.ownerUid.length > 0) ? 1 : 0; - } else { - return 1; - } + if(section == 0)return 1; + return self.datasource.count > 0 ? self.datasource.count : 1;; +// if(section == 0) { +// return 1; +// }else if (section == 1) { +// return (self.clanDetailInfo.clan.elderUid.length > 0 || self.clanDetailInfo.hall.ownerUid.length > 0) ? 1 : 0; +// } else { +// return 1; +// } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if(indexPath.section == 0) { - CGFloat itemHeigh = 40 + 15; - if (self.clanDetailInfo.clan.elderUid.length > 0) { - if (self.clanDetailInfo.hall.ownerUid.length > 0) { - return self.isFold ? (itemHeigh + 68) : (itemHeigh + 68 + 60); - }else { - return (itemHeigh + 60); - } - }else { - if (self.clanDetailInfo.hall.ownerUid.length > 0) { - return (itemHeigh + 60); - } else { - return 0; - } - } - } else { - CGFloat itemHeight = 65; - CGFloat topHeight = 100; - return itemHeight * 3 + 10 * 3 + topHeight + 25; - } + if(indexPath.section == 0){ + if(self.isOpne == YES){ + if (self.clanDetailInfo.clan.elderUid.length > 0) { + return kGetScaleWidth(172); + } + return kGetScaleWidth(152); + } + return kGetScaleWidth(128); + } + if (self.datasource.count > 0) { + MonentsInfoModel * monentInfo= [self.datasource safeObjectAtIndex1:indexPath.row]; + [XPMonentsLayoutConfig getNewlayoutMonentsModelWithDynamic:monentInfo]; + if(monentInfo.content.length == 0){ + return monentInfo.rowHeight + 20; + } + return monentInfo.rowHeight; + } + return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; +} +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ + return nil; +} +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ + return 0.01; +} +-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ + if(section == 0)return 0.01; + return self.datasource.count > 0 ? 30 : 0.01; +} +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ + if(section == 0)return nil; + return self.datasource.count > 0 ? self.headView : nil; +} +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + if(indexPath.section == 0){ + XPMineDataClanTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])]; + if (cell == nil) { + cell = [[XPMineDataClanTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])]; + } + cell.isOpne = self.isOpne; + cell.isShowEnterHall = self.isShowEnterClan; + cell.delegate = self; + cell.userInfo = self.userInfo; + cell.clanInfo = self.clanDetailInfo; + return cell; + } + + if (self.datasource.count > 0) { + XPMonentsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"XPMonentsDynamicTableViewCell" forIndexPath:indexPath]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + cell.delegate = self; + cell.mineMonentsInfo = monentsInfo; + cell.isFillet = indexPath.row == self.datasource.count - 1; + return cell; + } + XPMonentsEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + return cell; +// if (indexPath.section == 0) { +// XPMineDataSkillCardTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineDataSkillCardTableViewCell class])]; +// if (cell == nil) { +// cell = [[XPMineDataSkillCardTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineDataSkillCardTableViewCell class])]; +// } +// cell.delegate = self; +// cell.datasourece = self.skillArray; +// return cell; +// } else if(indexPath.section == 1) { +// +// } else { +// XPMineDataGiftTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; +// if (cell == nil) { +// cell = [[XPMineDataGiftTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; +// } +// cell.delegate = self; +// cell.userGiftWall = self.userInfo.userGiftWall; +// cell.userLuckyBagGiftWall = self.userInfo.userLuckyBagGiftWall; +// return cell; +// } +} +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if(indexPath.section == 0)return; + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (self.datasource.count > 0) { + XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; + MonentsInfoModel * monentsInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; + if(monentsInfo.dynamicId == nil){ + return; + } + detailVC.monentsInfo = monentsInfo; + detailVC.delegate = self; + [self.navigationController pushViewController:detailVC animated:YES]; + } +} +#pragma mark - XPMonentsTableViewCellDelegate +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { + if(monentsInfo.dynamicId == nil){ + [self showErrorToast:YMLocalizedString(@"XPMineUserDataViewController2")]; + return; + } + [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; +} +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicCommon:(MonentsInfoModel *)monentsInfo{ + if(monentsInfo.dynamicId == nil){ + [self showErrorToast:YMLocalizedString(@"XPMineUserDataViewController3")]; + return; + } + XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; + detailVC.monentsInfo = monentsInfo; + detailVC.delegate = self; + [self.navigationController pushViewController:detailVC animated:YES]; +} +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { + [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsMineViewController0") confirmHandler:^{ + [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; + } cancelHandler:^{ + + }]; +} +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(nonnull MonentsInfoModel *)monentsInfo{ + + + [self showLoading]; + [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; + + +} +- (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { + __block MonentsInfoModel * monentsInfos; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { + monentsInfos = obj; + *stop = YES; + } + }]; + if (monentsInfos) { + NSInteger section = [self.datasource indexOfObject:monentsInfo]; + [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:section inSection:1]] withRowAnimation:UITableViewRowAnimationNone]; + } } -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if(indexPath.section == 0) { - XPMineDataClanTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])]; - if (cell == nil) { - cell = [[XPMineDataClanTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])]; - } - cell.isShowEnterHall = self.isShowEnterClan; - cell.delegate = self; - cell.clanInfo = self.clanDetailInfo; - return cell; - } else { - XPMineDataGiftTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; - if (cell == nil) { - cell = [[XPMineDataGiftTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; - } - cell.delegate = self; - cell.userGiftWall = self.userInfo.userGiftWall; - cell.userLuckyBagGiftWall = self.userInfo.userLuckyBagGiftWall; - return cell; - } +#pragma mark - XPMonentsDetailViewControllerDelegate +- (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == dynamicId.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } +} + +#pragma mark - XPMonentsMineProtocol +- (void)requesstShieldingSuccess:(NSString *)monentsInfo{ + [self hideHUD]; + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } +} +- (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.dynamicId isEqualToString:dynamicId]) { + NSInteger likeCount = obj.likeCount.integerValue; + if (status) { + likeCount += 1; + obj.isLike += 1; + } else { + likeCount -= 1; + obj.isLike -= 1; + } + obj.likeCount = @(likeCount).stringValue; + *stop = YES; + } + }]; + [self.tableView reloadData]; +} + +- (void)deleteMonentsSuccess:(NSString *)monentsInfo { + [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController1")]; + __block MonentsInfoModel * deleteInfo; + [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.dynamicId.integerValue == monentsInfo.integerValue) { + deleteInfo = obj; + } + }]; + + if (deleteInfo) { + [self.datasource removeObject:deleteInfo]; + [self.tableView reloadData]; + } } #pragma mark - XPMineDataClanTableViewCellDelegate - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickFold:(UIButton *)sender { - self.isFold = !sender.selected; - [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; + self.isFold = !sender.selected; + [self.tableView reloadData]; +// [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; +} +- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickOpen:(ClanDetailInfoModel *)clanInfo{ + self.isOpne = YES; + [self.tableView reloadData]; } - - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickEnter:(ClanDetailInfoModel *)clanInfo { - [self.presenter getUserInfo:[AccountInfoStorage instance].getUid success:^(UserInfoModel * _Nonnull info) { -// if (info.isCertified) { - [self.presenter memberApplyHall:clanInfo.hall.hallId]; -// } else { -// [self showRealNameAuthenticationTipsAlertView]; -// } - }]; + [self.presenter memberApplyHall:clanInfo.hall.hallId]; } - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickClanView:(ClanDetailInfoModel *)clanInfo { - XPMineClanViewController * clanVC = [[XPMineClanViewController alloc] init]; - clanVC.uid = self.clanDetailInfo.clan.elderUid; - [self.navigationController pushViewController:clanVC animated:YES]; + XPMineClanViewController * clanVC = [[XPMineClanViewController alloc] init]; + clanVC.uid = self.clanDetailInfo.clan.elderUid; + [self.navigationController pushViewController:clanVC animated:YES]; } - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickHallView:(ClanDetailInfoModel *)clanInfo { - XPMineGuildViewController * hallVC = [[XPMineGuildViewController alloc] init]; - hallVC.ownerUid = clanInfo.hall.ownerUid; - hallVC.guildId = clanInfo.hall.hallId; - [self.navigationController pushViewController:hallVC animated:YES]; + XPMineGuildViewController * hallVC = [[XPMineGuildViewController alloc] init]; + hallVC.ownerUid = clanInfo.hall.ownerUid; + hallVC.guildId = clanInfo.hall.hallId; + [self.navigationController pushViewController:hallVC animated:YES]; } #pragma mark - XPMineDataGiftTableViewCellDelegate - (void)xPMineDataGiftTableViewCell:(XPMineDataGiftTableViewCell *)view didClickMore:(UIButton *)sender { - XPMineUserInfoGiftWallViewController * giftWallVC = [[XPMineUserInfoGiftWallViewController alloc] init]; - giftWallVC.userUid = self.userUid; - [self.navigationController pushViewController:giftWallVC animated:YES]; + XPMineUserInfoGiftWallViewController * giftWallVC = [[XPMineUserInfoGiftWallViewController alloc] init]; + giftWallVC.userUid = self.userUid; + [self.navigationController pushViewController:giftWallVC animated:YES]; +} + +#pragma mark - XPMineDataSkillCardTableViewCell +- (void)xPMineDataSkillCardTableViewCell:(XPMineDataSkillCardTableViewCell *)view didSelectItem:(MineSkillCardListInfoModel *)skillInfo { + XPSkillCardViewController *skillCardVC = [[XPSkillCardViewController alloc] init]; + skillCardVC.uid = self.userUid.integerValue; + [self.navigationController pushViewController:skillCardVC animated:YES]; } #pragma mark - JXPagingViewListViewDelegate - (UIView *)listView { - return self.view; + return self.view; } - (UIScrollView *)listScrollView { - return self.tableView; + return self.tableView; } - (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { - self.scrollCallback = callback; + self.scrollCallback = callback; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { - self.scrollCallback(scrollView); + self.scrollCallback(scrollView); } #pragma mark - XPMineUserDataProtocol +- (void)getUserSkillCardListSuccess:(NSArray *)list { + NSMutableArray * array = [NSMutableArray arrayWithArray:list]; + __block MineSkillCardListInfoModel * voiceCard; + [array enumerateObjectsUsingBlock:^(MineSkillCardListInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj.cardId isEqualToString:@"8"]) { + voiceCard = obj; + *stop = YES; + } + }]; + if (voiceCard) { + [array removeObject:voiceCard]; + } + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserDataViewController:didGetVoiceSuccess:)]) { + [self.delegate xPMineUserDataViewController:self didGetVoiceSuccess:voiceCard]; + } + self.skillArray = [array copy]; + [self.tableView reloadData]; +// [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; +} + - (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo currentUserClanInfo:(ClanDetailInfoModel *)currentUserClanInfo { - self.clanDetailInfo = clanDetailInfo; - if (currentUserClanInfo.clan.elderUid.length <=0 || currentUserClanInfo.hall.ownerUid.length <=0) { - self.isShowEnterClan = YES; - } else { - self.isShowEnterClan = NO; - } - [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; + self.clanDetailInfo = clanDetailInfo; + if (clanDetailInfo.hall.hallName.length > 0 && currentUserClanInfo.hall.hallName.length <= 0 && ![[AccountInfoStorage instance].getUid isEqualToString:self.userUid]) { + self.isShowEnterClan = YES; + } else { + self.isShowEnterClan = NO; + } + [self.tableView reloadData]; +// [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone]; } - (void)memberApplyHallSuccess { - [self showSuccessToast:YMLocalizedString(@"XPMineUserDataViewController3")]; + [self showSuccessToast:YMLocalizedString(@"XPMineUserDataViewController0")]; } #pragma mark - Getters And Setters - (void)setUserInfo:(UserInfoModel *)userInfo { - _userInfo = userInfo; - [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone]; + _userInfo = userInfo; + + [self.tableView reloadData]; +} +- (void)setDynamicInfo:(NSArray *)dynamicInfo { + [self.datasource removeAllObjects]; + [self.datasource addObjectsFromArray:dynamicInfo]; + [self.tableView reloadData]; } - - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.tableFooterView = [UIView new]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMineDataGiftTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; - [_tableView registerClass:[XPMineDataClanTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; + [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:@"XPMonentsDynamicTableViewCell"]; + [_tableView registerClass:[XPMineDataClanTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])]; + } + return _tableView; +} +- (NSMutableArray *)datasource { + if (!_datasource) { + _datasource = [NSMutableArray array]; + } + return _datasource; +} +-(UIView *)headView{ + if (!_headView){ + _headView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, 30)]; + _headView.backgroundColor = [UIColor clearColor]; + UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(15, 0, KScreenWidth-30, 30)]; + [_headView addSubview:bgView]; + bgView.backgroundColor = [UIColor whiteColor]; + [bgView setCornerWithLeftTopCorner:8 rightTopCorner:8 bottomLeftCorner:0 bottomRightCorner:0 size:CGSizeMake(KScreenWidth-30, 30)]; + UILabel *titleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserDataViewController1") font:kFontMedium(15) textColor:[DJDKMIMOMColor inputTextColor]]; + [bgView addSubview:titleView]; + [titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(12); + make.left.mas_equalTo(12); + }]; + } + return _headView; } - - @end diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.h b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.h index b33e0a6d..20ce8805 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.h +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.h @@ -1,15 +1,28 @@ // -// YMMineUserInfoEditViewController.h -// YUMI +// XPMineUserInfoEditViewController.h +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import "MvpViewController.h" - +#import "XPSoundCardModel.h" +#import "XPMineUserInfoTagModel.h" NS_ASSUME_NONNULL_BEGIN -@interface XPMineUserInfoEditViewController : MvpViewController +@class XPMineUserInfoEditViewController; +@protocol XPMineUserInfoEditViewControllerDelegate +- (void)xPMineUserInfoEditViewControllerC:(XPMineUserInfoEditViewController *)vc didClickComplete:(NSString *)meLabels; +- (void)xPMineUserInfoEditViewControllerC:(XPMineUserInfoEditViewController *)vc didClickCompleteArea:(NSString *)area; +@end +@interface XPMineUserInfoEditViewController : MvpViewController +@property (nonatomic,strong) XPMineUserInfoTagModel *tagModel; +@property (nonatomic,strong) XPSoundCardModel * __nullable soundModel; +@property (nonatomic,copy) NSString *uid; +/// +@property (nonatomic,copy) NSString *area; +/// +@property (nonatomic,weak) id delegate; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m index a0fe5c78..4f59dbfa 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m @@ -1,8 +1,8 @@ // -// YMMineUserInfoEditViewController.m -// YUMI +// XPMineUserInfoEditViewController.m +// xplan-ios // -// Created by YUMI on 2021/9/23. +// Created by 冯硕 on 2021/9/23. // #import "XPMineUserInfoEditViewController.h" @@ -10,17 +10,17 @@ #import #import ///Tool -#import "DJDKMIMOMColor.h" + #import "TTPopup.h" #import "YYUtility.h" -#import "YUMIMacroUitls.h" -#import "NSArray+Safe.h" + ///Model #import "XPMineUserInfoEditModel.h" #import "UserInfoModel.h" ///View #import "XPMineUserInfoEditTableViewCell.h" #import "XPMineUserInfoDateView.h" +#import "XPMineUserInfoEditPickView.h" ///P #import "XPMineUserInfoEditProtocol.h" #import "XPMineUserInfoEditPresenter.h" @@ -28,8 +28,12 @@ #import "XPMineUserInfoNickViewController.h" #import "XPMineUserInfoDesViewController.h" #import "XPMineUserInfoAlbumViewController.h" +#import "XPMineUserInfoRecordedSoundVC.h" +#import "XPMineUserInfoTagVC.h" -@interface XPMineUserInfoEditViewController () +UIKIT_EXTERN NSString * kUpdateSoundInfo; + +@interface XPMineUserInfoEditViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///数据源 @@ -38,136 +42,193 @@ @property (nonatomic,strong) XPMineUserInfoDateView *dateView; ///用户信息 @property (nonatomic,strong) UserInfoModel *userInfo; +///地区列表 +@property (nonatomic,strong) NSMutableArray *areaList; +///标签 +@property (nonatomic,strong) NSMutableArray *tagList; +/// +@property (nonatomic,assign) CGFloat maxWidth; + @end @implementation XPMineUserInfoEditViewController - +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} - (XPMineUserInfoEditPresenter *)createPresenter { - return [[XPMineUserInfoEditPresenter alloc] init]; + return [[XPMineUserInfoEditPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; - [self initSubViews]; - [self initSubViewConstraints]; + self.areaList = [NSMutableArray array]; + [self initSubViews]; + [self initSubViewConstraints]; + [self getAreaList]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(updateSoundInfo:) name:kUpdateSoundInfo object:nil]; +} +-(void)getAreaList{ + + [self.presenter getAreaList]; +} +-(void)updateSoundInfo:(NSNotification *)not{ + if(not.object != nil){ + self.soundModel = not.object; + }else{ + self.soundModel = nil; + } + [self.tableView reloadData]; } - - (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; + [super viewWillAppear:animated]; [self.presenter getUserInfo]; } #pragma mark - Private Method - (void)initSubViews { - self.title = YMLocalizedString(@"XPMineUserInfoEditViewController0"); - [self.view addSubview:self.tableView]; + self.view.backgroundColor = [UIColor whiteColor]; + self.title = YMLocalizedString(@"XPMineUserInfoEditViewController0"); + [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.view); - }]; + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; } - (void)showPhotoView { - @weakify(self); - TTActionSheetConfig *cameraConfig = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoEditViewController1") clickAction:^{ - [YYUtility checkCameraAvailable:^{ - @strongify(self); - UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; - imagePicker.delegate = self; - imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; - imagePicker.allowsEditing = YES; - [self presentViewController:imagePicker animated:YES completion:NULL]; - } denied:^{ - @strongify(self); - [self showNotPhoto:YMLocalizedString(@"SessionViewController19") content:YMLocalizedString(@"XPMineUserInfoEditViewController3")]; - } restriction:^{ - @strongify(self); - [self showNotPhoto:YMLocalizedString(@"SessionViewController19") content:YMLocalizedString(@"XPMineUserInfoEditViewController5")]; - }]; - }]; - - TTActionSheetConfig *photoLibrayConfig = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoEditViewController6") clickAction:^{ - [YYUtility checkAssetsLibrayAvailable:^{ - @strongify(self); - UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; - imagePicker.modalPresentationCapturesStatusBarAppearance = YES; - imagePicker.delegate = self; - imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; - imagePicker.allowsEditing = YES; - [self presentViewController:imagePicker animated:YES completion:NULL]; - } denied:^{ - @strongify(self); - [self showNotPhoto:YMLocalizedString(@"SessionViewController21") content:YMLocalizedString(@"XPMineUserInfoEditViewController8")]; - } restriction:^{ - @strongify(self); - [self showNotPhoto:YMLocalizedString(@"SessionViewController21") content:YMLocalizedString(@"XPMineUserInfoEditViewController10")]; - }]; - }]; + @weakify(self); + TTActionSheetConfig *cameraConfig = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoEditViewController1") clickAction:^{ + [YYUtility checkCameraAvailable:^{ + @strongify(self); + UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; + imagePicker.delegate = self; + imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; + imagePicker.allowsEditing = YES; + [self presentViewController:imagePicker animated:YES completion:NULL]; + } denied:^{ + @strongify(self); + [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController2") content:YMLocalizedString(@"XPMineUserInfoEditViewController3")]; + } restriction:^{ + @strongify(self); + [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController4") content:YMLocalizedString(@"XPMineUserInfoEditViewController5")]; + }]; + }]; + + TTActionSheetConfig *photoLibrayConfig = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoEditViewController6") clickAction:^{ + [YYUtility checkAssetsLibrayAvailable:^{ + @strongify(self); + UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; + imagePicker.modalPresentationCapturesStatusBarAppearance = YES; + imagePicker.delegate = self; + imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + imagePicker.allowsEditing = YES; + [self presentViewController:imagePicker animated:YES completion:NULL]; + } denied:^{ + @strongify(self); + [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController7") content:YMLocalizedString(@"XPMineUserInfoEditViewController8")]; + } restriction:^{ + @strongify(self); + [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController9") content:YMLocalizedString(@"XPMineUserInfoEditViewController10")]; + }]; + }]; - [TTPopup actionSheetWithItems:@[cameraConfig, photoLibrayConfig]]; + [TTPopup actionSheetWithItems:@[cameraConfig, photoLibrayConfig]]; } - (void)showNotPhoto:(NSString *)title content:(NSString *)content { - TTAlertConfig *config = [[TTAlertConfig alloc] init]; - config.title = title; - config.message = content; - - [TTPopup alertWithConfig:config confirmHandler:^{ - NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; - if ([[UIApplication sharedApplication] canOpenURL:url]) { - [[UIApplication sharedApplication] openURL:url]; - } - } cancelHandler:^{ - }]; + TTAlertConfig *config = [[TTAlertConfig alloc] init]; + config.title = title; + config.message = content; + + [TTPopup alertWithConfig:config confirmHandler:^{ + NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + if ([[UIApplication sharedApplication] canOpenURL:url]) { + [[UIApplication sharedApplication] openURL:url]; + } + } cancelHandler:^{ + }]; } - (void)showDatePickerView { - self.dateView.time = self.userInfo.birth/1000; - [TTPopup popupView:self.dateView style:TTPopupStyleActionSheet]; + self.dateView.time = self.userInfo.birth/1000; + [TTPopup popupView:self.dateView style:TTPopupStyleActionSheet]; +} +#pragma mark - XPMineUserInfoTagVCDelegate +- (void)xPMineUserInfoTagVC:(XPMineUserInfoTagVC *)vc didClickComplete:(NSArray *)meLabels{ + self.tagModel.meLabels = meLabels; + self.tagList = [NSMutableArray array]; + CGFloat maxWidth = 0; + self.maxWidth = 0; + for (int i = 0; i < meLabels.count; i++) { + XPMineUserInfoTagItemModel *model = [XPMineUserInfoTagItemModel new]; + NSString *text = meLabels[i]; + model.label = text; + CGRect stringRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, kGetScaleWidth(18)) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFontRegular(10)} context:nil]; + CGFloat width = stringRect.size.width + kGetScaleWidth(14); + model.width = width; + maxWidth = maxWidth + width; + if(maxWidth < kGetScaleWidth(220)){ + self.maxWidth = maxWidth; + [self.tagList addObject:model]; + } + + } + [self.tableView reloadData]; + if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoEditViewControllerC:didClickComplete:)]){ + [self.delegate xPMineUserInfoEditViewControllerC:self didClickComplete:@""]; + } } - #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; + return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.datasouce.count; + return self.datasouce.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; - if (model.type == XPMineUserInfoEditType_Avatar) { - return 60; - } else { - return 50; - } + XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; + if (model.type == XPMineUserInfoEditType_Avatar) { + return kGetScaleWidth(80); + } else { + return kGetScaleWidth(60); + } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - XPMineUserInfoEditTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; - if (cell == nil) { - cell = [[XPMineUserInfoEditTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; - } - XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; - cell.itmeModel = model; - return cell; + XPMineUserInfoEditTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; + if (cell == nil) { + cell = [[XPMineUserInfoEditTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; + } + XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; + if(model.type == XPMineUserInfoEditType_Tag){ + cell.itemList = self.tagList; + cell.maxWidth = self.maxWidth + self.tagList.count * kGetScaleWidth(5); + model.subTitle = self.tagList.count > 0 ? @"":YMLocalizedString(@"XPMineUserInfoEditPresenter9"); + }else if(model.type == XPMineUserInfoEditType_Area){ + model.subTitle = self.area; + } + + cell.itmeModel = model; + cell.soundModel = self.soundModel; + return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; - switch (model.type) { - case XPMineUserInfoEditType_Nick: - { - XPMineUserInfoNickViewController * nickVC = [[XPMineUserInfoNickViewController alloc] init]; - nickVC.delegate = self; - nickVC.nick = self.userInfo.nick; - [self.navigationController pushViewController:nickVC animated:YES]; - } - break; + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; + switch (model.type) { + case XPMineUserInfoEditType_Nick: + { + XPMineUserInfoNickViewController * nickVC = [[XPMineUserInfoNickViewController alloc] init]; + nickVC.delegate = self; + nickVC.nick = self.userInfo.nick; + [self.navigationController pushViewController:nickVC animated:YES]; + } + break; case XPMineUserInfoEditType_Avatar: { if (self.userInfo.isReview) { [self showErrorToast:YMLocalizedString(@"XPMineUserInfoEditViewController11")]; @@ -175,79 +236,111 @@ [self showPhotoView]; } } - break; - case XPMineUserInfoEditType_Birth: - [self showDatePickerView]; - break; - case XPMineUserInfoEditType_UseDes: - { - XPMineUserInfoDesViewController * desVC = [[XPMineUserInfoDesViewController alloc] init]; - desVC.delegate = self; - desVC.userDesc = self.userInfo.userDesc; - [self.navigationController pushViewController:desVC animated:YES]; - } - break; - case XPMineUserInfoEditType_Photo: - { - XPMineUserInfoAlbumViewController * albumVC = [[XPMineUserInfoAlbumViewController alloc] init]; - [self.navigationController pushViewController:albumVC animated:YES]; - } - break; - - default: - break; - } + break; + case XPMineUserInfoEditType_Birth: + [self showDatePickerView]; + break; + case XPMineUserInfoEditType_UseDes: + { + XPMineUserInfoDesViewController * desVC = [[XPMineUserInfoDesViewController alloc] init]; + desVC.delegate = self; + desVC.userDesc = self.userInfo.userDesc; + [self.navigationController pushViewController:desVC animated:YES]; + } + break; + case XPMineUserInfoEditType_Photo: + { + XPMineUserInfoAlbumViewController * albumVC = [[XPMineUserInfoAlbumViewController alloc] init]; + [self.navigationController pushViewController:albumVC animated:YES]; + } + break; + case XPMineUserInfoEditType_Sound: + { + XPMineUserInfoRecordedSoundVC *vc = [XPMineUserInfoRecordedSoundVC new]; + vc.soundModel = self.soundModel; + [self.navigationController pushViewController:vc animated:YES]; + break; + } + case XPMineUserInfoEditType_Tag: + { + XPMineUserInfoTagVC *tagVC =[XPMineUserInfoTagVC new]; + tagVC.tagModel = self.tagModel; + tagVC.delegate = self; + [self.navigationController pushViewController:tagVC animated:YES]; + break; + } + case XPMineUserInfoEditType_Area: + { + XPMineUserInfoEditPickView *pckView = [[XPMineUserInfoEditPickView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + pckView.area = self.area; + + pckView.dataArray = self.areaList; + pckView.delegate = self; + [kWindow addSubview:pckView]; + break; + } + default: + break; + } } #pragma mark - UIImagePickerControllerDelegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { - UIImage *selectedPhoto = [info objectForKey:UIImagePickerControllerEditedImage]; - if (selectedPhoto) { - if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { - UIImageWriteToSavedPhotosAlbum(selectedPhoto, nil, nil, nil); - } - [self.presenter uploadAvatar:selectedPhoto]; - } - [picker dismissViewControllerAnimated:YES completion:^{}]; + UIImage *selectedPhoto = [info objectForKey:UIImagePickerControllerEditedImage]; + if (selectedPhoto) { + if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { + UIImageWriteToSavedPhotosAlbum(selectedPhoto, nil, nil, nil); + } + [self.presenter uploadAvatar:selectedPhoto]; + } + [picker dismissViewControllerAnimated:YES completion:^{}]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ - [picker dismissViewControllerAnimated:YES completion:^{ - }]; + [picker dismissViewControllerAnimated:YES completion:^{ + }]; } #pragma mark - XPMineUserInfoDateViewDelegate - (void)xPMineUserInfoDateView:(XPMineUserInfoDateView *)view didClickSureButton:(NSString *)dateStr{ - [TTPopup dismiss]; - if (dateStr.length > 0) { - [self.presenter complectionInfoWithAvatar:nil nick:nil birth:dateStr userDesc:nil]; - } + [TTPopup dismiss]; + if (dateStr.length > 0) { + [self.presenter complectionInfoWithAvatar:nil nick:nil birth:dateStr userDesc:nil]; + } } - (void)xPMineUserInfoDateView:(XPMineUserInfoDateView *)view didClickCancleButton:(UIButton *)sender { - [TTPopup dismiss]; + [TTPopup dismiss]; } #pragma mark - XPMineUserInfoNickViewControllerDelegate - (void)xPMineUserInfoNickViewController:(XPMineUserInfoNickViewController *)viewController updateNick:(NSString *)nick { - if (nick.length > 0) { - [self.presenter complectionInfoWithAvatar:nil nick:nick birth:nil userDesc:nil]; - } + if (nick.length > 0) { + [self.presenter complectionInfoWithAvatar:nil nick:nick birth:nil userDesc:nil]; + } } #pragma mark - XPMineUserInfoDesViewControllerDelegate - (void)xPMineUserInfoDesViewController:(XPMineUserInfoDesViewController *)viewController updateUserDes:(NSString *)userDes { - if (userDes.length > 0) { - [self.presenter complectionInfoWithAvatar:nil nick:nil birth:nil userDesc:userDes]; - } + if (userDes.length > 0) { + [self.presenter complectionInfoWithAvatar:nil nick:nil birth:nil userDesc:userDes]; + } } #pragma mark - XPMineUserInfoEditProtocol - (void)getUserInfoEditDataSourceSuccess:(NSArray *)array { - self.datasouce = array; - [self.tableView reloadData]; + self.datasouce = array; + [self.tableView reloadData]; +} +-(void)getAreaListSuccess:(NSArray *)list{ + self.areaList = [list mutableCopy]; +} +- (void)saveAreaSuccess{ + if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoEditViewControllerC:didClickCompleteArea:)]){ + [self.delegate xPMineUserInfoEditViewControllerC:self didClickCompleteArea:self.area]; + } + [self.tableView reloadData]; } - - (void)completeUserInfoSuccess:(UserInfoModel *)userInfo { if (userInfo.isReview) { [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoEditViewController12")]; @@ -262,37 +355,68 @@ } - (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo { - self.userInfo = userInfo; - [self.presenter getUserInfoEditDataSourceWithUserInfo:self.userInfo]; + self.userInfo = userInfo; + [self.presenter getUserInfoEditDataSourceWithUserInfo:self.userInfo]; } - (void)uploadImageSuccess:(NSString *)url { - [self.presenter complectionInfoWithAvatar:url nick:nil birth:nil userDesc:nil]; + [self.presenter complectionInfoWithAvatar:url nick:nil birth:nil userDesc:nil]; +} +#pragma mark - XPMineUserInfoEditPickView +- (void)didClickSureActionWithArea:(NSString *)area{ + self.area = area; + [self.presenter saveAreaConfigWithArea:area]; } #pragma mark - Getters And Setters +-(void)setSoundModel:(XPSoundCardModel *)soundModel{ + _soundModel = soundModel; + [self.tableView reloadData]; +} +-(void)setTagModel:(XPMineUserInfoTagModel *)tagModel{ + _tagModel = tagModel; + NSArray *meLabels = _tagModel.meLabels; + self.tagList = [NSMutableArray array]; + CGFloat maxWidth = 0 ; + self.maxWidth = 0; + for (int i = 0; i < meLabels.count; i++) { + XPMineUserInfoTagItemModel *model = [XPMineUserInfoTagItemModel new]; + NSString *text = meLabels[i]; + model.label = text; + CGRect stringRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, kGetScaleWidth(18)) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFontRegular(10)} context:nil]; + CGFloat width = stringRect.size.width + kGetScaleWidth(14); + model.width = width; + maxWidth = maxWidth + width; + if(maxWidth < kGetScaleWidth(220)){ + self.maxWidth = maxWidth; + [self.tagList addObject:model]; + } + + } + [self.tableView reloadData]; +} - (UITableView *)tableView { - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.tableFooterView = [UIView new]; - _tableView.tableHeaderView = [UIView new]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.backgroundColor = [UIColor clearColor]; - if (@available(iOS 11.0, *)) { - _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - } - [_tableView registerClass:[XPMineUserInfoEditTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; - } - return _tableView; + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.tableHeaderView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMineUserInfoEditTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; + } + return _tableView; } - (XPMineUserInfoDateView *)dateView { - if (!_dateView) { - _dateView = [[XPMineUserInfoDateView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 216+kSafeAreaBottomHeight+54)]; - _dateView.delegate = self; - } - return _dateView; + if (!_dateView) { + _dateView = [[XPMineUserInfoDateView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 216+kSafeAreaBottomHeight+54)]; + _dateView.delegate = self; + } + return _dateView; } @end diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.h b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.h index cc5b4936..c3731317 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.h +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.h @@ -1,8 +1,8 @@ // // MineInfoViewController.h -// YUMI +// xplan-ios // -// Created by YUMI on 2021/9/22. +// Created by 冯硕 on 2021/9/22. // #import "MvpViewController.h" @@ -12,6 +12,9 @@ NS_ASSUME_NONNULL_BEGIN ///用户的id @property (nonatomic,assign) NSInteger uid; +@property (nonatomic,assign) BOOL isFormCandyTree; + + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.m b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.m index 80398c1b..87b20d11 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.m +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoViewController.m @@ -1,8 +1,8 @@ // // MineInfoViewController.m -// YUMI +// xplan-ios // -// Created by YUMI on 2021/9/22. +// Created by 冯硕 on 2021/9/22. // #import "XPMineUserInfoViewController.h" @@ -13,26 +13,26 @@ #import #import #import +#import +#import ///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" #import "AccountInfoStorage.h" #import "TTPopup.h" -#import "YUMIHtmlUrl.h" #import "XPSkillCardPlayerManager.h" #import "UIImage+Utils.h" -#import "YUMIConstant.h" -#import "NIMMessageUtils.h" -#import "ClientConfig.h" -#import "XNDJTDDLoadingTool.h" +#import "CountDownHelper.h" ///Model #import "MineSkillCardListInfoModel.h" #import "UserInfoModel.h" +#import "XPSoundCardModel.h" +#import "XPMineUserInfoTagModel.h" +#import "UploadFile.h" ///View #import "XPMineUserInfoTableViewCell.h" #import "XPMineUserInfoHeaderView.h" #import "XPMineUserInfoCustomNavView.h" #import "XPMineUserInfoVoiceCardView.h" +#import "XPMineUserInfoIndividualTagView.h" ///P #import "XPMineUserInfoPresenter.h" #import "XPMineUserInfoProtocol.h" @@ -44,8 +44,14 @@ #import "XPRoomViewController.h" #import "XPMineUserDataViewController.h" #import "XPMonentsMineViewController.h" +#import "XPGiftUserDataViewController.h" +#import "XPMineUserInfoRecordedSoundVC.h" +#import "XPRoomMiniManager.h" +#import "XPMineUserInfoTagVC.h" -@interface XPMineUserInfoViewController () +UIKIT_EXTERN NSString * kUpdateSoundInfo; + +@interface XPMineUserInfoViewController () @property (nonatomic, strong) JXCategoryTitleView *titleView; @property (nonatomic, strong) JXCategoryIndicatorImageView *lineView; @property (nonatomic, strong) JXPagerView *pagingView; @@ -65,429 +71,616 @@ ///资料 @property (nonatomic,strong) XPMineUserDataViewController *userDataVC; ///动态 -@property (nonatomic,strong) XPMonentsMineViewController *monentsVC; +//@property (nonatomic,strong) XPMonentsMineViewController *monentsVC; +///禮物牆 +@property (nonatomic,strong) XPGiftUserDataViewController *giftVC; +///编辑资料 +@property (nonatomic,strong) XPMineUserInfoEditViewController * editVC ; ///声音秀 @property (nonatomic,strong) XPMineUserInfoVoiceCardView *voiceView; +///倒计时 +@property (nonatomic,strong) CountDownHelper *countDownHelper; +///标签 +@property (nonatomic,strong) XPMineUserInfoTagModel *tagModel; + @end @implementation XPMineUserInfoViewController - +- (void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} - (XPMineUserInfoPresenter *)createPresenter { - return [[XPMineUserInfoPresenter alloc] init]; + return [[XPMineUserInfoPresenter alloc] init]; } - (BOOL)isHiddenNavBar { - return YES; + return YES; } + +-(void)viewDidAppear:(BOOL)animated{ + [super viewDidAppear:animated]; + self.countDownHelper .delegate = self; + +} + + +-(void)viewDidDisappear:(BOOL)animated{ + [super viewDidAppear:animated]; + [self.countDownHelper stopCountDown]; + self.countDownHelper .delegate = nil; + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + [self.headView setPlaySoundStatus:NO]; + + +} +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + if (self.uid > 0) { + [self initHttpRequest]; + } + if([XPSkillCardPlayerManager shareInstance].isInRoom == YES && [XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge == NO){ + [XPSkillCardPlayerManager shareInstance].isInRoomFirstRecharge = YES; + } +} + + - (void)viewDidLoad { [super viewDidLoad]; - [self initSubViews]; - [self initSubViewConstraints]; + [self initSubViews]; + [self initSubViewConstraints]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(updateSoundInfo:) name:kUpdateSoundInfo object:nil]; +} +-(void)updateSoundInfo:(NSNotification *)not{ + if(not.object != nil){ + self.headView.soundModel = not.object; + NSString *fileName = [[ self.headView.soundModel.audioUrl componentsSeparatedByString:@"/"] lastObject]; + NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) safeObjectAtIndex1:0] stringByAppendingPathComponent:@"kMineSoundCard"]; + NSString *fullPath = [filePath stringByAppendingPathComponent:fileName]; + if (![[NSFileManager defaultManager] fileExistsAtPath:fullPath]) { + NSFileManager *fileMgr = [[NSFileManager alloc] init]; + [fileMgr createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil]; + [UploadFile downloadAudioWithFileName:fileName musicUrl:self.headView.soundModel.audioUrl mainFileName:@"kMineSoundCard" completion:^(BOOL isSuccess, NSString *editAudioPath) { + }]; + } + }else{ + self.headView.soundModel = nil; + } + } -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - if (self.uid > 0) { - [self initHttpRequest]; - } -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - if (self.voiceView.isPlaying) { - [[XPSkillCardPlayerManager shareInstance] stopMusic]; - } -} - (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - self.pagingView.frame = self.view.bounds; + [super viewDidLayoutSubviews]; + self.pagingView.frame = self.view.bounds; } #pragma mark - Private Method - (void)initSubViews { - [self.view addSubview:self.pagingView]; - [self.view addSubview:self.navView]; - [self.view addSubview:self.voiceView]; - if (self.uid != [AccountInfoStorage instance].getUid.integerValue) { - [self.view addSubview:self.bottomStackView]; - [self.bottomStackView addArrangedSubview:self.chatButton]; - [self.bottomStackView addArrangedSubview:self.attentionButton]; - - [self.bottomStackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.view).inset(25); - make.height.mas_equalTo(36); - make.bottom.mas_equalTo(self.view).offset(-kSafeAreaBottomHeight - 15); - }]; - } + [self.view addSubview:self.pagingView]; + [self.view addSubview:self.navView]; + [self.view addSubview:self.voiceView]; + if (self.uid != [AccountInfoStorage instance].getUid.integerValue) { + [self.view addSubview:self.bottomStackView]; + [self.bottomStackView addArrangedSubview:self.chatButton]; + [self.bottomStackView addArrangedSubview:self.attentionButton]; + + [self.bottomStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.view).inset(15); + make.height.mas_equalTo(45); + make.bottom.mas_equalTo(self.view).offset(-kSafeAreaBottomHeight - 15); + }]; + } + } - (void)initSubViewConstraints { - [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.mas_equalTo(self.view); - make.height.mas_equalTo(kNavigationHeight); - }]; - - [self.voiceView mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.mas_equalTo(self.view); - make.top.mas_equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(176); - make.size.mas_equalTo(CGSizeMake(65, 25)); - }]; + [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self.view); + make.height.mas_equalTo(kNavigationHeight); + }]; + + [self.voiceView mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(self.view); + make.top.mas_equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(176); + make.size.mas_equalTo(CGSizeMake(65, 25)); + }]; } - (void)initHttpRequest { - NSString *uid = [NSString stringWithFormat:@"%ld", self.uid]; + NSString *uid = [NSString stringWithFormat:@"%ld", self.uid]; + [self.presenter getUserInfoWithUid:uid]; + + [self.presenter getUserAttentionState:uid]; - ///请求目标用户的个人信息 - [self.presenter getUserInfoWithUid:uid]; - - [self.presenter getUserAttentionState:uid]; + //获取用户详细信息 跟随进房目前使用的这个接口 + [self.presenter getUserDetailInfoWithUid:uid]; - //获取用户详细信息 跟随进房目前使用的这个接口 - [self.presenter getUserDetailInfoWithUid:uid]; - - NSString * myUid = [AccountInfoStorage instance].getUid; ///上传访问记录 - if (![uid isEqualToString:myUid]) { - ///请求我自己的个人信息 - [self.presenter getUserInfoWithUid:myUid]; + if (![uid isEqualToString:[[AccountInfoStorage instance] getUid]]) { + [self.presenter visitUser:uid]; } } #pragma mark - 拉黑 移除黑名单 +- (BOOL)isSystemAccount { + return [KeyWithType(KeyType_SecretaryUidKey) isEqualToString:[NSString stringWithFormat:@"%ld", self.uid]] || [KeyWithType(KeyType_SystemNotifiUidKey) isEqualToString:[NSString stringWithFormat:@"%ld", self.uid]] || [KeyWithType(KeyType_GuildUidKey) isEqualToString:[NSString stringWithFormat:@"%ld", self.uid]]; +} + + - (void)showRightNavHandle { - NSMutableArray *array = [NSMutableArray array]; - NSString *uid = [NSString stringWithFormat:@"%ld",self.uid]; - TTActionSheetConfig *report = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoViewController0") clickAction:^{ - if ([ClientConfig shareConfig].canOpen) { - XPWebViewController *vc = [[XPWebViewController alloc]init]; - NSString *urlstr = [NSString stringWithFormat:@"%@?reportUid=%@&source=PERSONAL",URLWithType(kReportRoomURL),uid]; - vc.url = urlstr; - [self.navigationController pushViewController:vc animated:YES]; - } else { - [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPMineUserInfoViewController1")]; - } + NSMutableArray *array = [NSMutableArray array]; + NSString *uid = [NSString stringWithFormat:@"%ld",self.uid]; + TTActionSheetConfig *report = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoViewController0") clickAction:^{ + XPWebViewController *vc = [[XPWebViewController alloc]init]; + NSString *urlstr = [NSString stringWithFormat:@"%@?reportUid=%@&source=PERSONAL",URLWithType(kReportRoomURL),uid]; + vc.url = urlstr; + [self.navigationController pushViewController:vc animated:YES]; + }]; - }]; + TTActionSheetConfig *black = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoViewController1") clickAction:^{ + [self addOrRemoveBlack:NO uid:uid]; + }]; - TTActionSheetConfig *black = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoViewController2") clickAction:^{ - [self addOrRemoveBlack:NO uid:uid]; - }]; + [array addObjectsFromArray:@[report, black]]; - [array addObjectsFromArray:@[report, black]]; - - BOOL isInBlackList = [[NIMSDK sharedSDK].userManager isUserInBlackList:uid] || [NIMMessageUtils isOfficalAccount:[NSString stringWithFormat:@"%ld", self.uid]]; - if (isInBlackList) { - [array removeObject:black]; - } - [TTPopup actionSheetWithItems:array]; + BOOL isInBlackList = [[NIMSDK sharedSDK].userManager isUserInBlackList:uid] || [self isSystemAccount]; + if (isInBlackList) { + [array removeObject:black]; + } + [TTPopup actionSheetWithItems:array]; } //加入黑名单 - (void)addOrRemoveBlack:(BOOL)isRemove uid:(NSString *)uid { - NSString *title; - NSString *message; - if (isRemove) { - title = YMLocalizedString(@"XPMineUserInfoViewController3"); - message = YMLocalizedString(@"XPMineUserInfoViewController4"); - }else{ - title = YMLocalizedString(@"XPMineUserInfoViewController5"); - message = YMLocalizedString(@"XPMineUserInfoViewController6"); - } + NSString *title; + NSString *message; + if (isRemove) { + title = YMLocalizedString(@"XPMineUserInfoViewController2"); + message = YMLocalizedString(@"XPMineUserInfoViewController3"); + }else{ + title = YMLocalizedString(@"XPMineUserInfoViewController4"); + message = YMLocalizedString(@"XPMineUserInfoViewController5"); + } - TTAlertConfig *config = [[TTAlertConfig alloc] init]; - config.title = title; - config.message = message; + TTAlertConfig *config = [[TTAlertConfig alloc] init]; + config.title = title; + config.message = message; - [TTPopup alertWithConfig:config confirmHandler:^{ - if (isRemove) { - [[NIMSDK sharedSDK].userManager removeFromBlackBlackList:uid completion:^(NSError * _Nullable error) { - if (error == nil) { - [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoViewController7")]; - } - }]; - } else { - [[NIMSDK sharedSDK].userManager addToBlackList:uid completion:^(NSError * _Nullable error) { - if (error == nil) { - [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoViewController8")]; - } - }]; - } - } cancelHandler:^{ - }]; + [TTPopup alertWithConfig:config confirmHandler:^{ + if (isRemove) { + [[NIMSDK sharedSDK].userManager removeFromBlackBlackList:uid completion:^(NSError * _Nullable error) { + if (error == nil) { + [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoViewController6")]; + } + }]; + } else { + [[NIMSDK sharedSDK].userManager addToBlackList:uid completion:^(NSError * _Nullable error) { + if (error == nil) { + [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoViewController7")]; + } + }]; + } + } cancelHandler:^{ + }]; } #pragma mark - JXCategoryViewDelegate - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView { - return 440; + return 358; } - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView { - return self.headView; + return self.headView; } - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { - return 50; + return 50; } - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { - return self.titleView; + return self.titleView; } - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView { - return self.titles.count; + return self.titles.count; } - (id)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index { - UIViewController *viewController; - if (index == 0) { - return self.userDataVC; - } else { - return self.monentsVC; - } - return (id )viewController; + UIViewController *viewController; + if (index == 0) { + return self.userDataVC; + } + else{ + return self.giftVC; + } + return (id )viewController; } #pragma mark - JXPagerMainTableViewGestureDelegate - (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - ///1000是外部的scrollView 1001是人气主播中的collectionView - if (otherGestureRecognizer.view.tag == 1005 || otherGestureRecognizer.view.tag == 1009) { - return NO; - } - return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]; + ///1000是外部的scrollView 1001是人气主播中的collectionView + if (otherGestureRecognizer.view.tag == 1005 || otherGestureRecognizer.view.tag == 1009) { + return NO; + } + return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]; } #pragma mark - XPMineCustomNavViewDelegate - (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickEditButton:(UIButton *)sender { - if (sender.isSelected) {///自己看自己的 去修改资料 - XPMineUserInfoEditViewController * editVC = [[XPMineUserInfoEditViewController alloc] init]; - [self.navigationController pushViewController:editVC animated:YES]; - } else { - [self showRightNavHandle]; - } + if (sender.isSelected) {///自己看自己的 去修改资料 + self.editVC.area = self.userInfo.region; + [self.navigationController pushViewController:self.editVC animated:YES]; + } else { + [self showRightNavHandle]; + } } - (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickBackButton:(UIButton *)sender { - [self.navigationController popViewControllerAnimated:YES]; + [self.navigationController popViewControllerAnimated:YES]; } #pragma mark - XPMineUserInfoHeaderViewDelegate -- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickGoToRoom:(NSString *)roomUid { - if (roomUid.length > 0 ) { - //退出原来的房间 如果有的话 TODO 总感觉这种处理不太优雅 进房入口多了 怎么办 进房需要整合 - [self.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj isKindOfClass:[XPRoomViewController class]]) { - [self.navigationController popToRootViewControllerAnimated:NO]; - XPRoomViewController * rooomVC = obj; - [rooomVC exitRoom]; - *stop = YES; - } - }]; - [XPRoomViewController openRoom:roomUid viewController:self]; - } +- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickGotoEditVC:(nonnull NSMutableArray *)itemList{ + + XPMineUserInfoTagVC *tagVC =[XPMineUserInfoTagVC new]; + tagVC.tagModel = self.tagModel; + tagVC.delegate = self; + [self.navigationController pushViewController:tagVC animated:YES]; +} +- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickGotoEditView:(NSMutableArray *)itemList{ + XPMineUserInfoIndividualTagView *tagView = [[XPMineUserInfoIndividualTagView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + tagView.uid = @(self.uid).stringValue; + tagView.itemList = itemList; + tagView.delegate = self; + [TTPopup popupView:tagView style:TTPopupStyleAlert]; +} + +-(void)didClickGoToPlaySound{ + XPMineUserInfoRecordedSoundVC *soundVC = [[XPMineUserInfoRecordedSoundVC alloc]init]; + soundVC.soundModel = self.headView.soundModel; + [self.navigationController pushViewController:soundVC animated:YES]; +} +- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickPlaySound:(BOOL)isPlay{ + + if(isPlay == YES){ + NSString *fileName = [[self.headView.soundModel.audioUrl componentsSeparatedByString:@"/"] lastObject]; + NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) safeObjectAtIndex1:0] stringByAppendingPathComponent:@"kMineSoundCard"]; + NSString *fullPath = [filePath stringByAppendingPathComponent:fileName]; + if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath]) { + [self playAudioWithUrl:fullPath isDelay:[XPSkillCardPlayerManager shareInstance].isMineInMic]; + }else{ + if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { + NSFileManager *fileMgr = [[NSFileManager alloc] init]; + [fileMgr createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil]; + } + [UploadFile downloadAudioWithFileName:fileName musicUrl:self.headView.soundModel.audioUrl mainFileName:@"kMineSoundCard" completion:^(BOOL isSuccess, NSString *editAudioPath) { + if(isSuccess){ + [self playAudioWithUrl:editAudioPath isDelay:[XPSkillCardPlayerManager shareInstance].isMineInMic]; + + }else{ + [self.headView setPlaySoundStatus:NO]; + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + } + }]; + } + }else{ + [self.countDownHelper stopCountDown]; + [self.headView setPlaySoundStatus:NO]; + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + } + + } +/// 播放录音 +/// - Parameters: +/// - url: 录音链接 +/// - isDelay: 是否延时0.5秒播放录音,因为如果在麦上的话,需要先关麦再播放,所以要延时0.5秒来关麦后再播放,不然会没声音 +-(void)playAudioWithUrl:(NSString*)url isDelay:(BOOL)isDelay{ + if(isDelay == YES){ + [[XPSkillCardPlayerManager shareInstance] playerNewVoiceWithPath:url completionBlock:^{ + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + }]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + NSInteger getCurrentTime = ceil(self.headView.soundModel.second); + [self.countDownHelper openCountdownWithTime:(int)getCurrentTime]; + }); + return; + } + NSInteger getCurrentTime = ceil(self.headView.soundModel.second); + [self.countDownHelper openCountdownWithTime:(int)getCurrentTime]; + [[XPSkillCardPlayerManager shareInstance] playerVoiceWithPath:url completionBlock:^{ + + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + }]; +} +- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickGoToRoom:(NSString *)roomUid { + if (roomUid.length > 0 ) { + if(roomUid.integerValue == [XPSkillCardPlayerManager shareInstance].roomUid.integerValue && [XPRoomMiniManager shareManager].getRoomInfo == nil){ + [self.navigationController popViewControllerAnimated:YES]; + return; + } + //退出原来的房间 如果有的话 TODO 总感觉这种处理不太优雅 进房入口多了 怎么办 进房需要整合 + [self.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj isKindOfClass:[XPRoomViewController class]]) { + [self.navigationController popToRootViewControllerAnimated:NO]; + XPRoomViewController * rooomVC = obj; + [rooomVC exitRoom]; + *stop = YES; + } + }]; + [XPRoomViewController openRoom:roomUid viewController:self]; + } +} +#pragma mark - CountDownHelperDelegate +///倒计时结束 +- (void)onCountdownFinish{ + [self.headView setPlaySoundTime:0]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + [self.headView setPlaySoundStatus:NO]; + }); + +} +///倒计时进行 +- (void)onCountdownOpen:(int)time{ + [self.headView setPlaySoundTime:(int)time + 1]; +} +#pragma mark - XPMineUserInfoIndividualTagView +- (void)didClickGotoEditVC{ + + XPMineUserInfoTagVC *tagVC =[XPMineUserInfoTagVC new]; + tagVC.tagModel = self.tagModel; + tagVC.delegate = self; + [self.navigationController pushViewController:tagVC animated:YES]; + +} + +#pragma mark- XPMineUserInfoTagVCDelegate +- (void)xPMineUserInfoTagVC:(XPMineUserInfoTagVC *)vc didClickComplete:(NSArray *)meLabels{ + self.headView.tagModel = self.tagModel; +} #pragma mark - XPMineUserDataViewControllerDelegate - (void)xPMineUserDataViewController:(XPMineUserDataViewController *)viewController didGetVoiceSuccess:(MineSkillCardListInfoModel *)voiceCard { - if (voiceCard && [voiceCard.cardId isEqualToString:@"8"]) { - self.voiceView.hidden = NO; - self.voiceView.voiceInfo = voiceCard; - } else { - self.voiceView.hidden = YES; - } + if (voiceCard && [voiceCard.cardId isEqualToString:@"8"]) { + self.voiceView.hidden = NO; + self.voiceView.voiceInfo = voiceCard; + } else { + self.voiceView.hidden = YES; + } } #pragma mark - XPMineUserInfoProtocol - (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo { - if (userInfo.uid == self.uid) { - self.userInfo = userInfo; - self.headView.userInfo = userInfo; - } else { - if (!userInfo.userVipInfoVO.lookHomepageHide) { - NSString * uid = [NSString stringWithFormat:@"%ld", self.uid]; - [self.presenter visitUser:uid]; - } - } + self.userInfo = userInfo; + self.headView.userInfo = userInfo; + self.headView.soundModel = self.userInfo.audioCard; + self.editVC.soundModel = self.headView.soundModel; + XPMineUserInfoTagModel *tagModel = [XPMineUserInfoTagModel new]; + tagModel.meLabels = userInfo.labels; + self.tagModel = tagModel; + self.editVC.tagModel = tagModel; + self.headView.tagModel = tagModel; + self.userDataVC.userInfo = userInfo; + + + NSString *fileName = [[self.headView.soundModel.audioUrl componentsSeparatedByString:@"/"] lastObject]; + NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) safeObjectAtIndex1:0] stringByAppendingPathComponent:@"kMineSoundCard"]; + NSString *fullPath = [filePath stringByAppendingPathComponent:fileName]; + if (![[NSFileManager defaultManager] fileExistsAtPath:fullPath]) { + NSFileManager *fileMgr = [[NSFileManager alloc] init]; + [fileMgr createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil]; + [UploadFile downloadAudioWithFileName:fileName musicUrl:self.headView.soundModel.audioUrl mainFileName:@"kMineSoundCard" completion:^(BOOL isSuccess, NSString *editAudioPath) { + }]; + } } + + - (void)ongetDetailInfoSuccess:(UserInfoModel *)userInfo { - self.userDataVC.userInfo = userInfo; - self.monentsVC.dynamicInfo = userInfo.dynamicInfo; - self.headView.roomUid = userInfo.roomUid; + self.userDataVC.dynamicInfo = userInfo.dynamicInfo; + self.headView.roomUid = userInfo.roomUid; + self.giftVC.userInfo = userInfo; } - (void)getAttentionStateSuccess:(BOOL)status { - self.attentionButton.selected = status; + self.attentionButton.selected = status; } - (void)attentionUserSuccess:(BOOL)status { - self.attentionButton.selected = status; + self.attentionButton.selected = status; } +#pragma mark -XPMineUserInfoEditViewController + +- (void)xPMineUserInfoEditViewControllerC:(XPMineUserInfoEditViewController *)vc didClickComplete:(NSString *)meLabels{ + self.headView.tagModel = self.tagModel; +} +- (void)xPMineUserInfoEditViewControllerC:(XPMineUserInfoEditViewController *)vc didClickCompleteArea:(NSString *)area{ + self.userInfo.region = area; + self.userDataVC.userInfo = self.userInfo; +} #pragma mark - Event Response - (void)chatButtonAction:(UIButton *)sender { - NSString * sessionId = [NSString stringWithFormat:@"%ld",self.uid]; - NIMSession * session = [NIMSession session:sessionId type:NIMSessionTypeP2P]; - SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session]; - [self.navigationController pushViewController:sessionVC animated:YES]; + NSString * sessionId = [NSString stringWithFormat:@"%ld",self.uid]; + NIMSession * session = [NIMSession session:sessionId type:NIMSessionTypeP2P]; + SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session]; + [self.navigationController pushViewController:sessionVC animated:YES]; } - (void)attentionButtonAction:(UIButton *)sender { - NSString *uid = [NSString stringWithFormat:@"%ld", self.uid]; - [self.presenter attentionUser:uid state:!sender.selected]; + NSString *uid = [NSString stringWithFormat:@"%ld", self.uid]; + [self.presenter attentionUser:uid state:!sender.selected]; } #pragma mark - Getters And Setters - (void)setUid:(NSInteger)uid { - _uid = uid; - if (_uid > 0) { - if (_uid == [AccountInfoStorage instance].getUid.integerValue) { - [self.navView.editButton setTitle:YMLocalizedString(@"XPMineUserInfoViewController9") forState:UIControlStateNormal]; - [self.navView.editButton setImage:[UIImage new] forState:UIControlStateNormal]; - } else { - [self.navView.editButton setTitle:@"" forState:UIControlStateNormal]; - [self.navView.editButton setImage:[UIImage imageNamed:@"mine_user_info_edit"] forState:UIControlStateNormal]; - } - self.navView.editButton.selected = _uid == [AccountInfoStorage instance].getUid.integerValue; - NSString * uidStr = [NSString stringWithFormat:@"%ld", uid]; - self.userDataVC.userUid = uidStr; - [self.presenter getUserInfoWithUid:uidStr]; - } + _uid = uid; + if (_uid > 0) { + if (_uid == [AccountInfoStorage instance].getUid.integerValue) { + [self.navView.editButton setImage:[UIImage imageNamed:@"mine_user_info_edit_self"] forState:UIControlStateNormal]; + } else { + + [self.navView.editButton setImage:[UIImage imageNamed:@"mine_user_info_edit"] forState:UIControlStateNormal]; + } + self.navView.editButton.selected = _uid == [AccountInfoStorage instance].getUid.integerValue; + NSString * uidStr = [NSString stringWithFormat:@"%ld", uid]; + self.userDataVC.userUid = uidStr; + self.giftVC.userUid = uidStr; + [self.presenter getUserInfoWithUid:uidStr]; + self.editVC.uid = uidStr; + } } - (XPMineUserInfoHeaderView *)headView { - if (!_headView) { - _headView = [[XPMineUserInfoHeaderView alloc] init]; - _headView.delegate = self; - } - return _headView; + if (!_headView) { + _headView = [[XPMineUserInfoHeaderView alloc] init]; + _headView.delegate = self; + } + return _headView; } - (XPMineUserInfoCustomNavView *)navView { - if (!_navView) { - _navView = [[XPMineUserInfoCustomNavView alloc] init]; - _navView.delegate = self; - } - return _navView; + if (!_navView) { + _navView = [[XPMineUserInfoCustomNavView alloc] init]; + _navView.delegate = self; + } + return _navView; } - (UIStackView *)bottomStackView { - if (!_bottomStackView) { - _bottomStackView = [[UIStackView alloc] init]; - _bottomStackView.axis = UILayoutConstraintAxisHorizontal; - _bottomStackView.distribution = UIStackViewDistributionFillEqually; - _bottomStackView.alignment = UIStackViewAlignmentFill; - _bottomStackView.spacing = 25; - } - return _bottomStackView; + if (!_bottomStackView) { + _bottomStackView = [[UIStackView alloc] init]; + _bottomStackView.axis = UILayoutConstraintAxisHorizontal; + _bottomStackView.distribution = UIStackViewDistributionFillEqually; + _bottomStackView.alignment = UIStackViewAlignmentFill; + _bottomStackView.spacing = 25; + } + return _bottomStackView; } - (UIButton *)chatButton { - if (!_chatButton) { - _chatButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_chatButton setTitle:YMLocalizedString(@"XPMineUserInfoViewController10") forState:UIControlStateNormal]; - [_chatButton setTitleColor:[DJDKMIMOMColor confirmButtonTextColor] forState:UIControlStateNormal]; - [_chatButton setImage:[UIImage imageNamed:@"mine_user_info_bottom_chat"] forState:UIControlStateNormal]; - _chatButton.titleLabel.font = [UIFont systemFontOfSize:15]; - [_chatButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; - _chatButton.layer.masksToBounds = YES; - _chatButton.layer.cornerRadius = 36/2; - [_chatButton addTarget:self action:@selector(chatButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _chatButton; + if (!_chatButton) { + _chatButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_chatButton setTitle:YMLocalizedString(@"XPMineUserInfoViewController8") forState:UIControlStateNormal]; + [_chatButton setTitleColor:UIColorFromRGB(0x9168FA) forState:UIControlStateNormal]; + + _chatButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium]; + [_chatButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xCCF8F9),UIColorFromRGB(0xDEE4FF),UIColorFromRGB(0xEEDCFF)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; + UIImage *lineImage = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake((KScreenWidth - 30 - 25) / 2, 45)]; + UIColor *lineColor = [UIColor colorWithPatternImage:lineImage]; + _chatButton.layer.borderWidth = 1; + _chatButton.layer.borderColor = lineColor.CGColor; + _chatButton.layer.masksToBounds = YES; + _chatButton.layer.cornerRadius = 45/2; + [_chatButton addTarget:self action:@selector(chatButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _chatButton; } - (UIButton *)attentionButton { - if (!_attentionButton) { - _attentionButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_attentionButton setTitle:YMLocalizedString(@"XPMineUserInfoViewController11") forState:UIControlStateNormal]; - [_attentionButton setTitle:YMLocalizedString(@"XPMineUserInfoViewController12") forState:UIControlStateSelected]; - [_attentionButton setTitleColor:[DJDKMIMOMColor confirmButtonTextColor] forState:UIControlStateNormal]; - [_attentionButton setTitleColor:[DJDKMIMOMColor cancelButtonTextColor] forState:UIControlStateSelected]; - [_attentionButton setImage:[UIImage imageNamed:@"mine_user_info_bottom_attention_normal"] forState:UIControlStateNormal]; - [_attentionButton setImage:[UIImage imageNamed:@"mine_user_info_bottom_attention_select"] forState:UIControlStateSelected]; - _attentionButton.titleLabel.font = [UIFont systemFontOfSize:15]; - [_attentionButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; - [_attentionButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor cancelButtonGradientStartColor], [DJDKMIMOMColor cancelButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateSelected]; - _attentionButton.layer.masksToBounds = YES; - _attentionButton.layer.cornerRadius = 36/2; - [_attentionButton addTarget:self action:@selector(attentionButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _attentionButton; + if (!_attentionButton) { + _attentionButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_attentionButton setTitle:YMLocalizedString(@"XPMineUserInfoViewController9") forState:UIControlStateNormal]; + [_attentionButton setTitle:YMLocalizedString(@"XPMineUserInfoViewController10") forState:UIControlStateSelected]; + [_attentionButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_attentionButton setTitleColor:UIColorFromRGB(0xB3B3C3) forState:UIControlStateSelected]; + _attentionButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium]; + [_attentionButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; + [_attentionButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xE6E6F0),UIColorFromRGB(0xE6E6F0),UIColorFromRGB(0xE6E6F0)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateSelected]; + _attentionButton.layer.masksToBounds = YES; + _attentionButton.layer.cornerRadius = 45/2; + [_attentionButton addTarget:self action:@selector(attentionButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + } + return _attentionButton; } - (JXCategoryTitleView *)titleView { - if (!_titleView) { - _titleView = [[JXCategoryTitleView alloc] init]; - _titleView.delegate = self; - _titleView.backgroundColor = [UIColor clearColor]; - _titleView.titleColor = [DJDKMIMOMColor textThirdColor]; - _titleView.titleSelectedColor = [DJDKMIMOMColor mainTextColor]; - _titleView.titleFont = [UIFont fontWithName:@"PingFang-SC-Medium" size:12]; - _titleView.titleSelectedFont = [UIFont fontWithName:@"PingFang-SC-Medium" size:16]; - _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; - _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; - _titleView.defaultSelectedIndex = 0; - _titleView.averageCellSpacingEnabled = NO; - _titleView.contentEdgeInsetLeft = 20; - _titleView.titles = self.titles; - _titleView.cellSpacing = 20; - _titleView.titles = self.titles; - _titleView.listContainer = (id)self.pagingView.listContainerView; - - JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init]; - lineView.indicatorImageViewSize = CGSizeMake(16, 6); - lineView.verticalMargin = 7; - lineView.indicatorImageView.layer.masksToBounds = YES; - lineView.indicatorImageView.layer.cornerRadius = 3; - lineView.indicatorImageView.image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xFFC000), UIColorFromRGB(0xFFF9DB)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(16, 6)]; - _titleView.indicators = @[lineView]; - } - return _titleView; + if (!_titleView) { + _titleView = [[JXCategoryTitleView alloc] init]; + _titleView.delegate = self; + _titleView.backgroundColor = [UIColor clearColor]; + _titleView.titleColor = UIColorFromRGB(0x6D6B89); + _titleView.titleSelectedColor = UIColorFromRGB(0x1F1A4E); + _titleView.titleFont = [UIFont fontWithName:@"PingFang-SC-Medium" size:14]; + _titleView.titleSelectedFont = [UIFont boldSystemFontOfSize:18]; + _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; + _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; + _titleView.defaultSelectedIndex = 0; + _titleView.averageCellSpacingEnabled = NO; + _titleView.contentEdgeInsetLeft = 20; + _titleView.titles = self.titles; + _titleView.cellSpacing = 20; + _titleView.titles = self.titles; + _titleView.listContainer = (id)self.pagingView.listContainerView; + + JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init]; + lineView.indicatorImageViewSize = CGSizeMake(37, 8); + lineView.verticalMargin = 15; + lineView.indicatorImageView.layer.masksToBounds = YES; + lineView.indicatorImageView.layer.cornerRadius = 3; + lineView.indicatorImageView.image = [UIImage imageNamed:@"mine_dynamic"]; + _titleView.indicators = @[lineView]; + } + return _titleView; } - (JXPagerView *)pagingView { - if (!_pagingView) { - _pagingView = [[JXPagerView alloc] initWithDelegate:self]; - _pagingView.backgroundColor = [UIColor clearColor]; - _pagingView.listContainerView.backgroundColor = [UIColor clearColor]; - _pagingView.mainTableView.backgroundColor = [UIColor clearColor]; - _pagingView.listContainerView.listCellBackgroundColor = UIColor.clearColor; - _pagingView.mainTableView.gestureDelegate = self; - } - return _pagingView; + if (!_pagingView) { + _pagingView = [[JXPagerView alloc] initWithDelegate:self]; + _pagingView.backgroundColor = [UIColor clearColor]; + _pagingView.listContainerView.backgroundColor = [UIColor clearColor]; + _pagingView.mainTableView.backgroundColor = [UIColor clearColor]; + _pagingView.listContainerView.listCellBackgroundColor = UIColor.clearColor; + _pagingView.mainTableView.gestureDelegate = self; + } + return _pagingView; } - (NSArray *)titles { - if (!_titles) { - _titles = @[YMLocalizedString(@"XPMineUserInfoViewController13"), YMLocalizedString(@"XPMineUserInfoViewController14")]; - } - return _titles; + if (!_titles) { + _titles = @[YMLocalizedString(@"XPMineUserInfoViewController11"),YMLocalizedString(@"XPMineUserInfoViewController13")]; + } + return _titles; } - (XPMineUserDataViewController *)userDataVC { - if (!_userDataVC) { - _userDataVC = [[XPMineUserDataViewController alloc] init]; - } - return _userDataVC; + if (!_userDataVC) { + _userDataVC = [[XPMineUserDataViewController alloc] init]; + _userDataVC.delegate = self; + } + return _userDataVC; } - (XPMineUserInfoVoiceCardView *)voiceView { - if (!_voiceView) { - _voiceView = [[XPMineUserInfoVoiceCardView alloc] init]; - _voiceView.hidden = YES; - } - return _voiceView; -} - -- (XPMonentsMineViewController *)monentsVC { - if (!_monentsVC) { - _monentsVC = [[XPMonentsMineViewController alloc] init]; - } - return _monentsVC; + if (!_voiceView) { + _voiceView = [[XPMineUserInfoVoiceCardView alloc] init]; + _voiceView.hidden = YES; + } + return _voiceView; } +-(XPGiftUserDataViewController *)giftVC{ + if (!_giftVC){ + _giftVC = [XPGiftUserDataViewController new]; + } + return _giftVC; +} +- (XPMineUserInfoEditViewController *)editVC{ + if (!_editVC){ + _editVC = [XPMineUserInfoEditViewController new]; + _editVC.delegate = self; + } + return _editVC; +} +- (CountDownHelper *)countDownHelper{ + if (!_countDownHelper){ + _countDownHelper = [[CountDownHelper alloc]init]; + } + return _countDownHelper; +} @end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoEditPickView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoEditPickView.h new file mode 100644 index 00000000..87d4805f --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoEditPickView.h @@ -0,0 +1,34 @@ +// +// XPMineUserInfoEditPickView.h +// xplan-ios +// +// Created by duoban on 2023/2/17. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@protocol XPMineUserInfoEditPickViewDelegate + +///点了确认按钮 +- (void)didClickSureActionWithArea:(NSString *)area; + +@end +@interface XPMineUserInfoEditPickView : UIView +@property (nonatomic,strong)NSMutableArray * dataArray;//数据源 +/// +@property (nonatomic,copy) NSString *area; +/// +@property (nonatomic,weak) id delegate; +@end + + + +@interface AreaPickerView : UIView + + + +@property(nonatomic,strong) UILabel *titleLab; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoEditPickView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoEditPickView.m new file mode 100644 index 00000000..0aff08f4 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoEditPickView.m @@ -0,0 +1,203 @@ +// +// XPMineUserInfoEditPickView.m +// xplan-ios +// +// Created by duoban on 2023/2/17. +// + +#import "XPMineUserInfoEditPickView.h" +@interface XPMineUserInfoEditPickView() +@property (strong, nonatomic) UIPickerView *pickerView; + +@property (nonatomic,strong) UIView *bgView; +@property (nonatomic,strong) UIButton *cancelBtn; +@property (nonatomic,strong) UIButton *confirmBtn; + +@end +@implementation XPMineUserInfoEditPickView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} +-(void)setDataArray:(NSMutableArray *)dataArray{ + _dataArray = dataArray; + if(_dataArray.count == 0)return; + if(![_dataArray containsObject:_area]){ + _area = _dataArray.firstObject; + } + [_pickerView reloadAllComponents]; + if([_dataArray containsObject:_area]){ + [_pickerView selectRow:[_dataArray indexOfObject:_area] inComponent:0 animated:YES]; + }else{ + [_pickerView selectRow:0 inComponent:0 animated:YES]; + } + +} +-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ + + return 1; +} + +-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ + + return [_dataArray count]; +} + +-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{ + + return KScreenWidth; +} +-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{ + return kGetScaleWidth(38); +} + +-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ + [self changeSpearatorLineColor]; + AreaPickerView *lab = (AreaPickerView *)view; + if (!lab) { + lab = [[AreaPickerView alloc]initWithFrame:CGRectMake(kGetScaleWidth(15),0, KScreenWidth - kGetScaleWidth(30), kGetScaleWidth(38))]; + } + NSString *area = self.dataArray[row]; + lab.titleLab.text = area; + if([area isEqualToString:self.area]){ + lab.backgroundColor = UIColorFromRGB(0xF3F5FA); + lab.titleLab.textColor = [DJDKMIMOMColor inputTextColor]; + }else{ + lab.backgroundColor = [UIColor clearColor]; + lab.titleLab.textColor = [DJDKMIMOMColor disableButtonTextColor]; + } + return lab; +} +#pragma mark - 改变分割线的颜色 +- (void)changeSpearatorLineColor { + + for(UIView *speartorView in _pickerView.subviews) { + + if (speartorView.frame.size.height < 80) {//找出当前的 View + + + speartorView.backgroundColor = [UIColor clearColor]; + }else{ + speartorView.backgroundColor = [UIColor clearColor]; + } + } +} +-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ + + self.area = self.dataArray[row]; + [pickerView reloadAllComponents]; +} +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; + [self addSubview:self.bgView]; + [self.bgView addSubview:self.cancelBtn]; + [self.bgView addSubview:self.confirmBtn]; + [self.bgView addSubview:self.pickerView]; +} +- (void)initSubViewConstraints { + [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.equalTo(self).inset(kGetScaleWidth(0)); + make.height.mas_equalTo(kGetScaleWidth(272)); + }]; + [self.cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(kGetScaleWidth(15)); + make.top.mas_equalTo(kGetScaleWidth(20)); + make.width.mas_equalTo(kGetScaleWidth(35)); + make.height.mas_equalTo(kGetScaleWidth(20)); + + }]; + [self.confirmBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kGetScaleWidth(20)); + make.right.mas_equalTo(-kGetScaleWidth(15)); + }]; + [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kGetScaleWidth(74)); + make.left.right.bottom.equalTo(self.bgView).inset(kGetScaleWidth(0)); + + }]; +} +-(void)cancelAction{ + [self removeFromSuperview]; +} +-(void)confirmAction{ + [self removeFromSuperview]; + if(self.delegate && [self.delegate respondsToSelector:@selector(didClickSureActionWithArea:)]){ + [self.delegate didClickSureActionWithArea:self.area]; + } +} +#pragma mark -懒加载 +- (UIPickerView *)pickerView{ + if (!_pickerView){ + _pickerView = [[UIPickerView alloc]initWithFrame:CGRectZero]; + _pickerView.delegate = self; + _pickerView.dataSource = self; + } + return _pickerView; +} +- (UIButton *)cancelBtn{ + if (!_cancelBtn){ + _cancelBtn = [UIButton buttonInitWithText:YMLocalizedString(@"XPIncomeRecordGoldDetailsPickViewView0") font:kFontMedium(16) textColor:[DJDKMIMOMColor disableButtonTextColor] image:nil bgImage:nil]; + [_cancelBtn addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _cancelBtn; +} +-(UIButton *)confirmBtn{ + if (!_confirmBtn){ + _confirmBtn = [UIButton buttonInitWithText:YMLocalizedString(@"XPIncomeRecordGoldDetailsPickViewView1") font:kFontMedium(16) textColor:[DJDKMIMOMColor inputTextColor] image:nil bgImage:nil]; + [_confirmBtn addTarget:self action:@selector(confirmAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _confirmBtn; +} + +- (UIView *)bgView{ + if (!_bgView){ + _bgView = [UIView new]; + _bgView.backgroundColor = [UIColor whiteColor]; + [_bgView setCornerWithLeftTopCorner:kGetScaleWidth(18) rightTopCorner:kGetScaleWidth(18) bottomLeftCorner:0 bottomRightCorner:0 size:CGSizeMake(KScreenWidth, kGetScaleWidth(302))]; + } + return _bgView; +} +@end + + + + +@implementation AreaPickerView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = UIColorFromRGB(0xF3F5FA); + [self addSubview:self.titleLab]; + +} +- (void)initSubViewConstraints { + [self.titleLab mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; + +} +#pragma mark -懒加载 +- (UILabel *)titleLab{ + if (!_titleLab){ + _titleLab = [UILabel labelInitWithText:@"" font:kFontMedium(15) textColor:[DJDKMIMOMColor inputTextColor]]; + _titleLab.textAlignment = NSTextAlignmentCenter; + } + return _titleLab; +} + +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoGiftView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoGiftView.m index 6aa2d681..e5c95646 100644 --- a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoGiftView.m +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoGiftView.m @@ -1,94 +1,146 @@ // -// YMMineUserInfoGiftView.m -// YUMI +// XPMineUserInfoGiftView.m +// xplan-ios // -// Created by YUMI on 2022/6/15. +// Created by 冯硕 on 2022/6/15. // #import "XPMineUserInfoGiftView.h" ///Third #import -///Tool -#import "YUMIMacroUitls.h" -#import "NSArray+Safe.h" ///View #import "XPMineDataGiftCollectionViewCell.h" #import "XPMineUserInfoEmptyCollectionViewCell.h" - +#import "UserGiftWallInfoModel.h" @interface XPMineUserInfoGiftView () ///列表 @property (nonatomic,strong) UICollectionView *collectionView; +@property (nonatomic,assign) NSInteger giftNum; @end @implementation XPMineUserInfoGiftView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - self.backgroundColor = [UIColor clearColor]; - [self addSubview:self.collectionView]; + self.backgroundColor = [UIColor clearColor]; + [self addSubview:self.collectionView]; } - (void)initSubViewConstraints { - [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self); - }]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self); + }]; } #pragma mark - UICollectionViewDelegate And UICollectionViewDatasource -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return self.datasource.count > 0? CGSizeMake(51, 65) : CGSizeMake(KScreenWidth - 30, 65 * 3 + 30); + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ + if (self.giftNum == 0)return 1; + return 2; + + } +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + if(self.giftNum > 0){ + + CGFloat width = KScreenWidth - 30 - kGetScaleWidth(52); + return indexPath.section == 0 ? CGSizeMake(width / 3 , kGetScaleWidth(93)): CGSizeMake((width - 24)/4 , kGetScaleWidth(82)); + } + return CGSizeMake(KScreenWidth - 30, 65 * 3 + 30); +} +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ + if(self.giftNum > 0){ + return section == 0 ? UIEdgeInsetsMake(0, kGetScaleWidth(16), kGetScaleWidth(12), kGetScaleWidth(16)):UIEdgeInsetsMake(0, kGetScaleWidth(16), 0, kGetScaleWidth(16)); + } + return UIEdgeInsetsMake(0, 0, 0, 0); +} - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.datasource.count > 0 ? self.datasource.count : 1; + if (self.giftNum == 0)return 1; + return [self.datasource[section] count]; } - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - if (self.datasource.count > 0) { - XPMineDataGiftCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineDataGiftCollectionViewCell class]) forIndexPath:indexPath]; - cell.giftInfo = [self.datasource safeObjectAtIndex1:indexPath.row]; - return cell; - } - - XPMineUserInfoEmptyCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoEmptyCollectionViewCell class]) forIndexPath:indexPath]; - cell.isGiftWall = YES; - return cell; + if (self.giftNum > 0) { + XPMineDataGiftCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineDataGiftCollectionViewCell class]) forIndexPath:indexPath]; + if (indexPath.section == 0 && self.datasource.count > 0){ + NSArray *dataList = self.datasource[indexPath.section]; + if(indexPath.row < dataList.count){ + cell.giftInfo = [dataList safeObjectAtIndex1:indexPath.row]; + [cell setLevel:((int)indexPath.row + 1)]; + }else{ + UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([UICollectionViewCell class]) forIndexPath:indexPath]; + + return cell; + } + + } + if (indexPath.section == 1 && self.datasource.count > 1){ + NSArray *dataList = self.datasource[indexPath.section]; + if(indexPath.row < dataList.count){ + cell.giftInfo = [dataList safeObjectAtIndex1:indexPath.row]; + }else{ + UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([UICollectionViewCell class]) forIndexPath:indexPath]; + + return cell; + } + [cell setLevel:4]; + } + + return cell; + } + + XPMineUserInfoEmptyCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoEmptyCollectionViewCell class]) forIndexPath:indexPath]; + cell.isGiftWall = YES; + return cell; } #pragma mark - JXCategoryListContentViewDelegate - (UIView *)listView { - return self; + return self; } #pragma mark - Getters And Setters - (void)setDatasource:(NSArray *)datasource { - _datasource = datasource; - [self.collectionView reloadData]; + _giftNum = datasource.count ; + NSMutableArray *firstDataSource = [NSMutableArray array]; + NSMutableArray *secondDataSource = [NSMutableArray array]; + for (int i = 0; i < datasource.count; i++) { + UserGiftWallInfoModel *obj = datasource[i]; + if(i < 3){ + [firstDataSource addObject:obj]; + }else{ + [secondDataSource addObject:obj]; + } + } + _datasource = @[firstDataSource,secondDataSource]; + [self.collectionView reloadData]; } - (UICollectionView *)collectionView{ - if (!_collectionView) { - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = (KScreenWidth - 15 *2 - 10 * 2 -51 * 5) / 3.0;; - layout.minimumLineSpacing = 10; - layout.sectionInset = UIEdgeInsetsMake(0, 10, 0, 10); - _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - _collectionView.dataSource = self; - _collectionView.delegate = self; - _collectionView.scrollEnabled = NO; - _collectionView.backgroundColor = [UIColor clearColor]; - [_collectionView registerClass:[XPMineDataGiftCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineDataGiftCollectionViewCell class])]; - [_collectionView registerClass:[XPMineUserInfoEmptyCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoEmptyCollectionViewCell class])]; - - } - return _collectionView; + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.minimumLineSpacing = kGetScaleWidth(12); + layout.minimumInteritemSpacing = 0; + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.pagingEnabled = NO; + + _collectionView.backgroundColor = [UIColor clearColor]; + [_collectionView registerClass:[XPMineDataGiftCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineDataGiftCollectionViewCell class])]; + [_collectionView registerClass:[XPMineUserInfoEmptyCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoEmptyCollectionViewCell class])]; + [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([UICollectionViewCell class])]; + + } + return _collectionView; } diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagCell.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagCell.h new file mode 100644 index 00000000..fd814a36 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagCell.h @@ -0,0 +1,21 @@ +// +// XPMineUserInfoHeaderTagCell.h +// xplan-ios +// +// Created by duoban on 2023/2/16. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineUserInfoHeaderTagCell : UICollectionViewCell +/// +@property (nonatomic,assign) BOOL isTag; +/// +@property (nonatomic,copy) NSString *title; +/// +@property (nonatomic,strong,readonly) UILabel *titleView; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagCell.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagCell.m new file mode 100644 index 00000000..d6ef1ec7 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagCell.m @@ -0,0 +1,51 @@ +// +// XPMineUserInfoHeaderTagCell.m +// xplan-ios +// +// Created by duoban on 2023/2/16. +// + +#import "XPMineUserInfoHeaderTagCell.h" +@interface XPMineUserInfoHeaderTagCell() +/// +@property (nonatomic,strong) UILabel *titleView; +@end +@implementation XPMineUserInfoHeaderTagCell +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self.contentView addSubview:self.titleView]; + self.contentView.layer.cornerRadius = 9; + self.contentView.layer.masksToBounds = YES; +} +- (void)initSubViewConstraints { + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.contentView); + }]; +} +-(void)setIsTag:(BOOL)isTag{ + _isTag = isTag; + self.contentView.backgroundColor = _isTag ? [UIColor colorWithRed:58/255.0 green:213/255.0 blue:248/255.0 alpha:0.12]: UIColorFromRGB(0xF3F5F9); + _titleView.textColor = _isTag ? UIColorFromRGB(0x00C4EA):UIColorFromRGB(0x6D6B89); +} +- (void)setTitle:(NSString *)title{ + _title = title; + _titleView.text = _title; +} +#pragma mark -懒加载 +- (UILabel *)titleView{ + if (!_titleView){ + _titleView = [UILabel labelInitWithText:@"" font:[UIFont systemFontOfSize:10 weight:UIFontWeightRegular] textColor:UIColorFromRGB(0x00C4EA)]; + _titleView.textAlignment = NSTextAlignmentCenter; + } + return _titleView; +} +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagView.h new file mode 100644 index 00000000..eaa45300 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagView.h @@ -0,0 +1,26 @@ +// +// XPMineUserInfoHeaderTagView.h +// xplan-ios +// +// Created by duoban on 2023/2/16. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class XPMineUserInfoHeaderTagView; +@protocol XPMineUserInfoHeaderTagViewDelegate + +- (void)didClickGotoIvidualView; +- (void)didClickGotoEditVC; + +@end +@interface XPMineUserInfoHeaderTagView : UIView +@property (nonatomic,strong) NSMutableArray *itemList; +/// +@property (nonatomic,copy) NSString *uid; +/// +@property (nonatomic,weak) id delegate; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagView.m new file mode 100644 index 00000000..be533f86 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderTagView.m @@ -0,0 +1,161 @@ +// +// XPMineUserInfoHeaderTagView.m +// xplan-ios +// +// Created by duoban on 2023/2/16. +// + +#import "XPMineUserInfoHeaderTagView.h" +#import "XPMineUserInfoTagFlowLayout.h" +#import "XPMineUserInfoHeaderTagCell.h" +#import "XPMineUserInfoTagModel.h" +@interface XPMineUserInfoHeaderTagView() +@property (nonatomic,strong) UICollectionView *collectionView; +/// +@property (nonatomic,strong) UIButton *clickBtn; +///设置个人标签 +@property (nonatomic,strong) UIView *editView; +@end +@implementation XPMineUserInfoHeaderTagView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.hidden = YES; + [self addSubview:self.collectionView]; + [self addSubview:self.clickBtn]; + [self addSubview:self.editView]; +} +- (void)initSubViewConstraints { + [self.clickBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(0); + make.centerY.equalTo(self); + make.width.height.mas_equalTo(20); + }]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.centerY.equalTo(self); + make.height.mas_equalTo(18); + make.right.equalTo(self.clickBtn.mas_left); + }]; + [self.editView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.top.equalTo(self); + make.height.equalTo(self.clickBtn); + make.width.mas_greaterThanOrEqualTo(128); + }]; + +} +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + return CGSizeMake(model.width, 18); +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + + return self.itemList.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + + XPMineUserInfoHeaderTagCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoHeaderTagCell class]) forIndexPath:indexPath]; + cell.isTag = indexPath.row < 3; + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + cell.title = model.label; + + return cell; +} +-(void)setItemList:(NSMutableArray *)itemList{ + _itemList = itemList; + for (XPMineUserInfoTagItemModel *model in _itemList) { + CGRect stringRect = [model.label boundingRectWithSize:CGSizeMake(MAXFLOAT, kGetScaleWidth(18)) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFontRegular(10)} context:nil]; + model.width = stringRect.size.width + kGetScaleWidth(14); + } + [_collectionView reloadData]; + NSString *uid = [[AccountInfoStorage instance]getUid]; + BOOL isMe = [self.uid isEqualToString:uid]; + if(isMe == YES && _itemList.count == 0){ + _collectionView.hidden = YES; + _clickBtn.hidden = YES; + _editView.hidden = NO; + }else{ + _collectionView.hidden = NO; + _clickBtn.hidden = NO; + _editView.hidden = YES; + } +} +-(void)clickAction{ + if(self.delegate && [self.delegate respondsToSelector:@selector(didClickGotoIvidualView)]){ + [self.delegate didClickGotoIvidualView]; + } +} +-(void)editAction{ + if(self.delegate && [self.delegate respondsToSelector:@selector(didClickGotoEditVC)]){ + [self.delegate didClickGotoEditVC]; + } +} +#pragma mark -懒加载 +- (UICollectionView *)collectionView{ + if (!_collectionView) { + XPMineUserInfoTagFlowLayout *layout = [[XPMineUserInfoTagFlowLayout alloc] init]; + layout.delegate = self; + layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0); + layout.minimumLineSpacing = 0; + layout.minimumInteritemSpacing = 5; + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.pagingEnabled = NO; + _collectionView.scrollEnabled = NO; + _collectionView.backgroundColor = [UIColor clearColor]; + [_collectionView registerClass:[XPMineUserInfoHeaderTagCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoHeaderTagCell class])]; + _collectionView.showsVerticalScrollIndicator = NO; + } + return _collectionView; +} +- (UIButton *)clickBtn{ + if (!_clickBtn){ + _clickBtn = [UIButton new]; + [_clickBtn setBackgroundImage:kImage(@"mine_info_tag_arrow") forState:UIControlStateNormal]; + [_clickBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + [_clickBtn addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _clickBtn; +} +- (UIView *)editView{ + if (!_editView){ + _editView = [UIView new]; + _editView.backgroundColor = UIColorFromRGB(0xE1FAFF); + UIImageView *imageView = [UIImageView new]; + imageView.image = kImage(@"mine_user_info_head_edit"); + imageView.userInteractionEnabled = YES; + [_editView addSubview:imageView]; + [imageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(14); + make.left.mas_equalTo(9); + make.top.mas_equalTo(4); + }]; + UILabel *label = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoHeaderTagView0") font:[UIFont systemFontOfSize:10 weight:UIFontWeightMedium] textColor:UIColorFromRGB(0x00C4EA)]; + [_editView addSubview:label]; + label.userInteractionEnabled = YES; + [label mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(33); + make.right.mas_equalTo(-15); + make.top.mas_equalTo(3); + make.bottom.mas_equalTo(-3); + }]; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(editAction)]; + [_editView addGestureRecognizer:tap]; + _editView.hidden = YES; + _editView.layer.cornerRadius = 10; + _editView.layer.masksToBounds = YES; + } + return _editView; +} +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.h index cdebc941..3667d9cb 100644 --- a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.h +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.h @@ -1,28 +1,46 @@ // -// YMMineHeaderView.h -// YUMI +// XPMineHeaderView.h +// xplan-ios // -// Created by YUMI on 2021/9/22. +// Created by 冯硕 on 2021/9/22. // #import - +#import "XPSoundCardModel.h" +#import "XPMineUserInfoTagModel.h" NS_ASSUME_NONNULL_BEGIN @class UserInfoModel, SDCycleScrollView,XPMineUserInfoHeaderView; @protocol XPMineUserInfoHeaderViewDelegate - +///去房间 - (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickGoToRoom:(NSString *)roomUid; - +//播放声音,播放或关闭 +- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickPlaySound:(BOOL)isPlay; +///去录音VC +- (void)didClickGoToPlaySound; +///去标签页 +- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickGotoEditView:(NSMutableArray *)itemList; +///去标签vc +- (void)xPMineUserInfoHeaderView:(XPMineUserInfoHeaderView *)view didClickGotoEditVC:(NSMutableArray *)itemList; @end @interface XPMineUserInfoHeaderView : UIView +///用户信息 @property (nonatomic,strong) UserInfoModel *userInfo; +///声音卡基本信息 +@property (nonatomic,strong) XPSoundCardModel *__nullable soundModel; +///标签 +@property (nonatomic,strong) XPMineUserInfoTagModel *tagModel; ///轮播图 -@property (nonatomic,strong, readonly) SDCycleScrollView *pi_BannerView; +@property (nonatomic,strong, readonly) SDCycleScrollView *pi_cycleScrollView; ///代理 @property (nonatomic,weak) id delegate; ///当前查看用户是否在直播 @property (nonatomic,copy) NSString *roomUid; +///声音卡时,svga是否播放动画 +-(void)setPlaySoundStatus:(BOOL)isPlay; +///声音卡倒计时 +-(void)setPlaySoundTime:(NSInteger)time; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m index 3e48e238..3e4c27ed 100644 --- a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m @@ -1,8 +1,8 @@ // -// YMMineHeaderView.m -// YUMI +// XPMineHeaderView.m +// xplan-ios // -// Created by YUMI on 2021/9/22. +// Created by 冯硕 on 2021/9/22. // #import "XPMineUserInfoHeaderView.h" @@ -11,21 +11,22 @@ #import #import "SDPhotoBrowser.h" #import +#import ///Tool -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" #import "UIImage+ImageEffects.h" #import "UIImage+Utils.h" #import "NetImageView.h" -#import "NSArray+Safe.h" -#import "XNDJTDDLoadingTool.h" -#import "StatisticsServiceHelper.h" +#import "XPSkillCardPlayerManager.h" +#import "XPRoomMiniManager.h" +///view +#import "XPMineUserInfoHeaderTagView.h" ///Model #import "UserInfoModel.h" - -@interface XPMineUserInfoHeaderView () +@interface XPMineUserInfoHeaderView () ///轮播图 -@property (nonatomic,strong) SDCycleScrollView *pi_BannerView; +@property (nonatomic,strong) SDCycleScrollView *cycleScrollView; +///背景图 +@property (nonatomic,strong) UIImageView *bgView; ///覆盖的view @property (nonatomic,strong) UIImageView * coverImageView; ///显示当前的页数 @@ -38,15 +39,23 @@ @property (nonatomic,strong) NSMutableArray *userPhtotArray; ///用户信息 @property (nonatomic,strong) UIView * userInfoView; + + + ///用户信息的背景 @property (nonatomic,strong) UIImageView *usershadowImageView; -///贵族等级icon -@property (nonatomic,strong) NetImageView *nobleImageView; @property (nonatomic,strong) UIStackView *nickStackView; ///名字 @property (nonatomic,strong) UILabel *nameLabel; ///sex @property (nonatomic,strong) UIImageView *sexImageView; + +///正在直播父图 +@property (nonatomic,strong) UIImageView *onlineView; +///正在直播icon图 +@property (nonatomic,strong) SVGAImageView *onlineIconView; +///正在直播中tilte +@property (nonatomic,strong) UILabel *onlineTitleView; ///正在直播中 @property (nonatomic,strong) UIButton *onlineButton; /// @@ -57,8 +66,6 @@ @property (nonatomic,strong) UILabel *idLabel; ///空白的占位图 @property (nonatomic,strong) UIView * spaceView; -///复制ID -@property (nonatomic,strong) UIImageView *copysIdImageView; ///粉丝数 @property (nonatomic,strong) UILabel *fansNumLabel; ///魅力等级 等级 铭牌 @@ -79,634 +86,984 @@ @property (nonatomic,strong) UIImageView *newUserImageView; ///官方的 @property (nonatomic,strong) UIImageView *officalImageView; + +///标签跟签名容器 +@property (nonatomic,strong) UIStackView *singStackView; +///标签 +@property (nonatomic,strong) XPMineUserInfoHeaderTagView *tagView; ///签名的背景 @property (nonatomic,strong) UIView * signBackView; ///签名 @property (nonatomic,strong) UILabel *signLabel; ///分割线 -@property (nonatomic,strong) UIView * lineView; +//@property (nonatomic,strong) UIView * lineView; ///头像的 @property (nonatomic,strong) UserPhoto *avatarPhoto; +///头像 +@property (nonatomic,strong) NetImageView * avatarView; +///声音背景 +@property (nonatomic,strong) UIImageView *soundView; +///声音播放 +@property (nonatomic,strong) UIButton *palySoundBtn; +///声音动效 +@property (nonatomic,strong) SVGAImageView *soundSVGAView; +///声音时间 +@property (nonatomic,strong) UILabel *soundTimeView; +///录制声音提示 +@property (nonatomic,strong) UILabel *soundPromptView; +///录制声音按钮 +@property (nonatomic,strong) UIButton *toSoundBtn; + @end @implementation XPMineUserInfoHeaderView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; } #pragma mark - Private Method - (void)initSubViews { - [self addSubview:self.pi_BannerView]; - [self addSubview:self.coverImageView]; - [self addSubview:self.reviewIcon]; - [self addSubview:self.userInfoView]; - - [self.userInfoView addSubview:self.usershadowImageView]; - [self.userInfoView addSubview:self.signBackView]; - [self.userInfoView addSubview:self.lineView]; - - [self.usershadowImageView addSubview:self.nickStackView]; - [self.usershadowImageView addSubview:self.idStackView]; - [self.usershadowImageView addSubview:self.tagStackView]; - [self.usershadowImageView addSubview:self.pageButton]; - [self.usershadowImageView addSubview:self.nobleImageView]; + + [self addSubview:self.cycleScrollView]; + + [self addSubview:self.coverImageView]; + [self addSubview:self.bgView]; + [self addSubview:self.reviewIcon]; + [self addSubview:self.userInfoView]; + [self addSubview:self.pageButton]; + [self addSubview:self.avatarView]; + [self.avatarView addSubview:self.onlineView]; - [self.nickStackView addArrangedSubview:self.nameLabel]; - [self.nickStackView addArrangedSubview:self.sexImageView]; - [self.nickStackView addArrangedSubview:self.onlineButton]; - - [self.idStackView addArrangedSubview:self.beautifulImageViw]; - [self.idStackView addArrangedSubview:self.idLabel]; - [self.idStackView addArrangedSubview:self.copysIdImageView]; - [self.idStackView addArrangedSubview:self.spaceView]; - [self.idStackView addArrangedSubview:self.fansNumLabel]; + [self.onlineView addSubview:self.onlineIconView]; + [self.onlineView addSubview:self.onlineTitleView]; + [self.onlineView addSubview:self.onlineButton]; + + + [self.userInfoView addSubview:self.usershadowImageView]; + + + [self.usershadowImageView addSubview:self.singStackView]; +// [self.userInfoView addSubview:self.lineView]; + + + + [self.usershadowImageView addSubview:self.nickStackView]; + [self.usershadowImageView addSubview:self.idStackView]; + [self.usershadowImageView addSubview:self.tagStackView]; + [self.usershadowImageView addSubview:self.soundView]; + + [self.soundView addSubview:self.palySoundBtn]; + [self.soundView addSubview:self.soundSVGAView]; + [self.soundView addSubview:self.soundTimeView]; + [self.soundView addSubview:self.soundPromptView]; + [self.soundView addSubview:self.toSoundBtn]; + + [self.nickStackView addArrangedSubview:self.nameLabel]; + [self.nickStackView addArrangedSubview:self.sexImageView]; + + + [self.idStackView addArrangedSubview:self.beautifulImageViw]; + [self.idStackView addArrangedSubview:self.idLabel]; + [self.idStackView addArrangedSubview:self.spaceView]; + [self.idStackView addArrangedSubview:self.fansNumLabel]; - - ///用户信息中的标签 - [self.tagStackView addArrangedSubview:self.newUserImageView]; - [self.tagStackView addArrangedSubview:self.officalImageView]; - [self.tagStackView addArrangedSubview:self.experImageView]; - [self.tagStackView addArrangedSubview:self.charmImageView]; - [self.tagStackView addArrangedSubview:self.namePlateView]; - ///铭牌 - [self.namePlateView addSubview:self.nameplateImageView]; - [self.namePlateView addSubview:self.nameplateLabel]; - - [self.signBackView addSubview:self.signLabel]; + + ///用户信息中的标签 + [self.tagStackView addArrangedSubview:self.newUserImageView]; + [self.tagStackView addArrangedSubview:self.officalImageView]; + [self.tagStackView addArrangedSubview:self.experImageView]; + [self.tagStackView addArrangedSubview:self.charmImageView]; + [self.tagStackView addArrangedSubview:self.namePlateView]; + ///铭牌 + [self.namePlateView addSubview:self.nameplateImageView]; + [self.namePlateView addSubview:self.nameplateLabel]; + + [self.singStackView addArrangedSubview:self.tagView]; + [self.singStackView addArrangedSubview:self.signBackView]; + [self.signBackView addSubview:self.signLabel]; + + @kWeakify(self); + SVGAParser * parser = [[SVGAParser alloc]init]; + [parser parseWithNamed:@"mine_info_online" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { + @kStrongify(self); + self.onlineIconView.loops = 0; + self.onlineIconView.clearsAfterStop = NO; + self.onlineIconView.videoItem = videoItem; + [self.onlineIconView startAnimation]; + } failureBlock:^(NSError * _Nonnull error) { + + }]; + + SVGAParser *soundParser = [SVGAParser new]; + [soundParser parseWithNamed:@"mine_info_sound_play" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { + @kStrongify(self); + self.soundSVGAView.loops = 0; + self.soundSVGAView.clearsAfterStop = NO; + self.soundSVGAView.videoItem = videoItem; + } failureBlock:^(NSError * _Nonnull error) { + + }]; + + } - (void)initSubViewConstraints { - [self.pi_BannerView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.mas_equalTo(self); - make.height.mas_equalTo(375); - }]; - - [self.coverImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.pi_BannerView); - }]; - - [self.reviewIcon mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.right.mas_equalTo(self); - make.width.mas_equalTo(85); - make.height.mas_equalTo(50); - }]; - - [self.userInfoView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self); - make.bottom.mas_equalTo(self); - make.height.mas_equalTo(210); - }]; - - [self.usershadowImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.mas_equalTo(self.userInfoView); - make.height.mas_equalTo(146); - }]; - - [self.pageButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.mas_equalTo(-15); - make.width.mas_equalTo(35); - make.height.mas_equalTo(16); - make.bottom.mas_equalTo(self.signBackView.mas_top).offset(-13); - }]; - - [self.signBackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(79); - make.left.right.mas_equalTo(self.userInfoView); - make.top.mas_equalTo(self.usershadowImageView.mas_bottom).offset(-15); - }]; - - [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.mas_equalTo(self.userInfoView).inset(15); - make.bottom.mas_equalTo(self.userInfoView); - make.height.mas_equalTo(1); - }]; - - [self.nobleImageView mas_makeConstraints:^(MASConstraintMaker *make) { + [self.cycleScrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.mas_equalTo(self); + make.height.mas_equalTo(245); + }]; + + [self.coverImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.cycleScrollView); + }]; + [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.left.right.equalTo(self.cycleScrollView); + make.height.mas_equalTo(25); + }]; + [self.reviewIcon mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.right.mas_equalTo(self); + make.width.mas_equalTo(85); + make.height.mas_equalTo(50); + }]; + + [self.userInfoView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self); + make.bottom.mas_equalTo(self); + make.height.mas_greaterThanOrEqualTo(133); + }]; + + [self.usershadowImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(15); + make.right.mas_equalTo(-15); + make.top.height.mas_equalTo(self.userInfoView); + }]; + + [self.avatarView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(88); + make.left.mas_equalTo(30); + make.top.equalTo(self.userInfoView.mas_top).mas_offset(-28); + }]; + [self.onlineView mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.equalTo(self.avatarView); + make.width.mas_equalTo(84); + make.left.mas_equalTo(4); + make.height.mas_equalTo(22); + + }]; + [self.onlineIconView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(18); + make.top.mas_equalTo(3); + make.width.mas_equalTo(12); + make.height.mas_equalTo(12); + }]; + [self.onlineTitleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerY.equalTo(self.onlineIconView); + make.left.mas_equalTo(32); + make.height.mas_equalTo(14); + }]; + [self.onlineButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.onlineView); + }]; + + [self.pageButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(-15); + make.width.mas_equalTo(42); + make.height.mas_equalTo(22); + make.bottom.mas_equalTo(self.userInfoView.mas_top).offset(-8); + }]; + + + +// [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) { +// make.left.right.mas_equalTo(self.userInfoView).inset(15); +// make.bottom.mas_equalTo(self.userInfoView); +// make.height.mas_equalTo(1); +// }]; + + [self.nickStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.usershadowImageView).offset(115); + make.top.mas_equalTo(self.usershadowImageView).offset(11); + make.right.lessThanOrEqualTo(@(-15)); + }]; + + [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(25); + }]; + + [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(14, 14)); + }]; + + + + [self.idStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nickStackView); + make.top.mas_equalTo(self.nickStackView.mas_bottom).offset(4); + make.right.mas_equalTo(-15); + }]; + + [self.beautifulImageViw mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(15, 15)); + }]; + + [self.spaceView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.greaterThanOrEqualTo(@10); + make.height.mas_equalTo(15); + }]; + + + + + [self.tagStackView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.usershadowImageView).offset(15); - make.top.mas_equalTo(self.usershadowImageView).offset(50); + + make.top.mas_equalTo(self.userInfoView).offset(68); + make.right.lessThanOrEqualTo(@70); + make.height.mas_equalTo(25); + }]; + + [self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(25); + }]; + + [self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(25); + }]; + + [self.newUserImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(20); }]; - [self.nickStackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.nobleImageView.mas_right).mas_offset(5); - make.centerY.mas_equalTo(self.nobleImageView); - }]; - - [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(20); - }]; - - [self.sexImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(15, 15)); - }]; - - [self.onlineButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(55, 18)); - }]; - - [self.idStackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.nobleImageView); - make.top.mas_equalTo(self.nickStackView.mas_bottom).offset(5); - }]; - - [self.beautifulImageViw mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(15, 15)); - }]; + + [self.officalImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(20); + }]; + + [self.namePlateView mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(20); + make.width.mas_equalTo(self.nameplateImageView.mas_width); + }]; + + + [self.nameplateImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_equalTo(20); + make.width.mas_equalTo(60); + make.left.top.mas_equalTo(self.namePlateView); + }]; + + [self.nameplateLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.bottom.mas_equalTo(self.nameplateImageView); + make.right.mas_equalTo(self.namePlateView).offset(-2); + }]; + [self.singStackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(15); + make.top.mas_equalTo(103); + make.right.mas_equalTo(-15); + + + }]; + [self.tagView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.equalTo(self.singStackView); + make.height.mas_equalTo(20); + }]; + [self.signBackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.height.mas_greaterThanOrEqualTo(10); + make.left.right.equalTo(self.singStackView); + make.bottom.equalTo(self.userInfoView.mas_bottom).mas_offset(-17); + }]; + [self.signLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.signBackView); + }]; + + + [self.soundView mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(-15); + make.width.mas_equalTo(98); + make.height.mas_equalTo(28); + make.centerY.equalTo(self.tagStackView); + }]; + + [self.palySoundBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(18); + make.top.mas_equalTo(5); + make.left.mas_equalTo(4); + }]; + [self.soundSVGAView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(27); + make.width.mas_equalTo(35); + make.height.mas_equalTo(19); + make.centerY.equalTo(self.soundView); + + }]; + [self.soundTimeView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(67); + make.centerY.equalTo(self.soundView); + }]; + + [self.soundPromptView mas_makeConstraints:^(MASConstraintMaker *make) { + make.right.mas_equalTo(-8); + make.centerY.equalTo(self.soundView); + }]; + [self.toSoundBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.soundView); + }]; + + [self.usershadowImageView.superview layoutIfNeeded]; + - [self.copysIdImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(14, 14)); - }]; - - [self.spaceView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.mas_equalTo(12); - make.height.mas_equalTo(15); - }]; - - [self.tagStackView mas_makeConstraints:^(MASConstraintMaker *make) { -// make.left.mas_equalTo(self.usershadowImageView).offset(15); - make.left.mas_equalTo(self.nobleImageView); - make.top.mas_equalTo(self.beautifulImageViw.mas_bottom).offset(5); - make.height.mas_equalTo(25); - }]; - - [self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(25); - }]; - - [self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(25); - }]; - - [self.newUserImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(20); - }]; - - [self.officalImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(20); - }]; - - [self.namePlateView mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(20); - make.width.mas_equalTo(self.nameplateImageView.mas_width); - }]; - - - [self.nameplateImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.mas_equalTo(20); - make.width.mas_equalTo(60); - make.left.top.mas_equalTo(self.namePlateView); - }]; - - [self.nameplateLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.mas_equalTo(self.nameplateImageView); - make.right.mas_equalTo(self.namePlateView).offset(-2); - }]; - - [self.signLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.signBackView).offset(10); - make.right.mas_equalTo(self.signBackView).offset(10); - make.top.mas_equalTo(self.signBackView).offset(23); - }]; } #pragma mark - SDPhotoBrowserDelegate - (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index { - NSString * photoUrl = [self.imageUrls safeObjectAtIndex1:index]; - return [NSURL URLWithString:photoUrl]; + if(browser.isAvatar == YES){ + return [NSURL URLWithString:self.avatarView.imageUrl]; + } + NSString * photoUrl = [self.imageUrls objectAtIndex:index]; + return [NSURL URLWithString:photoUrl]; } - (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index { - return [UIImageConstant defalutBannerPlaceholder]; + return [UIImageConstant defalutBannerPlaceholder]; } #pragma mark - SDCycleScrollViewDelegate -(void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index { - [self.pageButton setTitle:[NSString stringWithFormat:@"%ld/%lu",(index + 1), (unsigned long)self.imageUrls.count] forState:UIControlStateNormal]; - UserPhoto * photo = [self.userPhtotArray safeObjectAtIndex1:index]; - self.reviewIcon.hidden = !photo.isReview; + [self.pageButton setTitle:[NSString stringWithFormat:@"%ld/%lu",(index + 1), (unsigned long)self.imageUrls.count] forState:UIControlStateNormal]; + UserPhoto * photo = [self.userPhtotArray objectAtIndex:index]; + self.reviewIcon.hidden = !photo.isReview; } // 轮播图点击 - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index { - NSInteger count = self.imageUrls.count; - SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init]; - browser.sourceImagesContainerView = self.pi_BannerView; - browser.delegate = self; - browser.imageCount = count; - browser.currentImageIndex = index; - browser.isMe = NO; - [browser show]; + NSInteger count = self.imageUrls.count; + SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init]; + browser.sourceImagesContainerView = self.cycleScrollView; + browser.delegate = self; + browser.imageCount = count; + browser.currentImageIndex = index; + browser.isMe = NO; + [browser show]; +} +///复制id +-(void)copyNameAction{ + [XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"XPMineUserInfoHeaderView0")]; + UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; + pasteboard. string = [NSString stringWithFormat:@"%ld", (long)_userInfo.erbanNo]; +} +-(void)toSoundAction{ + if(self.soundTimeView.hidden == NO){ + [self playSoundAction]; + return; + } + if(self.delegate && [self.delegate respondsToSelector:@selector(didClickGoToPlaySound)]){ + [self.delegate didClickGoToPlaySound]; + } +} +-(void)setPlaySoundStatus:(BOOL)isPlay{ + self.palySoundBtn.selected = isPlay; + if(self.palySoundBtn.selected == YES){ + [self.soundSVGAView startAnimation]; + }else{ + [self.soundSVGAView stopAnimation]; + self.soundTimeView.text = [NSString stringWithFormat:@"%ld\"",_soundModel.second]; + } +} +-(void)setPlaySoundTime:(NSInteger)time{ + self.soundTimeView.text = [NSString stringWithFormat:@"%ld\"",time]; +} +#pragma mark - XPMineUserInfoHeaderTagView +- (void)didClickGotoIvidualView{ + if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoHeaderView:didClickGotoEditView:)]){ + [self.delegate xPMineUserInfoHeaderView:self didClickGotoEditView:self.tagView.itemList]; + } +} +- (void)didClickGotoEditVC{ + if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoHeaderView:didClickGotoEditVC:)]){ + [self.delegate xPMineUserInfoHeaderView:self didClickGotoEditVC:self.tagView.itemList]; + } } - #pragma mark - Event Response -- (void)onlineButtonAction:(UIButton *)sender { - if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoHeaderView:didClickGoToRoom:)]) { - [self.delegate xPMineUserInfoHeaderView:self didClickGoToRoom:self.roomUid]; - } +-(void)clickAvatarAction{ + + SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init]; + browser.sourceImagesContainerView = self.avatarView; + browser.delegate = self; + browser.imageCount = 1; + browser.currentImageIndex = 0; + browser.isMe = NO; + browser.isAvatar = YES; + [browser show]; } - -- (void)copysIdRecognizer { - [UIPasteboard generalPasteboard].string = [NSString stringWithFormat:@"%ld", self.userInfo.erbanNo]; - [XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"XPMineUserInfoHeaderView0")]; - [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventID_mydata_copyid_click]; +- (void)onlineButtonAction:(UIButton *)sender { + if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoHeaderView:didClickGoToRoom:)]) { + [self.delegate xPMineUserInfoHeaderView:self didClickGoToRoom:self.roomUid]; + } +} +-(void)playSoundAction{ + self.palySoundBtn.selected = !self.palySoundBtn.selected; + if(self.palySoundBtn.selected == YES){ + [self.soundSVGAView startAnimation]; + }else{ + [self.soundSVGAView stopAnimation]; + } + if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoHeaderView:didClickPlaySound:)]){ + [self.delegate xPMineUserInfoHeaderView:self didClickPlaySound:self.palySoundBtn.selected]; + } } #pragma mark - Getters And Setters -- (void)setUserInfo:(UserInfoModel *)userInfo { - _userInfo = userInfo; - if (_userInfo) { - self.nameLabel.text = _userInfo.nick; - self.idLabel.text = [NSString stringWithFormat:@"ID:%ld", (long)_userInfo.erbanNo]; - self.signLabel.text = _userInfo.userDesc.length > 0 ? _userInfo.userDesc : YMLocalizedString(@"XPMineUserInfoHeaderView1"); - self.fansNumLabel.text =[NSString stringWithFormat:YMLocalizedString(@"XPMineUserInfoHeaderView2"), _userInfo.fansNum]; - self.sexImageView.image = userInfo.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; - self.officalImageView.hidden = userInfo.defUser != UserLevelType_Offical; - self.beautifulImageViw.hidden = !userInfo.hasPrettyErbanNo; - self.newUserImageView.hidden = !userInfo.newUser; - self.nobleImageView.imageUrl = userInfo.userVipInfoVO.vipIcon; - UIImage *nobleImage = self.nobleImageView.image; - if (nobleImage) { - CGFloat scale = nobleImage.size.width / nobleImage.size.height; - [self.nobleImageView mas_updateConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(20* scale, 20)); - }]; - [self.nickStackView mas_updateConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.nobleImageView.mas_right).mas_offset(5); - }]; - } else { - [self.nobleImageView mas_updateConstraints:^(MASConstraintMaker *make) { - make.size.mas_equalTo(CGSizeMake(0, 20)); - }]; - [self.nickStackView mas_updateConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.nobleImageView.mas_right); - }]; + +-(void)setSoundModel:(XPSoundCardModel *)soundModel{ + _soundModel = soundModel; + if(_soundModel != nil){ + if(_soundModel.status == 2){ + _soundView.hidden = NO; + _soundTimeView.hidden = NO; + _soundSVGAView.hidden = NO; + _soundPromptView.hidden = YES; + _soundTimeView.text = [NSString stringWithFormat:@"%ld\"",_soundModel.second]; + return; } - if (userInfo.userLevelVo.experUrl) { - self.experImageView.imageUrl = userInfo.userLevelVo.experUrl; - } - self.experImageView.hidden = userInfo.userLevelVo.experUrl.length <= 0; - - if (userInfo.userLevelVo.charmUrl) { - self.charmImageView.imageUrl = userInfo.userLevelVo.charmUrl; - } - self.charmImageView.hidden = userInfo.userLevelVo.charmUrl.length <= 0; - - if (userInfo.nameplateWord.length>0 && userInfo.nameplatePic.length>0) { - self.nameplateImageView.imageUrl = userInfo.nameplatePic; - self.nameplateLabel.text = userInfo.nameplateWord; - self.namePlateView.hidden = NO; - } else { - self.namePlateView.hidden = YES; - } - [self.userPhtotArray removeAllObjects]; - self.copysIdImageView.hidden = NO; - // 轮播图 - NSMutableArray * imageUrls = [NSMutableArray array]; - if (userInfo.avatar) { - [imageUrls addObject:userInfo.avatar]; - if (![self.userPhtotArray containsObject:self.avatarPhoto]) { - [self.userPhtotArray addObject:self.avatarPhoto]; - } - self.avatarPhoto.isReview = userInfo.isReview; - self.avatarPhoto.photoUrl = userInfo.avatar; - } - if (self.userInfo.privatePhoto.count > 0) { - for (int i = 0; i < self.userInfo.privatePhoto.count; i++) { - UserPhoto * photo = [self.userInfo.privatePhoto safeObjectAtIndex1:i]; - if (photo.photoUrl.length > 0) { - [self.userPhtotArray addObject:photo]; - [imageUrls addObject:photo.photoUrl]; - } - } - } - - if (imageUrls.count > 0) { - self.imageUrls = imageUrls; - self.pi_BannerView.imageURLStringsGroup = imageUrls; - [self.pageButton setTitle:[NSString stringWithFormat:@"1/%lu",(unsigned long)imageUrls.count] forState:UIControlStateNormal];; - // 要初始化一下当前的审核状态 - self.reviewIcon.hidden = ![self.userPhtotArray objectAtIndex:0].isReview; - } - } + if(_soundModel.uid.integerValue == [[AccountInfoStorage instance] getUid].integerValue){ + _soundView.hidden = NO; + _soundPromptView.hidden = NO; + _soundTimeView.hidden = YES; + _soundSVGAView.hidden = YES; + } + + return; + } + + if(_soundModel.uid.integerValue == [[AccountInfoStorage instance] getUid].integerValue){ + _soundView.hidden = NO; + _soundPromptView.hidden = NO; + _soundTimeView.hidden = YES; + _soundSVGAView.hidden = YES; + return; + } + _soundView.hidden = YES; + _soundTimeView.text = [NSString stringWithFormat:@"%d\"",0]; + + +} +- (void)setUserInfo:(UserInfoModel *)userInfo { + _userInfo = userInfo; + if (_userInfo) { + self.nameLabel.text = _userInfo.nick; + NSString *text = [NSString stringWithFormat:@"ID:%ld", (long)_userInfo.erbanNo]; + NSMutableAttributedString *textAtt = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@ ",text] attributes:@{NSForegroundColorAttributeName:self.idLabel.textColor}]; + NSTextAttachment * attachment = [[NSTextAttachment alloc] init]; + UIImage *iconImage = [UIImage imageNamed:@"user_card_copy_id1"];; + attachment.bounds = CGRectMake(0, roundf(self.idLabel.font.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height); + attachment.image = iconImage; + [textAtt insertAttributedString:[NSMutableAttributedString attributedStringWithAttachment:attachment] atIndex:textAtt.length]; + self.idLabel.attributedText = textAtt; + + + self.signLabel.text = _userInfo.userDesc.length > 0 ? _userInfo.userDesc : YMLocalizedString(@"XPMineUserInfoHeaderView0"); + self.fansNumLabel.text =[NSString stringWithFormat:YMLocalizedString(@"XPMineUserInfoHeaderView2"), _userInfo.fansNum]; + self.sexImageView.image = userInfo.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; + self.officalImageView.hidden = userInfo.defUser != UserLevelType_Offical; + self.beautifulImageViw.hidden = !userInfo.hasPrettyErbanNo; + self.newUserImageView.hidden = !userInfo.newUser; + if (userInfo.userLevelVo.experUrl) { + self.experImageView.imageUrl = userInfo.userLevelVo.experUrl; + } + self.experImageView.hidden = userInfo.userLevelVo.experUrl.length <= 0; + + if (userInfo.userLevelVo.charmUrl) { + self.charmImageView.imageUrl = userInfo.userLevelVo.charmUrl; + } + self.charmImageView.hidden = userInfo.userLevelVo.charmUrl.length <= 0; + + if (userInfo.nameplateWord.length>0 && userInfo.nameplatePic.length>0) { + self.nameplateImageView.imageUrl = userInfo.nameplatePic; + self.nameplateLabel.text = userInfo.nameplateWord; + self.namePlateView.hidden = NO; + } else { + self.namePlateView.hidden = YES; + } + [self.userPhtotArray removeAllObjects]; + // 轮播图 + NSMutableArray * imageUrls = [NSMutableArray array]; + if (userInfo.avatar) { + [imageUrls addObject:userInfo.avatar]; + if (![self.userPhtotArray containsObject:self.avatarPhoto]) { + [self.userPhtotArray addObject:self.avatarPhoto]; + } + self.avatarPhoto.isReview = userInfo.isReview; + self.avatarPhoto.photoUrl = userInfo.avatar; + self.avatarView.imageUrl = userInfo.avatar; + } + if (self.userInfo.privatePhoto.count > 0) { + for (int i = 0; i < self.userInfo.privatePhoto.count; i++) { + UserPhoto * photo = [self.userInfo.privatePhoto objectAtIndex:i]; + if (photo.photoUrl.length > 0) { + [self.userPhtotArray addObject:photo]; + [imageUrls addObject:photo.photoUrl]; + } + } + } + + if (imageUrls.count > 0) { + self.imageUrls = imageUrls; + self.cycleScrollView.imageURLStringsGroup = imageUrls; + [self.pageButton setTitle:[NSString stringWithFormat:@"1/%lu",(unsigned long)imageUrls.count] forState:UIControlStateNormal];; + // 要初始化一下当前的审核状态 + if(self.userPhtotArray.count > 0){ + self.reviewIcon.hidden = ![self.userPhtotArray objectAtIndex:0].isReview; + } + } + } } - (void)setRoomUid:(NSString *)roomUid { - _roomUid = roomUid; - self.onlineButton.hidden = _roomUid.length <= 0; + _roomUid = roomUid; + if([XPSkillCardPlayerManager shareInstance].isInRoom == YES || [[XPRoomMiniManager shareManager] getRoomInfo] != nil){ + self.onlineView.hidden = _roomUid.length <= 0; + }else{ + self.onlineView.hidden = YES; + } + +} +-(void)setTagModel:(XPMineUserInfoTagModel *)tagModel{ + _tagModel = tagModel; + NSMutableArray *itemList = [NSMutableArray array]; + for (NSString *text in _tagModel.meLabels) { + if(text.length > 0){ + XPMineUserInfoTagItemModel *model = [XPMineUserInfoTagItemModel new]; + model.label = text; + CGRect stringRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, 18) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10 weight:UIFontWeightRegular]} context:nil]; + model.width = stringRect.size.width + 14; + [itemList addObject:model]; + } + } + NSString *uid = [[AccountInfoStorage instance]getUid]; + BOOL isMe = self.userInfo.uid == uid.integerValue; + if(isMe == YES){ + _tagView.hidden = NO; + }else{ + _tagView.hidden = !(itemList.count > 0); + } + _tagView.uid = @(self.userInfo.uid).stringValue; + _tagView.itemList = itemList; + } - - (UIImageView *)coverImageView { - if (!_coverImageView) { - _coverImageView = [[UIImageView alloc] init]; - _coverImageView.userInteractionEnabled = NO; - _coverImageView.image = [UIImage imageNamed:@"mine_userinfo_header_shadow_bg"]; - } - return _coverImageView; + if (!_coverImageView) { + _coverImageView = [[UIImageView alloc] init]; + _coverImageView.userInteractionEnabled = NO; + _coverImageView.image = [UIImage imageNamed:@"mine_userinfo_header_shadow_bg"]; + + } + return _coverImageView; } - (UIView *)userInfoView { - if (!_userInfoView) { - _userInfoView = [[UIView alloc] init]; - _userInfoView.backgroundColor = [UIColor clearColor]; - _userInfoView.layer.masksToBounds = YES; - _userInfoView.layer.cornerRadius = 12; - } - return _userInfoView; + if (!_userInfoView) { + _userInfoView = [[UIView alloc] init]; + _userInfoView.backgroundColor = [UIColor clearColor]; + _userInfoView.layer.masksToBounds = YES; + _userInfoView.layer.cornerRadius = 12; + } + return _userInfoView; } - (UIImageView *)usershadowImageView { - if (!_usershadowImageView) { - _usershadowImageView = [[UIImageView alloc] init]; - _usershadowImageView.userInteractionEnabled = YES; - } - return _usershadowImageView; -} - -- (NetImageView *)nobleImageView { - if (!_nobleImageView) { - _nobleImageView = [[NetImageView alloc] init]; + if (!_usershadowImageView) { + _usershadowImageView = [[UIImageView alloc] init]; + _usershadowImageView.userInteractionEnabled = YES; + _usershadowImageView.backgroundColor = [UIColor whiteColor]; + _usershadowImageView.layer.cornerRadius = 13; + _usershadowImageView.layer.masksToBounds = YES; } - return _nobleImageView; + return _usershadowImageView; } - (UIStackView *)nickStackView { - if (!_nickStackView) { - _nickStackView = [[UIStackView alloc] init]; - _nickStackView.axis = UILayoutConstraintAxisHorizontal; - _nickStackView.distribution = UIStackViewDistributionFill; - _nickStackView.alignment = UIStackViewAlignmentCenter; - _nickStackView.spacing = 10; - } - return _nickStackView; + if (!_nickStackView) { + _nickStackView = [[UIStackView alloc] init]; + _nickStackView.axis = UILayoutConstraintAxisHorizontal; + _nickStackView.distribution = UIStackViewDistributionFill; + _nickStackView.alignment = UIStackViewAlignmentCenter; + _nickStackView.spacing = 5; + } + return _nickStackView; } - (UILabel *)nameLabel { - if (!_nameLabel) { - _nameLabel = [[UILabel alloc] init]; - _nameLabel.font = [UIFont fontWithName:@"PingFang-SC-Medium" size:15]; - _nameLabel.textColor = [UIColor whiteColor]; - } - return _nameLabel; + if (!_nameLabel) { + _nameLabel = [[UILabel alloc] init]; + _nameLabel.font = [UIFont fontWithName:@"PingFang-SC-Medium" size:18]; + _nameLabel.textColor = UIColorFromRGB(0x1F1A4E); + + + } + return _nameLabel; } - (UIImageView *)sexImageView { - if (!_sexImageView) { - _sexImageView = [[UIImageView alloc] init]; - _sexImageView.userInteractionEnabled = YES; - } - return _sexImageView; + if (!_sexImageView) { + _sexImageView = [[UIImageView alloc] init]; + _sexImageView.userInteractionEnabled = YES; + } + return _sexImageView; } - (UIStackView *)idStackView { - if (!_idStackView) { - _idStackView = [[UIStackView alloc] init]; - _idStackView.axis = UILayoutConstraintAxisHorizontal; - _idStackView.distribution = UIStackViewDistributionFill; - _idStackView.alignment = UIStackViewAlignmentCenter; - _idStackView.spacing = 3; - } - return _idStackView; + if (!_idStackView) { + _idStackView = [[UIStackView alloc] init]; + _idStackView.axis = UILayoutConstraintAxisHorizontal; + _idStackView.distribution = UIStackViewDistributionFill; + _idStackView.alignment = UIStackViewAlignmentCenter; + _idStackView.spacing = 5; + } + return _idStackView; } - (UIImageView *)beautifulImageViw { - if (!_beautifulImageViw) { - _beautifulImageViw = [[UIImageView alloc] init]; - _beautifulImageViw.userInteractionEnabled = YES; - _beautifulImageViw.image = [UIImage imageNamed:@"common_icon_beautiful"]; - } - return _beautifulImageViw; + if (!_beautifulImageViw) { + _beautifulImageViw = [[UIImageView alloc] init]; + _beautifulImageViw.userInteractionEnabled = YES; + _beautifulImageViw.image = [UIImage imageNamed:@"common_icon_beautiful"]; + } + return _beautifulImageViw; } - (UILabel *)fansNumLabel { - if (!_fansNumLabel) { - _fansNumLabel = [[UILabel alloc] init]; - _fansNumLabel.font = [UIFont systemFontOfSize:12]; - _fansNumLabel.textColor = [UIColor whiteColor]; - } - return _fansNumLabel; + if (!_fansNumLabel) { + _fansNumLabel = [[UILabel alloc] init]; + _fansNumLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightRegular]; + _fansNumLabel.textColor = UIColorFromRGB(0x6D6B89); + } + return _fansNumLabel; } - (UIView *)spaceView { - if (!_spaceView) { - _spaceView = [[UIView alloc] init]; - _spaceView.backgroundColor = [UIColor clearColor]; - } - return _spaceView; + if (!_spaceView) { + _spaceView = [[UIView alloc] init]; + _spaceView.backgroundColor = [UIColor clearColor]; + } + return _spaceView; } - (UILabel *)idLabel { - if (!_idLabel) { - _idLabel = [[UILabel alloc] init]; - _idLabel.font = [UIFont systemFontOfSize:11]; - _idLabel.textColor = [UIColor whiteColor]; - _idLabel.userInteractionEnabled = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(copysIdRecognizer)]; - [_idLabel addGestureRecognizer:tap]; - } - return _idLabel; + if (!_idLabel) { + _idLabel = [[UILabel alloc] init]; + _idLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightRegular]; + _idLabel.textColor = UIColorFromRGB(0x6D6B89); + _idLabel.userInteractionEnabled = YES; + UITapGestureRecognizer *longPress = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(copyNameAction)]; + [_idLabel addGestureRecognizer:longPress]; + } + return _idLabel; +} +-(UIImageView *)onlineView{ + if (!_onlineView){ + _onlineView = [UIImageView new]; + UIImage *image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:1 imgSize:CGSizeMake(84, 22)]; + _onlineView.image = image; + _onlineView.userInteractionEnabled = YES; + _onlineView.hidden = YES; + + } + return _onlineView; } +- (SVGAImageView *)onlineIconView { + if (_onlineIconView == nil) { + _onlineIconView = [[SVGAImageView alloc]init]; + _onlineIconView.contentMode = UIViewContentModeScaleToFill; + _onlineIconView.userInteractionEnabled = NO; + _onlineIconView.backgroundColor = [UIColor clearColor]; + } + return _onlineIconView; +} + + +-(UILabel *)onlineTitleView{ + if (!_onlineTitleView){ + _onlineTitleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoHeaderView3") font:[UIFont systemFontOfSize:11 weight:UIFontWeightRegular] textColor:[UIColor whiteColor]]; + } + return _onlineTitleView; +} - (UIButton *)onlineButton { - if (!_onlineButton) { - _onlineButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_onlineButton setTitle:YMLocalizedString(@"XPMineUserInfoHeaderView3") forState:UIControlStateNormal]; - [_onlineButton setTitleColor:[DJDKMIMOMColor confirmButtonTextColor] forState:UIControlStateNormal]; - _onlineButton.titleLabel.font = [UIFont systemFontOfSize:12]; - [_onlineButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal]; - _onlineButton.layer.masksToBounds = YES; - _onlineButton.layer.cornerRadius = 10; - [_onlineButton addTarget:self action:@selector(onlineButtonAction:) forControlEvents:UIControlEventTouchUpInside]; - } - return _onlineButton; + if (!_onlineButton) { + _onlineButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_onlineButton addTarget:self action:@selector(onlineButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [_onlineButton setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + } + return _onlineButton; } -- (SDCycleScrollView *)pi_BannerView{ - if (!_pi_BannerView) { - _pi_BannerView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectZero delegate:self placeholderImage:[UIImageConstant defalutBannerPlaceholder]]; - _pi_BannerView.backgroundColor = [UIColor clearColor]; - _pi_BannerView.bannerImageViewContentMode = UIViewContentModeScaleAspectFill; - _pi_BannerView.pageControlStyle = SDCycleScrollViewPageContolStyleNone; - _pi_BannerView.autoScroll = NO; - } - return _pi_BannerView; +- (SDCycleScrollView *)cycleScrollView { + if (!_cycleScrollView) { + _cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectZero delegate:self placeholderImage:[UIImageConstant defalutBannerPlaceholder]]; + _cycleScrollView.backgroundColor = [UIColor clearColor]; + _cycleScrollView.bannerImageViewContentMode = UIViewContentModeScaleAspectFill; + _cycleScrollView.pageControlStyle = SDCycleScrollViewPageContolStyleNone; + _cycleScrollView.autoScroll = NO; + } + return _cycleScrollView; } - (UIButton *)pageButton { - if (!_pageButton) { - _pageButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_pageButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - _pageButton.titleLabel.font = [UIFont systemFontOfSize:10]; - [_pageButton setBackgroundImage:[UIImage imageNamed:@"mine_user_info_header_page_bg"] forState:UIControlStateNormal]; - } - return _pageButton; + if (!_pageButton) { + _pageButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_pageButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + _pageButton.titleLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightRegular]; + _pageButton.backgroundColor = UIColorRGBAlpha(0x000000, 0.4); + _pageButton.layer.cornerRadius = 11; + _pageButton.layer.masksToBounds = YES; + + } + return _pageButton; } - (UIImageView *)reviewIcon { - if (!_reviewIcon) { - _reviewIcon = [[UIImageView alloc] init]; - _reviewIcon.image = [UIImage imageNamed:@"mine_album_reviewing"]; - _reviewIcon.hidden = YES; - } - return _reviewIcon; + if (!_reviewIcon) { + _reviewIcon = [[UIImageView alloc] init]; + _reviewIcon.image = [UIImage imageNamed:@"mine_album_reviewing"]; + _reviewIcon.hidden = YES; + } + return _reviewIcon; } - (UIStackView *)tagStackView { - if (!_tagStackView) { - _tagStackView = [[UIStackView alloc] init]; - _tagStackView.axis = UILayoutConstraintAxisHorizontal; - _tagStackView.distribution = UIStackViewDistributionFill; - _tagStackView.alignment = UIStackViewAlignmentCenter; - _tagStackView.spacing = 2; - } - return _tagStackView; + if (!_tagStackView) { + _tagStackView = [[UIStackView alloc] init]; + _tagStackView.axis = UILayoutConstraintAxisHorizontal; + _tagStackView.distribution = UIStackViewDistributionFill; + _tagStackView.alignment = UIStackViewAlignmentCenter; + _tagStackView.spacing = 6; + } + return _tagStackView; } - (NetImageView *)experImageView { - if (!_experImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _experImageView = [[NetImageView alloc] initWithConfig:config]; - _experImageView.userInteractionEnabled = YES; - _experImageView.hidden = YES; - _experImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _experImageView; + if (!_experImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _experImageView = [[NetImageView alloc] initWithConfig:config]; + _experImageView.userInteractionEnabled = YES; + _experImageView.hidden = YES; + _experImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _experImageView; } - (NetImageView *)charmImageView { - if (!_charmImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _charmImageView = [[NetImageView alloc] initWithConfig:config]; - _charmImageView.userInteractionEnabled = YES; - _charmImageView.hidden = YES; - _charmImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _charmImageView; + if (!_charmImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _charmImageView = [[NetImageView alloc] initWithConfig:config]; + _charmImageView.userInteractionEnabled = YES; + _charmImageView.hidden = YES; + _charmImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _charmImageView; } - (NetImageView *)nobleIconImageView { - if (!_nobleIconImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _nobleIconImageView = [[NetImageView alloc] initWithConfig:config]; - _nobleIconImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _nobleIconImageView; + if (!_nobleIconImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _nobleIconImageView = [[NetImageView alloc] initWithConfig:config]; + _nobleIconImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _nobleIconImageView; } - (UIView *)namePlateView { - if (!_namePlateView) { - _namePlateView = [[UIView alloc] init]; - _namePlateView.backgroundColor = [UIColor clearColor]; - _namePlateView.hidden = YES; - } - return _namePlateView; + if (!_namePlateView) { + _namePlateView = [[UIView alloc] init]; + _namePlateView.backgroundColor = [UIColor clearColor]; + _namePlateView.hidden = YES; + } + return _namePlateView; } - (NetImageView *)nameplateImageView { - if (!_nameplateImageView) { - NetImageConfig * config = [[NetImageConfig alloc] init]; - config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; - config.imageType = ImageTypeUserCardLevel; - _nameplateImageView = [[NetImageView alloc] initWithConfig:config]; - _nameplateImageView.userInteractionEnabled = YES; - _nameplateImageView.contentMode = UIViewContentModeScaleAspectFit; - } - return _nameplateImageView; + if (!_nameplateImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserCardLevel; + _nameplateImageView = [[NetImageView alloc] initWithConfig:config]; + _nameplateImageView.userInteractionEnabled = YES; + _nameplateImageView.contentMode = UIViewContentModeScaleAspectFit; + } + return _nameplateImageView; } - (UILabel *)nameplateLabel { - if (!_nameplateLabel) { - _nameplateLabel = [[UILabel alloc] init]; - _nameplateLabel.font = [UIFont systemFontOfSize:10]; - _nameplateLabel.textAlignment = NSTextAlignmentCenter; - _nameplateLabel.textColor = [UIColor whiteColor]; - } - return _nameplateLabel; + if (!_nameplateLabel) { + _nameplateLabel = [[UILabel alloc] init]; + _nameplateLabel.font = [UIFont systemFontOfSize:10]; + _nameplateLabel.textAlignment = NSTextAlignmentCenter; + _nameplateLabel.textColor = [UIColor whiteColor]; + } + return _nameplateLabel; } - (UIImageView *)newUserImageView { - if (!_newUserImageView) { - _newUserImageView = [[UIImageView alloc] init]; - _newUserImageView.userInteractionEnabled = YES; - _newUserImageView.image = [UIImage imageNamed:@"common_new_user"]; - _newUserImageView.hidden = YES; - } - return _newUserImageView; + if (!_newUserImageView) { + _newUserImageView = [[UIImageView alloc] init]; + _newUserImageView.userInteractionEnabled = YES; + _newUserImageView.image = [UIImage imageNamed:@"common_new_user"]; + _newUserImageView.hidden = YES; + } + return _newUserImageView; } - (UIImageView *)officalImageView { - if (!_officalImageView) { - _officalImageView = [[UIImageView alloc] init]; - _officalImageView.userInteractionEnabled = YES; - _officalImageView.image = [UIImage imageNamed:@"common_offical"]; - _officalImageView.hidden = YES; - } - return _officalImageView; + if (!_officalImageView) { + _officalImageView = [[UIImageView alloc] init]; + _officalImageView.userInteractionEnabled = YES; + _officalImageView.image = [UIImage imageNamed:@"common_offical"]; + _officalImageView.hidden = YES; + } + return _officalImageView; } - (UIView *)signBackView { - if (!_signBackView) { - _signBackView = [[UIView alloc] init]; - _signBackView.backgroundColor = [DJDKMIMOMColor appBackgroundColor]; - CAShapeLayer * layer = [CAShapeLayer layer]; - layer.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KScreenWidth, 79) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(12, 12)].CGPath; - _signBackView.layer.mask = layer; - } - return _signBackView; + if (!_signBackView) { + _signBackView = [[UIView alloc] init]; + _signBackView.backgroundColor = [UIColor whiteColor]; + + } + return _signBackView; } -- (UIView *)lineView { - if (!_lineView) { - _lineView = [[UIView alloc] init]; - _lineView.backgroundColor = [DJDKMIMOMColor dividerColor]; - } - return _lineView; -} +//- (UIView *)lineView { +// if (!_lineView) { +// _lineView = [[UIView alloc] init]; +// _lineView.backgroundColor = [DJDKMIMOMColor dividerColor]; +// } +// return _lineView; +//} - (UILabel *)signLabel { - if (!_signLabel) { - _signLabel = [[UILabel alloc] init]; - _signLabel.font = [UIFont systemFontOfSize:12];; - _signLabel.textColor = [DJDKMIMOMColor secondTextColor]; - _signLabel.numberOfLines = 2; - } - return _signLabel; + if (!_signLabel) { + _signLabel = [[UILabel alloc] init]; + _signLabel.font = [UIFont systemFontOfSize:13 weight:UIFontWeightRegular];; + _signLabel.textColor = UIColorFromRGB(0xB3B3C3); + _signLabel.numberOfLines = 2; + + } + return _signLabel; } - (NSMutableArray *)userPhtotArray { - if (!_userPhtotArray) { - _userPhtotArray = [NSMutableArray array]; - } - return _userPhtotArray; + if (!_userPhtotArray) { + _userPhtotArray = [NSMutableArray array]; + } + return _userPhtotArray; } - (UserPhoto *)avatarPhoto { - if (!_avatarPhoto) { - _avatarPhoto = [[UserPhoto alloc] init]; - } - return _avatarPhoto; + if (!_avatarPhoto) { + _avatarPhoto = [[UserPhoto alloc] init]; + } + return _avatarPhoto; } - -- (UIImageView *)copysIdImageView { - if (!_copysIdImageView) { - _copysIdImageView = [[UIImageView alloc] init]; - _copysIdImageView.userInteractionEnabled = YES; - _copysIdImageView.image = [UIImage imageNamed:@"mine_user_id_copy_white"]; - _copysIdImageView.hidden = YES; - UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(copysIdRecognizer)]; - [_copysIdImageView addGestureRecognizer:tap]; - } - return _copysIdImageView; +-(NetImageView *)avatarView{ + if (!_avatarView){ + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + config.imageType = ImageTypeUserIcon; + _avatarView = [[NetImageView alloc]initWithConfig:config]; + _avatarView.layer.cornerRadius = 44; + _avatarView.layer.masksToBounds = YES; + _avatarView.layer.borderWidth = 1; + _avatarView.userInteractionEnabled = YES; + _avatarView.layer.borderColor = [UIColor whiteColor].CGColor; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickAvatarAction)]; + [_avatarView addGestureRecognizer:tap]; + } + return _avatarView; +} +-(UIImageView *)bgView{ + if (!_bgView){ + _bgView = [UIImageView new]; + _bgView.image = [UIImage imageNamed:@"mine_userinfo_header_bg"]; + } + return _bgView; +} +- (UIImageView *)soundView{ + if (!_soundView){ + _soundView = [UIImageView new]; + UIImage *image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(98, 28)]; + _soundView.image = image; + _soundView.layer.cornerRadius = 14; + _soundView.userInteractionEnabled = YES; + _soundView.layer.masksToBounds = YES; + _soundView.hidden = YES; + } + return _soundView; +} +- (UIButton *)palySoundBtn{ + if (!_palySoundBtn){ + _palySoundBtn = [UIButton new]; + [_palySoundBtn setBackgroundImage:kImage(@"mine_info_close") forState:UIControlStateNormal]; + [_palySoundBtn setBackgroundImage:kImage(@"mine_info_paly") forState:UIControlStateSelected]; + [_palySoundBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + [_palySoundBtn addTarget:self action:@selector(playSoundAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _palySoundBtn; +} +- (SVGAImageView *)soundSVGAView { + if (_soundSVGAView == nil) { + _soundSVGAView = [[SVGAImageView alloc]init]; + _soundSVGAView.contentMode = UIViewContentModeScaleToFill; + _soundSVGAView.userInteractionEnabled = NO; + _soundSVGAView.backgroundColor = [UIColor clearColor]; + } + return _soundSVGAView; +} +- (UILabel *)soundTimeView{ + if (!_soundTimeView){ + _soundTimeView = [UILabel labelInitWithText:@"0\"" font:[UIFont systemFontOfSize:14 weight:UIFontWeightMedium] textColor:[UIColor whiteColor]]; + } + return _soundTimeView; +} +- (UILabel *)soundPromptView{ + if (!_soundPromptView){ + _soundPromptView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoHeaderView4") font:[UIFont systemFontOfSize:12 weight:UIFontWeightMedium] textColor:[UIColor whiteColor]]; + _soundPromptView.hidden = YES; + _soundPromptView.userInteractionEnabled = YES; + } + return _soundPromptView; +} +-(UIButton *)toSoundBtn{ + if (!_toSoundBtn){ + _toSoundBtn = [UIButton new]; + [_toSoundBtn addTarget:self action:@selector(toSoundAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _toSoundBtn; +} +-(XPMineUserInfoHeaderTagView *)tagView{ + if (!_tagView){ + _tagView = [[XPMineUserInfoHeaderTagView alloc]initWithFrame:CGRectZero]; + _tagView.delegate = self; + } + return _tagView; +} +- (UIStackView *)singStackView { + if (!_singStackView) { + _singStackView = [[UIStackView alloc] init]; + _singStackView.axis = UILayoutConstraintAxisVertical; + _singStackView.distribution = UIStackViewDistributionFill; + _singStackView.alignment = UIStackViewAlignmentCenter; + _singStackView.spacing = 11; + } + return _singStackView; } - @end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoIndividualTagView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoIndividualTagView.h new file mode 100644 index 00000000..d8f6b75a --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoIndividualTagView.h @@ -0,0 +1,26 @@ +// +// XPMineUserInfoIndividualTagView.h +// xplan-ios +// +// Created by duoban on 2023/2/16. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@protocol XPMineUserInfoIndividualTagViewDelegate + +- (void)didClickGotoEditVC; + + +@end + +@interface XPMineUserInfoIndividualTagView : UIView +@property (nonatomic,strong) NSMutableArray *itemList; +/// +@property (nonatomic,copy) NSString *uid; +/// +@property (nonatomic,weak) id delegate; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoIndividualTagView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoIndividualTagView.m new file mode 100644 index 00000000..ec541de5 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoIndividualTagView.m @@ -0,0 +1,184 @@ +// +// XPMineUserInfoIndividualTagView.m +// xplan-ios +// +// Created by duoban on 2023/2/16. +// +#import "XPMineUserInfoTagFlowLayout.h" +#import "XPMineUserInfoHeaderTagCell.h" +#import "XPMineUserInfoTagModel.h" +#import "XPMineUserInfoIndividualTagView.h" +@interface XPMineUserInfoIndividualTagView() + + +@property (nonatomic,strong) UICollectionView *collectionView; +///标题 +@property (nonatomic,strong) UILabel *titleView; +///返回按钮 +@property (nonatomic,strong) UIButton *backBtn; +///编辑按钮 +@property (nonatomic,strong) UIButton *editBtn; +///背景 +@property (nonatomic,strong) UIView *bgView; +///容器 +@property (nonatomic,strong) UIStackView *stackView; + +@end +@implementation XPMineUserInfoIndividualTagView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} +-(void)setUid:(NSString *)uid{ + _uid = uid; + BOOL isMe = [[[AccountInfoStorage instance]getUid]isEqualToString:_uid]; + _editBtn.hidden = !isMe; + _titleView.text = isMe ? YMLocalizedString(@"XPMineUserInfoIndividualTagView1"):YMLocalizedString(@"XPMineUserInfoIndividualTagView0"); +} +#pragma mark - Private Method +- (void)initSubViews { + + [self addSubview:self.bgView]; + [self.bgView addSubview:self.backBtn]; + [self.bgView addSubview:self.titleView]; + [self.bgView addSubview:self.stackView]; + [self.stackView addArrangedSubview:self.collectionView]; + [self.stackView addArrangedSubview:self.editBtn]; +} +- (void)initSubViewConstraints { + [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(kGetScaleWidth(310)); + make.height.mas_equalTo(kGetScaleWidth(220)); + make.center.equalTo(self); + }]; + [self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(22)); + make.top.mas_equalTo(kGetScaleWidth(10)); + make.right.mas_equalTo(-kGetScaleWidth(15)); + }]; + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kGetScaleWidth(18)); + make.centerX.equalTo(self.bgView); + }]; + + [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.equalTo(self.bgView); + make.bottom.mas_equalTo(-kGetScaleWidth(20)); + make.top.equalTo(self.titleView.mas_bottom); + }]; + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.left.right.equalTo(self.stackView); + }]; + [self.editBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(kGetScaleWidth(130)); + make.height.mas_equalTo(kGetScaleWidth(34)); + make.centerX.equalTo(self.stackView); + }]; + +} +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + return CGSizeMake(model.width, kGetScaleWidth(18)); +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + + return self.itemList.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + + XPMineUserInfoHeaderTagCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoHeaderTagCell class]) forIndexPath:indexPath]; + cell.isTag = indexPath.row < 3; + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + cell.title = model.label; + cell.contentView.layer.cornerRadius = 9; + cell.titleView.font = kFontRegular(10); + return cell; +} +-(void)setItemList:(NSMutableArray *)itemList{ + _itemList = itemList; + + [_collectionView reloadData]; +} +-(void)backAction{ + [TTPopup dismiss]; +} +-(void)editAction{ + + if(self.delegate && [self.delegate respondsToSelector:@selector(didClickGotoEditVC)]){ + [self.delegate didClickGotoEditVC]; + } + [TTPopup dismiss]; +} +#pragma mark -懒加载 +- (UICollectionView *)collectionView{ + if (!_collectionView) { + XPMineUserInfoTagFlowLayout *layout = [[XPMineUserInfoTagFlowLayout alloc] init]; + layout.delegate = self; + layout.sectionInset = UIEdgeInsetsMake(kGetScaleWidth(15), kGetScaleWidth(15), kGetScaleWidth(15), kGetScaleWidth(15)); + layout.minimumLineSpacing = kGetScaleWidth(12); + layout.minimumInteritemSpacing = kGetScaleWidth(5); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.backgroundColor = [UIColor clearColor]; + [_collectionView registerClass:[XPMineUserInfoHeaderTagCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoHeaderTagCell class])]; + _collectionView.showsVerticalScrollIndicator = YES; + _collectionView.showsHorizontalScrollIndicator = YES; + } + return _collectionView; +} +- (UIView *)bgView{ + if (!_bgView){ + _bgView = [UIView new]; + _bgView.backgroundColor = [UIColor whiteColor]; + [_bgView setCornerWithLeftTopCorner:kGetScaleWidth(12) rightTopCorner:kGetScaleWidth(12) bottomLeftCorner:kGetScaleWidth(12) bottomRightCorner:kGetScaleWidth(12) size:CGSizeMake(kGetScaleWidth(310), kGetScaleWidth(220))]; + } + return _bgView; +} +- (UILabel *)titleView{ + if (!_titleView){ + _titleView = [UILabel labelInitWithText:@"" font:kFontMedium(17) textColor:UIColorFromRGB(0x1F1B4F)]; + } + return _titleView; +} +-(UIButton *)backBtn{ + if (!_backBtn){ + _backBtn = [UIButton new]; + [_backBtn setBackgroundImage:kImage(@"mine_guild_close") forState:UIControlStateNormal]; + [_backBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + [_backBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _backBtn; +} +- (UIStackView *)stackView { + if (!_stackView) { + _stackView = [[UIStackView alloc] init]; + _stackView.axis = UILayoutConstraintAxisVertical; + _stackView.distribution = UIStackViewDistributionFill; + _stackView.alignment = UIStackViewAlignmentCenter; + _stackView.spacing = kGetScaleWidth(10); + } + return _stackView; +} +-(UIButton *)editBtn{ + if (!_editBtn){ + _editBtn = [UIButton new]; + UIImage *image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(kGetScaleWidth(130), kGetScaleWidth(34))]; + [_editBtn setBackgroundImage:image forState:UIControlStateNormal]; + [_editBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + _editBtn.titleLabel.font = kFontMedium(14); + [_editBtn setTitle:YMLocalizedString(@"XPMineUserInfoIndividualTagView2") forState:UIControlStateNormal]; + [_editBtn addTarget:self action:@selector(editAction) forControlEvents:UIControlEventTouchUpInside]; + _editBtn.layer.cornerRadius = kGetScaleWidth(17); + _editBtn.layer.masksToBounds = YES; + } + return _editBtn; +} +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagEmptyView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagEmptyView.h new file mode 100644 index 00000000..a056d85f --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagEmptyView.h @@ -0,0 +1,16 @@ +// +// XPMineUserInfoTagEmptyView.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineUserInfoTagEmptyView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagEmptyView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagEmptyView.m new file mode 100644 index 00000000..d312c4a6 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagEmptyView.m @@ -0,0 +1,58 @@ +// +// XPMineUserInfoTagEmptyView.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import "XPMineUserInfoTagEmptyView.h" +@interface XPMineUserInfoTagEmptyView () +///图片 +@property (nonatomic,strong) UIImageView *iconView; +///标题 +@property (nonatomic,strong) UILabel *titleView; +@end +@implementation XPMineUserInfoTagEmptyView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.iconView]; + [self addSubview:self.titleView]; +} +- (void)initSubViewConstraints { + [self.iconView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.mas_equalTo(kGetScaleWidth(55)); + make.height.mas_equalTo(kGetScaleWidth(56)); + make.top.mas_equalTo(kNavigationHeight + kGetScaleWidth(18)); + make.centerX.equalTo(self); + }]; + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kNavigationHeight + kGetScaleWidth(95)); + make.centerX.equalTo(self); + }]; +} +#pragma mark -懒加载 +- (UIImageView *)iconView{ + if (!_iconView){ + _iconView = [UIImageView new]; + _iconView.image = kImage(@"mine_info_tag_empty"); + } + return _iconView; +} +-(UILabel *)titleView{ + if (!_titleView){ + _titleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoTagEmptyViewCell0") font:kFontRegular(14) textColor:[UIColor whiteColor]]; + } + return _titleView; +} + +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagFlowLayout.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagFlowLayout.h new file mode 100644 index 00000000..e99692e2 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagFlowLayout.h @@ -0,0 +1,19 @@ +// +// XPMineUserInfoTagFlowLayout.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol EqualSpaceFlowLayoutDelegate +@end +@interface XPMineUserInfoTagFlowLayout : UICollectionViewFlowLayout +@property (nonatomic,weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagFlowLayout.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagFlowLayout.m new file mode 100644 index 00000000..ccd2a0d3 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagFlowLayout.m @@ -0,0 +1,65 @@ +// +// XPMineUserInfoTagFlowLayout.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import "XPMineUserInfoTagFlowLayout.h" +@interface XPMineUserInfoTagFlowLayout() +@property (nonatomic, strong) NSMutableArray *itemAttributes; +@end +@implementation XPMineUserInfoTagFlowLayout +#pragma mark - Methods to Override +- (void)prepareLayout +{ + [super prepareLayout]; + + NSInteger itemCount = [[self collectionView] numberOfItemsInSection:0]; + self.itemAttributes = [NSMutableArray arrayWithCapacity:itemCount]; + + CGFloat xOffset = self.sectionInset.left; + CGFloat yOffset = self.sectionInset.top; + CGFloat xNextOffset = self.sectionInset.left; + for (NSInteger idx = 0; idx < itemCount; idx++) { + NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx inSection:0]; + CGSize itemSize = [self.delegate collectionView:self.collectionView layout:self sizeForItemAtIndexPath:indexPath]; + + xNextOffset+=(self.minimumInteritemSpacing + itemSize.width); + if (xNextOffset > [self collectionView].bounds.size.width - self.sectionInset.right) { + xOffset = self.sectionInset.left; + xNextOffset = (self.sectionInset.left + self.minimumInteritemSpacing + itemSize.width); + yOffset += (itemSize.height + self.minimumLineSpacing); + } + else + { + xOffset = xNextOffset - (self.minimumInteritemSpacing + itemSize.width); + } + + UICollectionViewLayoutAttributes *layoutAttributes = + [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath]; + + layoutAttributes.frame = CGRectMake(xOffset, yOffset, itemSize.width, itemSize.height); + [_itemAttributes addObject:layoutAttributes]; + } +} + +- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath +{ + return (self.itemAttributes)[indexPath.item]; +} + +- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect +{ + return [self.itemAttributes filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(UICollectionViewLayoutAttributes *evaluatedObject, NSDictionary *bindings) { + return CGRectIntersectsRect(rect, [evaluatedObject frame]); + }]]; +} + +- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds +{ + return NO; +} + + +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagHeadView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagHeadView.h new file mode 100644 index 00000000..b2f3ede2 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagHeadView.h @@ -0,0 +1,20 @@ +// +// XPMineUserInfoTagHeadView.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import +#import "XPMineUserInfoTagModel.h" +NS_ASSUME_NONNULL_BEGIN + + + +@interface XPMineUserInfoTagHeadView : UIView +/// +@property (nonatomic,strong) XPMineUserInfoTagModel *tagModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagHeadView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagHeadView.m new file mode 100644 index 00000000..69f06a0c --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagHeadView.m @@ -0,0 +1,146 @@ +// +// XPMineUserInfoTagHeadView.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// +UIKIT_EXTERN NSString * kMineInfoDelTag; +#import "XPMineUserInfoTagHeadView.h" +///cell +#import "XPMineUserInfoTagViewCell.h" +#import "XPMineUserInfoTagEmptyView.h" +#import "XPMineUserInfoTagFlowLayout.h" +@interface XPMineUserInfoTagHeadView() +@property (nonatomic,strong) UICollectionView *collectionView; +/// +@property (nonatomic,strong) NSMutableArray *itemList; +/// +@property (nonatomic,strong) XPMineUserInfoTagEmptyView *emptyView; + +@end +@implementation XPMineUserInfoTagHeadView +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} +-(void)setTagModel:(XPMineUserInfoTagModel *)tagModel{ + _tagModel = tagModel; + [_itemList removeAllObjects]; + for (NSString *text in _tagModel.meLabels) { + if(text.length > 0){ + XPMineUserInfoTagItemModel *model = [XPMineUserInfoTagItemModel new]; + model.label = text; + CGRect stringRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, kGetScaleWidth(18)) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFontRegular(13)} context:nil]; + model.width = stringRect.size.width + kGetScaleWidth(46); + [_itemList addObject:model]; + } + + } + _collectionView.hidden = !(_itemList.count > 0); + _emptyView.hidden = _itemList.count > 0; + [_collectionView reloadData]; + + if(_itemList.count > 0 && [_collectionView visibleCells] > 0){ + [self scrollBottom]; + + } + +} +-(void)scrollBottom{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.itemList.count - 1 inSection:0] atScrollPosition:UICollectionViewScrollPositionTop animated:YES]; + + }); +} + +#pragma mark - Private Method +- (void)initSubViews { + _itemList = [NSMutableArray array]; + UIImage *image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xB0DAFF),UIColorFromRGB(0xB0DAFF),UIColorFromRGB(0xF4DBFF)] gradientType:GradientTypeTopToBottom imgSize:CGSizeMake(KScreenWidth, kGetScaleWidth(304))]; + self.backgroundColor = [UIColor colorWithPatternImage:image]; + [self addSubview:self.emptyView]; + [self addSubview:self.collectionView]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(delTagItem:) name:kMineInfoDelTag object:nil]; +} +- (void)initSubViewConstraints { + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.equalTo(self); + make.top.mas_equalTo(kNavigationHeight); + }]; + [self.emptyView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; +} +-(void)delTagItem:(NSNotification *)not{ + XPMineUserInfoTagItemModel *model = not.object; + NSMutableArray *meLabels = [NSMutableArray arrayWithArray:self.tagModel.meLabels]; + if([meLabels containsObject:model.label]){ + [meLabels removeObject:model.label]; + } + self.tagModel.meLabels = meLabels; + [self.itemList removeObject:model]; + _collectionView.hidden = !(_itemList.count > 0); + _emptyView.hidden = _itemList.count > 0; + [_collectionView reloadData]; + if(_itemList.count > 0 && [_collectionView visibleCells] > 0){ + [self scrollBottom]; + } +} +#pragma mark - UICollectionViewDelegate And UICollectionViewDatasource + + + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + return CGSizeMake(model.width, kGetScaleWidth(34)); + +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return self.itemList.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + + XPMineUserInfoTagViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoTagViewCell class]) forIndexPath:indexPath]; + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + cell.headModel = model; + return cell; + + +} +#pragma mark -懒加载 +- (UICollectionView *)collectionView{ + if (!_collectionView) { + XPMineUserInfoTagFlowLayout *layout = [[XPMineUserInfoTagFlowLayout alloc] init]; + layout.delegate = self; + layout.minimumLineSpacing = kGetScaleWidth(15); + layout.minimumInteritemSpacing = kGetScaleWidth(15); + layout.sectionInset = UIEdgeInsetsMake(kGetScaleWidth(15), kGetScaleWidth(15), kGetScaleWidth(64), kGetScaleWidth(15)); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.hidden = YES; + _collectionView.pagingEnabled = NO; + _collectionView.backgroundColor = [UIColor clearColor]; + [_collectionView registerClass:[XPMineUserInfoTagViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoTagViewCell class])]; + _collectionView.showsVerticalScrollIndicator = NO; + } + return _collectionView; +} + +- (XPMineUserInfoTagEmptyView *)emptyView{ + if (!_emptyView){ + _emptyView = [[XPMineUserInfoTagEmptyView alloc]initWithFrame:CGRectZero]; + } + return _emptyView; +} +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagItemView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagItemView.h new file mode 100644 index 00000000..d1737707 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagItemView.h @@ -0,0 +1,28 @@ +// +// XPMineUserInfoTagItemView.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import +#import +#import "XPMineUserInfoTagModel.h" +#import "XPMineUserInfoTagModel.h" +NS_ASSUME_NONNULL_BEGIN + +@protocol XPMineUserInfoTagItemViewDelegate + +-(void)didSelectTag; + + +@end + +@interface XPMineUserInfoTagItemView : UIView +@property (nonatomic,strong) XPMineUserInfoTagModel *tagModel; +@property (nonatomic,strong) NSMutableArray *itemList; +/// +@property (nonatomic,weak) id delegate; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagItemView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagItemView.m new file mode 100644 index 00000000..537196f8 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagItemView.m @@ -0,0 +1,118 @@ +// +// XPMineUserInfoTagItemView.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import "XPMineUserInfoTagItemView.h" +///view +#import "XPMineUserInfoTagViewCell.h" +#import "XPMineUserInfoTagModel.h" +#import "XPMineUserInfoTagFlowLayout.h" +@interface XPMineUserInfoTagItemView () +@property (nonatomic,strong) UICollectionView *collectionView; + + +@end +@implementation XPMineUserInfoTagItemView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.collectionView]; +} +- (void)initSubViewConstraints { + [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.equalTo(self); + make.bottom.mas_equalTo(0); + }]; +} +-(void)setItemList:(NSMutableArray *)itemList{ + _itemList = itemList; + for (XPMineUserInfoTagItemModel *model in self.itemList) { + CGRect stringRect = [model.label boundingRectWithSize:CGSizeMake(MAXFLOAT, kGetScaleWidth(18)) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFontRegular(13)} context:nil]; + model.width = stringRect.size.width + kGetScaleWidth(32); + model.isNoChooseTag = YES; + } + + [self.collectionView reloadData]; + + + +} +#pragma mark - UICollectionViewDelegate And UICollectionViewDatasource + + + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + return CGSizeMake(model.width, kGetScaleWidth(34)); +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + + return self.itemList.count; +} + +- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + + XPMineUserInfoTagViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoTagViewCell class]) forIndexPath:indexPath]; + cell.mainTagModel = self.tagModel; + cell.tagModel = self.itemList[indexPath.row]; + + return cell; +} +-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ + XPMineUserInfoTagItemModel *model = self.itemList[indexPath.row]; + NSMutableArray *meLabels = [NSMutableArray arrayWithArray:self.tagModel.meLabels]; + [meLabels removeObject:@""]; + if(model.picked == NO && meLabels.count >= 20){ + [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPMineUserInfoTagItemView0")]; + return; + } + model.picked = !model.picked; + if(model.picked == NO){ + [meLabels removeObject:model.label]; + }else{ + [meLabels addObject:model.label]; + } + self.tagModel.meLabels = meLabels; + [self.collectionView reloadData]; + if(self.delegate && [self.delegate respondsToSelector:@selector(didSelectTag)]){ + [self.delegate didSelectTag]; + } +} +#pragma mark -懒加载 +- (UICollectionView *)collectionView{ + if (!_collectionView) { + XPMineUserInfoTagFlowLayout *layout = [[XPMineUserInfoTagFlowLayout alloc] init]; + layout.delegate = self; + layout.sectionInset = UIEdgeInsetsMake(kGetScaleWidth(7), kGetScaleWidth(15), kGetScaleWidth(30), kGetScaleWidth(15)); + layout.minimumLineSpacing = kGetScaleWidth(15); + layout.minimumInteritemSpacing = kGetScaleWidth(15); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + _collectionView.dataSource = self; + _collectionView.delegate = self; + _collectionView.pagingEnabled = NO; + _collectionView.backgroundColor = [UIColor clearColor]; + [_collectionView registerClass:[XPMineUserInfoTagViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoTagViewCell class])]; + + _collectionView.showsVerticalScrollIndicator = NO; + } + return _collectionView; +} +#pragma mark - JXCategoryListContentViewDelegate +- (UIView *)listView { + return self; +} + +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagView.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagView.h new file mode 100644 index 00000000..76ee4dcc --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagView.h @@ -0,0 +1,24 @@ +// +// XPMineUserInfoTagView.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import +#import "XPMineUserInfoTagModel.h" +NS_ASSUME_NONNULL_BEGIN +@protocol XPMineUserInfoTagViewDelegate + +-(void)didingSelectTag; + + +@end +@interface XPMineUserInfoTagView : UIView +/// +@property (nonatomic,strong) XPMineUserInfoTagModel *tagModel; +/// +@property (nonatomic,weak) id delegate; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagView.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagView.m new file mode 100644 index 00000000..ea24870f --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagView.m @@ -0,0 +1,135 @@ +// +// XPMineUserInfoTagView.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// +///Third +#import +#import +#import +#import +#import "XPMineUserInfoTagView.h" +///view +#import "XPMineUserInfoTagItemView.h" +@interface XPMineUserInfoTagView() +///分页标题 +@property (nonatomic, strong) NSArray *titles; +///分页控件 +@property (nonatomic, strong) JXCategoryTitleView *titleView; +///分页lineView +@property (nonatomic, strong) JXCategoryListContainerView *pi_containerView; +///数据源 +/// +@property (nonatomic,strong) NSMutableArray *dataList; +@end +@implementation XPMineUserInfoTagView + + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.dataList = [NSMutableArray array]; + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.titleView]; + [self addSubview:self.pi_containerView]; +} +- (void)initSubViewConstraints { + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.equalTo(self); + make.height.mas_equalTo(kGetScaleWidth(40)); + }]; + + [self.pi_containerView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.equalTo(self); + make.top.mas_equalTo(self.titleView.mas_bottom); + }]; +} +-(void)setTagModel:(XPMineUserInfoTagModel *)tagModel{ + _tagModel = tagModel; + _titles = _tagModel.groups; + [_dataList removeAllObjects]; + for (NSString *label in _titles) { + NSMutableArray *array = [NSMutableArray array]; + for (XPMineUserInfoTagItemModel *model in _tagModel.labels) { + if([model.group isEqualToString:label]){ + [array addObject:model]; + } + } + [_dataList addObject:array]; + } + _titleView.titles = _titles; + [_titleView reloadData]; +} +#pragma mark -XPMineUserInfoTagItemViewDelegate +-(void)didSelectTag{ + if(self.delegate && [self.delegate respondsToSelector:@selector(didingSelectTag)]){ + [self.delegate didingSelectTag]; + } +} +#pragma mark - JXCategoryViewDelegate +- (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { + return self.titles.count; +} + +- (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { + XPMineUserInfoTagItemView *tagView = [[XPMineUserInfoTagItemView alloc]init]; + NSMutableArray *modelList = self.dataList[index]; + tagView.itemList = modelList; + tagView.tagModel = self.tagModel; + tagView.delegate = self; + return tagView; +} +#pragma mark -懒加载 +- (JXCategoryTitleView *)titleView { + if (!_titleView) { + _titleView = [[JXCategoryTitleView alloc] init]; + _titleView.delegate = self; + _titleView.titles = self.titles; + _titleView.backgroundColor = [UIColor clearColor]; + _titleView.titleColor = UIColorFromRGB(0xB3B3C3); + _titleView.titleSelectedColor = UIColorFromRGB(0x1F1B4F); + _titleView.titleFont = kFontMedium(15); + _titleView.titleSelectedFont = kFontMedium(15); + _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; + _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; + _titleView.defaultSelectedIndex = 0; + _titleView.cellWidthIncrement = 5; + _titleView.listContainer = self.pi_containerView; + + JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init]; + lineView.indicatorImageViewSize = CGSizeMake(kGetScaleWidth(12), kGetScaleWidth(3)); + lineView.verticalMargin = kGetScaleWidth(5); + lineView.indicatorImageView.image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(kGetScaleWidth(12), kGetScaleWidth(3))]; + lineView.indicatorImageView.layer.masksToBounds = YES; + lineView.indicatorImageView.layer.cornerRadius = kGetScaleWidth(3)/2; + _titleView.indicators = @[lineView]; + } + return _titleView; +} + +- (JXCategoryListContainerView *)pi_containerView { + if (!_pi_containerView) { + _pi_containerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; + _pi_containerView.defaultSelectedIndex = 0; + _pi_containerView.scrollView.tag = 1009; + } + return _pi_containerView; +} + +- (NSArray *)titles { + if (!_titles) { + _titles = @[]; + } + return _titles; +} + +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagViewCell.h b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagViewCell.h new file mode 100644 index 00000000..b56610ac --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagViewCell.h @@ -0,0 +1,22 @@ +// +// XPMineUserInfoTagViewCell.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import +#import "XPMineUserInfoTagModel.h" +NS_ASSUME_NONNULL_BEGIN + + + +@interface XPMineUserInfoTagViewCell : UICollectionViewCell +@property (nonatomic,strong) XPMineUserInfoTagItemModel *headModel; +/// +@property (nonatomic,strong) XPMineUserInfoTagItemModel *tagModel; + +@property (nonatomic,strong) XPMineUserInfoTagModel *mainTagModel; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagViewCell.m b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagViewCell.m new file mode 100644 index 00000000..ab23d0d7 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoTagViewCell.m @@ -0,0 +1,118 @@ +// +// XPMineUserInfoTagViewCell.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import "XPMineUserInfoTagViewCell.h" +UIKIT_EXTERN NSString * kMineInfoDelTag; +@interface XPMineUserInfoTagViewCell() +///容器 +@property (nonatomic,strong) UIStackView *stackView; +///内容 +@property (nonatomic,strong) UILabel *titleView; +///删除 +@property (nonatomic,strong) UIButton *delBtn; + +@end +@implementation XPMineUserInfoTagViewCell +-(void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.contentView.backgroundColor = [UIColor whiteColor]; + self.contentView.layer.cornerRadius = kGetScaleWidth(17); + self.contentView.layer.masksToBounds = YES; + [self.contentView addSubview:self.stackView]; + [self.stackView addArrangedSubview:self.titleView]; + [self.stackView addArrangedSubview:self.delBtn]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(delTagItem:) name:kMineInfoDelTag object:nil]; + +} + +-(void)delTagItem:(NSNotification *)not{ + XPMineUserInfoTagItemModel *model = not.object; + NSString *label = model.label; + if(self.tagModel != nil && [self.tagModel.label isEqualToString:label] ){ + self.tagModel.picked = NO; + self.contentView.backgroundColor = UIColorFromRGB(0xF7F7F9); + self.titleView.textColor = [DJDKMIMOMColor inputTextColor]; + } +} +- (void)initSubViewConstraints { + [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kGetScaleWidth(8)); + make.left.mas_equalTo(kGetScaleWidth(16)); + make.right.mas_equalTo(-kGetScaleWidth(12)); + make.bottom.mas_equalTo(-kGetScaleWidth(8)); + }]; + [self.delBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(15)); + }]; + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + + make.height.mas_equalTo(kGetScaleWidth(18)); + + }]; +} +-(void)setHeadModel:(XPMineUserInfoTagItemModel *)headModel{ + _headModel = headModel; + _titleView.text = _headModel.label; +} +-(void)setTagModel:(XPMineUserInfoTagItemModel *)tagModel{ + _tagModel = tagModel; + _titleView.text = _tagModel.label; + _delBtn.hidden = _tagModel.isNoChooseTag; + if(_tagModel.picked == YES || [_mainTagModel.meLabels containsObject:_tagModel.label]){ + UIImage *image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xCCF8F9),UIColorFromRGB(0xDEE4FF),UIColorFromRGB(0xEEDCFF)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(_tagModel.width, kGetScaleWidth(34))]; + self.contentView.backgroundColor = [UIColor colorWithPatternImage:image]; + _titleView.textColor = UIColorFromRGB(0x9168FA); + }else{ + self.contentView.backgroundColor = UIColorFromRGB(0xF7F7F9); + _titleView.textColor = [DJDKMIMOMColor inputTextColor]; + } +} +-(void)delItemAction{ + [[NSNotificationCenter defaultCenter]postNotificationName:kMineInfoDelTag object:self.headModel]; +} +#pragma mark -懒加载 +-(UIStackView *)stackView{ + if (!_stackView){ + _stackView = [[UIStackView alloc] init]; + _stackView.axis = UILayoutConstraintAxisHorizontal; + _stackView.distribution = UIStackViewDistributionFill; + _stackView.alignment = UIStackViewAlignmentFill; + _stackView.spacing = kGetScaleWidth(2); + } + return _stackView; +} +- (UILabel *)titleView{ + if (!_titleView){ + _titleView = [UILabel labelInitWithText:@"" font:kFontRegular(13) textColor:[DJDKMIMOMColor inputTextColor]]; + _titleView.textAlignment = NSTextAlignmentCenter; + + } + return _titleView; +} +-(UIButton *)delBtn{ + if (!_delBtn){ + _delBtn = [UIButton new]; + [_delBtn setBackgroundImage:kImage(@"mine_info_tag_del") forState:UIControlStateNormal]; + [_delBtn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20]; + [_delBtn addTarget:self action:@selector(delItemAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _delBtn; +} + +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/XPMineDataSkillDataCollectionViewCell.h b/YuMi/Modules/YMMine/View/SubViews/XPMineDataSkillDataCollectionViewCell.h new file mode 100644 index 00000000..aef7a67c --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/XPMineDataSkillDataCollectionViewCell.h @@ -0,0 +1,16 @@ +// +// XPMineDataSkillDataCollectionViewCell.h +// xplan-ios +// +// Created by 冯硕 on 2022/4/14. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class MineSkillCardListInfoModel; +@interface XPMineDataSkillDataCollectionViewCell : UICollectionViewCell +@property (nonatomic,strong) MineSkillCardListInfoModel *skillInfo; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/SubViews/XPMineDataSkillDataCollectionViewCell.m b/YuMi/Modules/YMMine/View/SubViews/XPMineDataSkillDataCollectionViewCell.m new file mode 100644 index 00000000..cdae336e --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/XPMineDataSkillDataCollectionViewCell.m @@ -0,0 +1,145 @@ +// +// XPMineDataSkillDataCollectionViewCell.m +// xplan-ios +// +// Created by 冯硕 on 2022/4/14. +// + +#import "XPMineDataSkillDataCollectionViewCell.h" +///Third +#import +///Tool +#import "NetImageView.h" +///Model +#import "MineSkillCardListInfoModel.h" + +@interface XPMineDataSkillDataCollectionViewCell () + +///背景 +@property (nonatomic,strong) UIView * backView; +///显示图片 +@property (nonatomic,strong) NetImageView *logoImageView; +///标题 +@property (nonatomic,strong) UILabel *titleLabel; +///技能卡 +@property (nonatomic,strong) UILabel *skillLabel; + +@end + +@implementation XPMineDataSkillDataCollectionViewCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + self.backgroundColor = [UIColor clearColor]; + [self.contentView addSubview:self.backView]; + [self.backView addSubview:self.logoImageView]; + [self.backView addSubview:self.titleLabel]; + [self.backView addSubview:self.skillLabel]; +} + +- (void)initSubViewConstraints { + [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.contentView); + }]; + + [self.logoImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.bottom.mas_equalTo(self.backView).inset(8); + make.left.mas_equalTo(self.backView).offset(4); + make.height.mas_equalTo(self.logoImageView.mas_width); + }]; + + [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.mas_equalTo(self.logoImageView.mas_centerY).offset(-2); + make.left.mas_equalTo(self.logoImageView.mas_right).offset(4); + make.right.mas_lessThanOrEqualTo(self.backView); + }]; + + [self.skillLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.mas_equalTo(self.titleLabel); + make.top.mas_equalTo(self.logoImageView.mas_centerY).offset(2); + }]; +} +- (UIColor *)getSkillCardBackColor:(NSString *)cardId { + UIColor * color = UIColorFromRGB(0xFEF5E8); + if ([cardId isEqualToString:@"1"]) { + color = UIColorFromRGB(0xEEF2FF); + } else if([cardId isEqualToString:@"2"]) { + color = UIColorFromRGB(0xFEF5E8); + }else if([cardId isEqualToString:@"3"]) { + color = UIColorFromRGB(0xF2FFE0); + }else if([cardId isEqualToString:@"4"]) { + color = UIColorFromRGB(0xE9FFF4); + }else if([cardId isEqualToString:@"5"]) { + color = UIColorFromRGB(0xFFE7EF); + }else if([cardId isEqualToString:@"6"]) { + color = UIColorFromRGB(0xF9ECFF); + }else if([cardId isEqualToString:@"7"]) { + color = UIColorFromRGB(0xFFE4FB); + }else if([cardId isEqualToString:@"9"]) { + color = UIColorFromRGB(0xF7EFDB); + } + return color; +} + +#pragma mark - Getters And Setters +- (void)setSkillInfo:(MineSkillCardListInfoModel *)skillInfo { + _skillInfo = skillInfo; + if (_skillInfo) { + self.logoImageView.imageUrl = _skillInfo.icon; + NSString * title = [_skillInfo.propVals componentsJoinedByString:@"/"]; + self.skillLabel.text = title; + self.titleLabel.text = _skillInfo.name; + self.backView.backgroundColor = [self getSkillCardBackColor:skillInfo.cardId]; + } +} + +- (NetImageView *)logoImageView { + if (!_logoImageView) { + NetImageConfig * config = [[NetImageConfig alloc]init]; + config.imageType = ImageTypeUserIcon; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _logoImageView = [[NetImageView alloc] initWithConfig:config]; + } + return _logoImageView; +} + +- (UIView *)backView { + if (!_backView) { + _backView = [[UIView alloc] init]; + _backView.backgroundColor = UIColorFromRGB(0xFEF5E8); + _backView.layer.masksToBounds = YES; + _backView.layer.cornerRadius = 8; + } + return _backView; +} + +- (UILabel *)titleLabel { + if (!_titleLabel) { + _titleLabel = [[UILabel alloc] init]; + _titleLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium]; + _titleLabel.textColor = [DJDKMIMOMColor mainTextColor]; + } + return _titleLabel; +} + +- (UILabel *)skillLabel { + if (!_skillLabel) { + _skillLabel = [[UILabel alloc] init]; + _skillLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium]; + _skillLabel.textColor = [DJDKMIMOMColor mainTextColor]; + } + return _skillLabel; +} + + + +@end diff --git a/YuMi/Modules/YMMine/View/SubViews/XPMineUserInfoRecordedSoundView.h b/YuMi/Modules/YMMine/View/SubViews/XPMineUserInfoRecordedSoundView.h new file mode 100644 index 00000000..2f51912c --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/XPMineUserInfoRecordedSoundView.h @@ -0,0 +1,58 @@ +// +// XPMineUserInfoRecordedSoundView.h +// xplan-ios +// +// Created by duoban on 2022/12/29. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + + +@protocol XPMineUserInfoRecordedSoundViewDelegate +///开始录音 +- (void)startRecordAudio; +///停止录音 +-(void)stopRecordAudio; +///重新录音 +-(void)resetRecordAudio; +///播放录音 +-(void)playRecordAudio; +///停止播放录音 +-(void)stopPlayRecordAudio; +///删除录音 +-(void)deleteRecordingAudio; +///保存录音 +-(void)saveRecordAudio; + +@end + + +@interface XPMineUserInfoRecordedSoundView : UIView +@property (nonatomic,weak) id delegate; + +///正在录制 +-(void)recordingWithTime:(NSString *)time progress:(CGFloat)progress animated:(BOOL)animated; +///录制完成 +-(void)recordCompleted; +///开始录制 +-(void)startRecord; +///停止录制 +-(void)stopRecord; +///重置录制 +-(void)resetRecord; +///播放录音 +-(void)playRecord; +///停止播放录音 +-(void)stopPlayRecord; +///保存声音 +-(void)uploadRecordSuccess:(BOOL)isAudit; +///录制按钮的点击事件 +-(void)recordAction; +@end + +NS_ASSUME_NONNULL_END + + + diff --git a/YuMi/Modules/YMMine/View/SubViews/XPMineUserInfoRecordedSoundView.m b/YuMi/Modules/YMMine/View/SubViews/XPMineUserInfoRecordedSoundView.m new file mode 100644 index 00000000..9820c040 --- /dev/null +++ b/YuMi/Modules/YMMine/View/SubViews/XPMineUserInfoRecordedSoundView.m @@ -0,0 +1,525 @@ +// +// XPMineUserInfoRecordedSoundView.m +// xplan-ios +// +// Created by duoban on 2022/12/29. +// + +#import "XPMineUserInfoRecordedSoundView.h" +#import "SGYProgressView.h" +#import +#import "XPSkillCardPlayerManager.h" + +@interface XPMineUserInfoRecordedSoundView() +@property (nonatomic,strong) UIScrollView *scrollView; +///背景 +@property (nonatomic,strong) UIImageView *bgImageView; +///记录背景 +@property (nonatomic,strong) UIImageView *recordView; +///录制圆环进度条 +@property (nonatomic,strong) SGYProgressView *progressView; +///录制麦图标 +@property (nonatomic,strong) UIImageView *maiView; +///声音动效 +@property (nonatomic,strong) SVGAImageView *soundSVGAView; +///录制时间 +@property (nonatomic,strong) UILabel *timeView; +///提示 +@property (nonatomic,strong) UILabel *promptView; +///录制背景 +@property (nonatomic,strong) UIView *bgRecordView; +///录制 +@property (nonatomic,strong) UIButton *recordBtn; +///完成录制 +@property (nonatomic,strong) UIButton *completedBtn; +///录制下面提示 +@property (nonatomic,strong) UILabel *recordTitleView; + +///重新录制背景 +@property (nonatomic,strong) UIView *bgRerecordView; +///重新录制 +@property (nonatomic,strong) UIButton *rerecordBtn; +///重新录制下面提示 +@property (nonatomic,strong) UILabel *rerecordTitleView; +///保存声音 +@property (nonatomic,strong) UIButton *saveBtn; +///保存声音下面提示 +@property (nonatomic,strong) UILabel *saveTitleView; +///删除背景 +@property (nonatomic,strong) UIView *bgDeleteView; +///删除 +@property (nonatomic,strong) UIButton *deleteBtn; +///结果提示 +@property (nonatomic,strong) UILabel *resultView; +@end +@implementation XPMineUserInfoRecordedSoundView + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.scrollView]; + [self.scrollView addSubview:self.bgImageView]; + [self.scrollView addSubview:self.recordView]; + [self.recordView addSubview:self.progressView]; + [self.recordView addSubview:self.maiView]; + [self.recordView addSubview:self.soundSVGAView]; + [self.scrollView addSubview:self.timeView]; + [self.scrollView addSubview:self.promptView]; + [self.scrollView addSubview:self.bgRecordView]; + [self.bgRecordView addSubview:self.recordBtn]; + [self.bgRecordView addSubview:self.completedBtn]; + [self.scrollView addSubview:self.recordTitleView]; + [self.scrollView addSubview:self.bgRerecordView]; + [self.bgRerecordView addSubview:self.rerecordBtn]; + [self.scrollView addSubview:self.rerecordTitleView]; + [self.scrollView addSubview:self.bgDeleteView]; + [self.bgDeleteView addSubview:self.deleteBtn]; + [self.scrollView addSubview:self.saveBtn]; + [self.scrollView addSubview:self.saveTitleView]; + [self.scrollView addSubview:self.resultView]; + + + self.bgRerecordView.hidden = YES; + self.rerecordTitleView.hidden = YES; + self.bgDeleteView.hidden = YES; + self.saveBtn.hidden = YES; + self.saveTitleView.hidden = YES; + self.resultView.hidden = YES; + + SVGAParser *soundParser = [SVGAParser new]; + @kWeakify(self) + [soundParser parseWithNamed:@"mine_info_sound_record" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { + @kStrongify(self); + self.soundSVGAView.loops = 0; + self.soundSVGAView.clearsAfterStop = NO; + self.soundSVGAView.videoItem = videoItem; + [self.soundSVGAView startAnimation]; + } failureBlock:^(NSError * _Nonnull error) { + + }]; +} +- (void)initSubViewConstraints { + [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; + [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.equalTo(self); + make.height.mas_equalTo(kGetScaleWidth(216)); + }]; + [self.recordView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kGetScaleWidth(168)); + make.width.height.mas_equalTo(kGetScaleWidth(180)); + make.centerX.equalTo(self); + }]; + [self.maiView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(110)); + make.center.equalTo(self.recordView); + }]; + [self.soundSVGAView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(110)); + make.center.equalTo(self.recordView); + }]; + [self.timeView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.recordView.mas_bottom).mas_offset(kGetScaleWidth(30)); + make.centerX.equalTo(self); + }]; + [self.promptView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.timeView.mas_bottom).mas_offset(kGetScaleWidth(15)); + make.centerX.equalTo(self); + }]; + [self.bgRecordView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.promptView.mas_bottom).mas_offset(kGetScaleWidth(116)); + make.width.height.mas_equalTo(kGetScaleWidth(64)); + make.centerX.equalTo(self); + }]; + [self.completedBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(28)); + make.center.equalTo(self.bgRecordView); + }]; + [self.recordBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(28)); + make.center.equalTo(self.bgRecordView); + }]; + [self.recordTitleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.bgRecordView.mas_bottom).mas_offset(kGetScaleWidth(15)); + make.centerX.equalTo(self); + }]; + + [self.bgRerecordView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(42)); + make.centerY.equalTo(self.recordBtn); + make.right.equalTo(self.recordBtn.mas_left).mas_offset(-kGetScaleWidth(56)); + }]; + + [self.rerecordBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(18)); + make.center.equalTo(self.bgRerecordView); + }]; + [self.rerecordTitleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.bgRerecordView.mas_bottom).mas_offset(kGetScaleWidth(10)); + make.centerX.equalTo(self.rerecordBtn); + + }]; + + + [self.bgDeleteView mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(42)); + make.centerY.equalTo(self.recordBtn); + make.left.equalTo(self.recordBtn.mas_right).mas_offset(kGetScaleWidth(56)); + }]; + + [self.deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(18)); + make.center.equalTo(self.bgDeleteView); + }]; + + [self.saveBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(42)); + make.centerY.equalTo(self.recordBtn); + make.left.equalTo(self.recordBtn.mas_right).mas_offset(kGetScaleWidth(56)); + }]; + [self.saveTitleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.rerecordTitleView); + make.centerX.equalTo(self.saveBtn); + }]; + [self.resultView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.recordTitleView.mas_bottom).mas_offset(kGetScaleWidth(54)); + make.centerX.equalTo(self); + + }]; + [self.resultView.superview layoutIfNeeded]; + self.scrollView.contentSize = CGSizeMake(0, self.resultView.frame.origin.y + self.resultView.frame.size.height ); +} +-(void)recordingWithTime:(NSString *)time progress:(CGFloat)progress animated:(BOOL)animated{ + self.timeView.text = time; + [self.progressView setProgress:progress animated:animated startAngle:-M_PI_2 clockwise:YES]; +} +-(void)uploadRecordSuccess:(BOOL)isAudit{ + self.bgDeleteView.hidden = NO; + self.resultView.hidden = NO; + self.bgRerecordView.hidden = NO; + self.rerecordTitleView.hidden = NO; + self.saveBtn.hidden = YES; + self.soundSVGAView.hidden = YES; + self.maiView.hidden = NO; + self.recordBtn.hidden = YES; + self.completedBtn.hidden = NO; + self.saveTitleView.hidden = NO; + self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView6"); + self.saveTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView8"); + self.resultView.text = isAudit == YES ? YMLocalizedString(@"XPMineUserInfoRecordedSoundView9") : YMLocalizedString(@"XPMineUserInfoRecordedSoundView4"); + +} +-(void)recordCompleted{ + self.resultView.hidden = YES; + self.bgDeleteView.hidden = YES; + self.bgRerecordView.hidden = NO; + self.rerecordTitleView.hidden = NO; + self.saveBtn.hidden = NO; + self.soundSVGAView.hidden = YES; + self.maiView.hidden = NO; + self.recordBtn.hidden = YES; + self.completedBtn.hidden = NO; + self.saveTitleView.hidden = NO; + self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView6"); + self.saveTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView3"); +} +- (void)startRecord{ + + self.recordBtn.selected = YES; + self.soundSVGAView.hidden = NO; + self.maiView.hidden = YES; + self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView5"); +} +-(void)stopRecord{ + self.recordBtn.selected = NO; + self.soundSVGAView.hidden = YES; + self.maiView.hidden = NO; + self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView1"); +} +-(void)resetRecord{ + self.recordBtn.selected = NO; + self.soundSVGAView.hidden = YES; + self.maiView.hidden = NO; + self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView1"); + self.bgRerecordView.hidden = YES; + self.rerecordTitleView.hidden = YES; + self.saveBtn.hidden = YES; + self.soundSVGAView.hidden = YES; + self.maiView.hidden = NO; + self.recordBtn.hidden = NO; + self.completedBtn.hidden = YES; + self.saveTitleView.hidden = YES; + self.bgDeleteView.hidden = YES; + self.resultView.hidden = YES; + self.completedBtn.selected = NO; +} +-(void)playRecord{ + self.maiView.hidden = YES; + self.soundSVGAView.hidden = NO; + + self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView7"); + +} +-(void)stopPlayRecord{ + self.maiView.hidden = NO; + self.soundSVGAView.hidden = YES; + self.completedBtn.selected = NO; + self.recordTitleView.text = YMLocalizedString(@"XPMineUserInfoRecordedSoundView6"); +} +-(void)saveRecordAction{ + if(self.delegate && [self.delegate respondsToSelector:@selector(saveRecordAudio)]){ + [self.delegate saveRecordAudio]; + } +} +#pragma mark - buttonAction +-(void)recordAction{ + if([XPSkillCardPlayerManager shareInstance].isMineInMic == YES){ + [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPMineUserInfoRecordedSoundView10")]; + return; + } + + + self.recordBtn.selected = !self.recordBtn.selected; + if(!self.recordBtn.selected){ + self.recordBtn.userInteractionEnabled = NO; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + self.recordBtn.userInteractionEnabled = YES; + }); + } + if(self.recordBtn.selected){ + if(self.delegate && [self.delegate respondsToSelector:@selector(startRecordAudio)]){ + [self.delegate startRecordAudio]; + } + return; + } + if(self.delegate && [self.delegate respondsToSelector:@selector(stopRecordAudio)]){ + [self.delegate stopRecordAudio]; + } + +} +-(void)playSoundAction{ + self.completedBtn.selected = !self.completedBtn.selected; + if(self.completedBtn.selected){ + if(self.delegate && [self.delegate respondsToSelector:@selector(playRecordAudio)]){ + [self.delegate playRecordAudio]; + } + + return; + } + if(self.delegate && [self.delegate respondsToSelector:@selector(stopPlayRecordAudio)]){ + [self.delegate stopPlayRecordAudio]; + } +} +-(void)resetRecordAction{ + if(self.delegate && [self.delegate respondsToSelector:@selector(resetRecordAudio)]){ + [self.delegate resetRecordAudio]; + } +} +-(void)deleteRecordingAction{ + if(self.delegate && [self.delegate respondsToSelector:@selector(deleteRecordingAudio)]){ + [self.delegate deleteRecordingAudio]; + } +} +#pragma mark -懒加载 +- (UIImageView *)bgImageView{ + if (!_bgImageView){ + _bgImageView = [UIImageView new]; + UIImage *image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xDBE3FC),UIColorFromRGB(0xF2F1FF),[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1]] gradientType:GradientTypeTopToBottom imgSize:CGSizeMake(KScreenWidth, kGetScaleWidth(216))]; + _bgImageView.image = image; + } + return _bgImageView; +} +- (UIImageView *)recordView{ + if (!_recordView){ + _recordView = [UIImageView new]; + _recordView.image = kImage(@"mine_recorded_sound_bg"); + } + return _recordView; +} +- (SGYProgressView *)progressView{ + if (!_progressView){ + _progressView = [[SGYProgressView alloc]initWithFrame:CGRectMake(0, 0, kGetScaleWidth(180), kGetScaleWidth(180)) trackWidth:kGetScaleWidth(8)]; + UIImage *image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(kGetScaleWidth(180), kGetScaleWidth(180))]; + _progressView.progressColor = [UIColor colorWithPatternImage:image]; + _progressView.progressBgColor = [UIColor clearColor]; + } + return _progressView; +} +- (UIImageView *)maiView{ + if (!_maiView){ + _maiView = [UIImageView new]; + _maiView.image = kImage(@"mine_recorded_sound_mic"); + } + return _maiView; +} +- (SVGAImageView *)soundSVGAView { + if (_soundSVGAView == nil) { + _soundSVGAView = [[SVGAImageView alloc]init]; + _soundSVGAView.contentMode = UIViewContentModeScaleToFill; + _soundSVGAView.userInteractionEnabled = NO; + _soundSVGAView.hidden = YES; + _soundSVGAView.backgroundColor = [UIColor clearColor]; + } + return _soundSVGAView; +} +- (UILabel *)timeView{ + if (!_timeView){ + _timeView = [UILabel labelInitWithText:@"0s/60s" font:kFontSemibold(14) textColor:[DJDKMIMOMColor inputTextColor]]; + } + return _timeView; +} +- (UILabel *)promptView{ + if (!_promptView){ + _promptView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView0") font:kFontRegular(14) textColor:[DJDKMIMOMColor disableButtonTextColor]]; + } + return _promptView; +} + +- (UIView *)bgRecordView{ + if (!_bgRecordView){ + _bgRecordView = [[UIView alloc] init]; + _bgRecordView.frame = CGRectMake(0,0,kGetScaleWidth(64),kGetScaleWidth(64)); + _bgRecordView.layer.backgroundColor = [UIColor clearColor].CGColor; + _bgRecordView.layer.shadowColor = [UIColor colorWithRed:225/255.0 green:232/255.0 blue:246/255.0 alpha:1.0].CGColor; + _bgRecordView.layer.shadowOffset = CGSizeMake(0,kGetScaleWidth(1)); + _bgRecordView.layer.shadowOpacity = kGetScaleWidth(1); + _bgRecordView.layer.shadowRadius = kGetScaleWidth(11); + UIView *bgView = [UIView new]; + bgView.frame = CGRectMake(0,0,kGetScaleWidth(64),kGetScaleWidth(64)); + bgView.backgroundColor = [UIColor whiteColor]; + bgView.layer.cornerRadius = kGetScaleWidth(32); + bgView.layer.masksToBounds = YES; + [_bgRecordView addSubview:bgView]; + } + return _bgRecordView; +} +-(UIButton *)completedBtn{ + if (!_completedBtn){ + _completedBtn = [UIButton new]; + _completedBtn.hidden = YES; + [_completedBtn setImage:kImage(@"mine_recorded_sound_completed") forState:UIControlStateNormal]; + [_completedBtn setImage:kImage(@"mine_recorded_sound_completeding") forState:UIControlStateSelected]; + [_completedBtn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20]; + [_completedBtn addTarget:self action:@selector(playSoundAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _completedBtn; +} +-(UIButton *)recordBtn{ + if (!_recordBtn){ + _recordBtn = [UIButton new]; + [_recordBtn setBackgroundImage:kImage(@"mine_recorded_sound_start_record") forState:UIControlStateNormal]; + [_recordBtn setBackgroundImage:kImage(@"mine_recorded_sound_recording") forState:UIControlStateSelected]; + [_recordBtn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20]; + [_recordBtn addTarget:self action:@selector(recordAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _recordBtn; +} +-(UILabel *)recordTitleView{ + if (!_recordTitleView){ + _recordTitleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView1") font:kFontRegular(14) textColor:UIColorFromRGB(0x6D6B89)]; + } + return _recordTitleView; +} +- (UIView *)bgRerecordView{ + if (!_bgRerecordView){ + _bgRerecordView = [[UIView alloc] init]; + _bgRerecordView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); + _bgRerecordView.layer.backgroundColor = [UIColor clearColor].CGColor; + _bgRerecordView.layer.shadowColor = [UIColor colorWithRed:225/255.0 green:232/255.0 blue:246/255.0 alpha:1.0].CGColor; + _bgRerecordView.layer.shadowOffset = CGSizeMake(0,kGetScaleWidth(1)); + _bgRerecordView.layer.shadowOpacity = kGetScaleWidth(1); + _bgRerecordView.layer.shadowRadius = kGetScaleWidth(11); + UIView *bgView = [UIView new]; + bgView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); + bgView.backgroundColor = [UIColor whiteColor]; + bgView.layer.cornerRadius = kGetScaleWidth(21); + bgView.layer.masksToBounds = YES; + [_bgRerecordView addSubview:bgView]; + } + return _bgRerecordView; +} +-(UIButton *)rerecordBtn{ + if (!_rerecordBtn){ + _rerecordBtn = [UIButton new]; + [_rerecordBtn setImage:kImage(@"mine_recorded_sound_rerecord") forState:UIControlStateNormal]; + [_rerecordBtn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20]; + [_rerecordBtn addTarget:self action:@selector(resetRecordAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _rerecordBtn; +} +-(UILabel *)rerecordTitleView{ + if (!_rerecordTitleView){ + _rerecordTitleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView2") font:kFontRegular(12) textColor:UIColorFromRGB(0x6D6B89)]; + } + return _rerecordTitleView; +} +-(UIView *)bgDeleteView{ + if (!_bgDeleteView){ + _bgDeleteView = [[UIView alloc] init]; + _bgDeleteView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); + _bgDeleteView.layer.backgroundColor = [UIColor clearColor].CGColor; + _bgDeleteView.layer.shadowColor = [UIColor colorWithRed:225/255.0 green:232/255.0 blue:246/255.0 alpha:1.0].CGColor; + _bgDeleteView.layer.shadowOffset = CGSizeMake(0,kGetScaleWidth(1)); + _bgDeleteView.layer.shadowOpacity = kGetScaleWidth(1); + _bgDeleteView.layer.shadowRadius = kGetScaleWidth(11); + UIView *bgView = [UIView new]; + bgView.frame = CGRectMake(0,0,kGetScaleWidth(42),kGetScaleWidth(42)); + bgView.backgroundColor = [UIColor whiteColor]; + bgView.layer.cornerRadius = kGetScaleWidth(21); + bgView.layer.masksToBounds = YES; + [_bgDeleteView addSubview:bgView]; + } + return _bgDeleteView; +} +-(UIButton *)deleteBtn{ + if (!_deleteBtn){ + _deleteBtn = [UIButton new]; + [_deleteBtn setImage:kImage(@"mine_recorded_sound_del") forState:UIControlStateNormal]; + [_deleteBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + [_deleteBtn addTarget:self action:@selector(deleteRecordingAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _deleteBtn; +} +-(UIButton *)saveBtn{ + if (!_saveBtn){ + _saveBtn = [UIButton new]; + [_saveBtn setImage:kImage(@"mine_recorded_sound_save") forState:UIControlStateNormal]; + [_saveBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + [_saveBtn addTarget:self action:@selector(saveRecordAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _saveBtn; +} +-(UILabel *)saveTitleView{ + if (!_saveTitleView){ + _saveTitleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView3") font:kFontRegular(12) textColor:UIColorFromRGB(0x6D6B89)]; + } + return _saveTitleView; +} +-(UILabel *)resultView{ + if (!_resultView){ + _resultView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundView4") font:kFontRegular(14) textColor:UIColorFromRGB(0x6D6B89)]; + } + return _resultView; +} +-(UIScrollView *)scrollView{ + if (!_scrollView){ + _scrollView = [UIScrollView new]; + + } + return _scrollView; +} +@end + + + + diff --git a/YuMi/Modules/YMMine/View/XPGiftUserDataViewController.h b/YuMi/Modules/YMMine/View/XPGiftUserDataViewController.h new file mode 100644 index 00000000..9c71099e --- /dev/null +++ b/YuMi/Modules/YMMine/View/XPGiftUserDataViewController.h @@ -0,0 +1,21 @@ +// +// XPGiftUserDataViewController.h +// xplan-ios +// +// Created by duoban on 2022/10/11. +// + +#import +#import "MvpViewController.h" +#import +NS_ASSUME_NONNULL_BEGIN +@class UserInfoModel, MineSkillCardListInfoModel, XPMineUserDataViewController; + + +@interface XPGiftUserDataViewController : MvpViewController +@property (nonatomic,copy) NSString *userUid; +///用户信息 +@property (nonatomic,strong) UserInfoModel *userInfo; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/XPGiftUserDataViewController.m b/YuMi/Modules/YMMine/View/XPGiftUserDataViewController.m new file mode 100644 index 00000000..5bc1f1cc --- /dev/null +++ b/YuMi/Modules/YMMine/View/XPGiftUserDataViewController.m @@ -0,0 +1,158 @@ +// +// XPGiftUserDataViewController.m +// xplan-ios +// +// Created by duoban on 2022/10/11. +// + +#import "XPGiftUserDataViewController.h" +///Third +#import +///Tool +#import "AccountInfoStorage.h" + +///View + +#import "XPMineDataGiftTableViewCell.h" +///Model + +#import "UserInfoModel.h" + + + +///View + +#import "XPMineUserInfoGiftWallViewController.h" + +@interface XPGiftUserDataViewController () +///列表 +@property (nonatomic,strong) UITableView *tableView; + + +@property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView); + +@end + +@implementation XPGiftUserDataViewController + +- (BOOL)isHiddenNavBar { + return YES; +} + + + +- (void)viewDidLoad { + [super viewDidLoad]; + [self initHettpRequest]; + [self initSubViews]; + [self initSubViewConstraints]; + +} +#pragma mark - Http +- (void)initHettpRequest { + +} +#pragma mark - Private Method +- (void)initSubViews { + [self.view addSubview:self.tableView]; + +} + +- (void)initSubViewConstraints { + [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self.view); + }]; +} + +#pragma mark - UITableViewDelegate And UITableViewDataSource +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 1; + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + return kGetScaleWidth(385); +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + XPMineDataGiftTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; + if (cell == nil) { + cell = [[XPMineDataGiftTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; + } + + cell.delegate = self; + cell.userGiftWall = self.userInfo.userGiftWall; + cell.userLuckyBagGiftWall = self.userInfo.userLuckyBagGiftWall; + return cell; + +} + + + + + + + +#pragma mark - XPMineDataGiftTableViewCellDelegate +- (void)xPMineDataGiftTableViewCell:(XPMineDataGiftTableViewCell *)view didClickMore:(UIButton *)sender { + XPMineUserInfoGiftWallViewController * giftWallVC = [[XPMineUserInfoGiftWallViewController alloc] init]; + giftWallVC.userUid = self.userUid; + [self.navigationController pushViewController:giftWallVC animated:YES]; +} + + +#pragma mark - JXPagingViewListViewDelegate +- (UIView *)listView { + return self.view; +} + +- (UIScrollView *)listScrollView { + return self.tableView; +} + +- (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { + self.scrollCallback = callback; +} + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + self.scrollCallback(scrollView); +} + + + + + + + +#pragma mark - Getters And Setters +- (void)setUserInfo:(UserInfoModel *)userInfo { + _userInfo = userInfo; + [self.tableView reloadData]; +// [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:2] withRowAnimation:UITableViewRowAnimationNone]; +} + +- (UITableView *)tableView { + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [UIView new]; + _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + _tableView.backgroundColor = [UIColor clearColor]; + if (@available(iOS 11.0, *)) { + _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } + [_tableView registerClass:[XPMineDataGiftTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; + + } + return _tableView; +} + + +@end diff --git a/YuMi/Modules/YMMine/View/XPMineUserInfoRecordedSoundVC.h b/YuMi/Modules/YMMine/View/XPMineUserInfoRecordedSoundVC.h new file mode 100644 index 00000000..50f92d0d --- /dev/null +++ b/YuMi/Modules/YMMine/View/XPMineUserInfoRecordedSoundVC.h @@ -0,0 +1,17 @@ +// +// XPMineUserInfoRecordedSoundVC.h +// xplan-ios +// +// Created by duoban on 2022/12/29. +// + +#import "MvpViewController.h" +#import "XPSoundCardModel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface XPMineUserInfoRecordedSoundVC : MvpViewController +@property (nonatomic,strong) XPSoundCardModel *__nullable soundModel; +@property (nonatomic,copy) NSString* uid; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/XPMineUserInfoRecordedSoundVC.m b/YuMi/Modules/YMMine/View/XPMineUserInfoRecordedSoundVC.m new file mode 100644 index 00000000..c24e1148 --- /dev/null +++ b/YuMi/Modules/YMMine/View/XPMineUserInfoRecordedSoundVC.m @@ -0,0 +1,466 @@ +// +// XPMineUserInfoRecordedSoundVC.m +// xplan-ios +// +// Created by duoban on 2022/12/29. +// + +#import "XPMineUserInfoRecordedSoundVC.h" +#import "XPMineUserInfoRecordedSoundView.h" +#import +#import +#import "XPMineUserInfoPresenter.h" +#import "XPMineUserInfoProtocol.h" +#import +#import "XPSkillCardPlayerManager.h" +#import "CountDownHelper.h" +#import "TTNewAlertView.h" +#import "UploadFile.h" + +UIKIT_EXTERN NSString * kUpdateSoundInfo; + +@interface XPMineUserInfoRecordedSoundVC () +@property (nonatomic,strong) XPMineUserInfoRecordedSoundView *recordSoundView; +///录音文件路径 +@property (nonatomic,copy) NSString *filePath; +///当前录音时间 +@property (nonatomic,assign) NSTimeInterval currentTime; +///总时间 +@property (nonatomic,assign) NSTimeInterval totalTime; +///titleView +@property (nonatomic,strong) UILabel *titleView; +///返回按钮 +@property (nonatomic,strong) UIButton *backBtn; +///是否正在播放录音 +@property (nonatomic,assign) BOOL isPlaying; +///播放录音倒计时 +@property (nonatomic,strong) CountDownHelper *countDownAdmin; +///是否没有保存录音文件 +@property (nonatomic,assign) BOOL isNoSave; + + + +@end + +@implementation XPMineUserInfoRecordedSoundVC + +- (XPMineUserInfoPresenter *)createPresenter { + return [[XPMineUserInfoPresenter alloc] init]; +} +- (void)dealloc { + if([NIMSDK sharedSDK].mediaManager.isRecording){ + [[NIMSDK sharedSDK].mediaManager stopRecord]; + [[XPSkillCardPlayerManager shareInstance]recoverMicroAndVoiceWithBroadcast:NO]; + }else{ + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + if([XPSkillCardPlayerManager shareInstance].isMineInMic==YES && [XPSkillCardPlayerManager shareInstance].isPlay == YES){ + [[XPSkillCardPlayerManager shareInstance]recoverMicroAndVoiceWithBroadcast:YES]; + } + + } + + [self.countDownAdmin stopClockwise]; + [[NIMSDK sharedSDK].mediaManager removeDelegate:self]; +} +- (BOOL)isHiddenNavBar{ + return YES; +} +-(void)backAction{ + + TTNewAlertView *alertView = [[TTNewAlertView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + @kWeakify(self) + alertView.confirmHandle = ^(){ + @kStrongify(self) + [self.navigationController popViewControllerAnimated:YES]; + }; + BOOL isBack = NO; + NSString *message = @""; + if([NIMSDK sharedSDK].mediaManager.isRecording){ + [self.recordSoundView recordAction]; + return; + } + if(self.isNoSave == YES){ + message = YMLocalizedString(@"XPMineUserInfoRecordedSoundVC8"); + isBack = YES; + } + if(isBack == YES){ + alertView.message = message; + [TTPopup popupView:alertView style:TTPopupStyleAlert]; + return; + } + [self.navigationController popViewControllerAnimated:YES]; +} +-(void)viewDidDisappear:(BOOL)animated{ + [super viewDidDisappear:animated]; + self.navigationController.interactivePopGestureRecognizer.enabled = YES; +} +- (void)viewDidLoad { + [super viewDidLoad]; + [self initSubViews]; + [self initSubViewConstraints]; + [self setUI]; + + + +} +#pragma mark - Private Method +- (void)initSubViews { + self.view.backgroundColor = [UIColor whiteColor]; + [self.view addSubview:self.recordSoundView]; + [self.view addSubview:self.titleView]; + [self.view addSubview:self.backBtn]; + [[NIMSDK sharedSDK].mediaManager addDelegate:self]; + [NIMSDK sharedSDK].mediaManager.recordProgressUpdateTimeInterval = 0.01; + self.countDownAdmin.delegate = self; + self.countDownAdmin.seconds = 0.01; + self.isNoSave = NO; + self.totalTime = 60.0; + +} +- (void)initSubViewConstraints { + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_equalTo(kGetScaleWidth(54)); + make.centerX.equalTo(self.view); + }]; + [self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(kGetScaleWidth(28)); + make.centerY.equalTo(self.titleView); + make.left.mas_equalTo(kGetScaleWidth(20)); + }]; +} +#pragma mark -XPMineUserInfoProtocol +- (void)uploadVoiceFileToThirdSuccess:(NSString *)fileUrl{ + NSInteger getCurrentTime = ceil(self.totalTime); + [self.presenter saveSoundWithUrl:fileUrl second:[NSString stringWithFormat:@"%ld",getCurrentTime]]; +} + +- (void)uploadVoiceFileFail:(NSString *)message{ + [XNDJTDDLoadingTool hideOnlyView:self.view]; + [self showErrorToast:message]; +} + +///保存声音成功 +-(void)saveSoundSuccess:(NSString *)fileUrl{ + [XNDJTDDLoadingTool hideOnlyView:self.view]; + [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoRecordedSoundVC4")]; + [self.recordSoundView uploadRecordSuccess:NO]; + self.soundModel = [XPSoundCardModel new]; + self.soundModel.uid = self.uid; + self.soundModel.audioUrl = fileUrl; + NSInteger getCurrentTime = ceil(self.totalTime); + self.soundModel.second = getCurrentTime ?: 0; + self.soundModel.status = 1; + self.isNoSave = NO; + self.navigationController.interactivePopGestureRecognizer.enabled = YES; + [[NSNotificationCenter defaultCenter]postNotificationName:kUpdateSoundInfo object:self.soundModel]; +} +///保存声音失败 +-(void)saveSoundFailWithMsg:(NSString *)msg{ + [XNDJTDDLoadingTool hideOnlyView:self.view]; + [self showErrorToast:msg]; +} +-(void)deleteSoundSuccess{ + [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoRecordedSoundVC5")]; + [self resetRecordAudio]; + self.soundModel = nil; + [[NSNotificationCenter defaultCenter]postNotificationName:kUpdateSoundInfo object:nil]; +} +-(void)setUI{ + if(self.soundModel.status == 1 || self.soundModel.status == 2){ + [self.recordSoundView uploadRecordSuccess:self.soundModel.status == 2]; + self.filePath = self.soundModel.audioUrl; + self.totalTime = self.soundModel.second; + self.currentTime = 0; + NSInteger getCurrentTime = ceil(self.totalTime); + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"0s/%lds",getCurrentTime] progress:0 animated:NO]; + } +} +#pragma mark -CountDownHelperDelegate +///顺计时结束 +- (void)onClockwiseFinish{ + [self stopPlayAudioCompleted]; +} +///顺计时进行 +- (void)onClockwiseOpen:(CGFloat)time{ + NSInteger getValue = floor(time); + NSInteger getCurrentTime = ceil(self.totalTime); + if(getValue > getCurrentTime){ + getValue = getCurrentTime; + } + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"%lds/%lds",getValue,getCurrentTime] progress:time / getCurrentTime animated:NO]; +} + + + +#pragma mark - XPMineUserInfoRecordedSoundViewDelegate +-(void)startRecordAudio{ + AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio]; + if(authStatus != AVAuthorizationStatusAuthorized){ + [self.recordSoundView stopRecord]; + [AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted){ + if(!granted){ + dispatch_async(dispatch_get_main_queue(), ^{ + TTAlertConfig *config = [[TTAlertConfig alloc]init]; + config.message = YMLocalizedString(@"XPMineUserInfoRecordedSoundVC0"); + [TTPopup alertWithConfig:config showBorder:NO confirmHandler:^{ + NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + if( [[UIApplication sharedApplication]canOpenURL:url] ) { + [[UIApplication sharedApplication]openURL:url options:@{}completionHandler:^(BOOL success) { + }]; + } + + } cancelHandler:^{ + + }]; + }); + + }else{ + dispatch_async(dispatch_get_main_queue(), ^{ + [self startRecordAction]; + }); + + } + }]; + return; + } + [self startRecordAction]; +} +-(void)startRecordAction{ + if([XPSkillCardPlayerManager shareInstance].isMineInMic == YES){ + [[XPSkillCardPlayerManager shareInstance]closeMicroAndVoiceWithBroadcast:NO]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + [[NIMSDK sharedSDK].mediaManager recordForDuration:self.totalTime]; + [self.recordSoundView startRecord]; + }); + return; + } + [[NIMSDK sharedSDK].mediaManager recordForDuration:self.totalTime]; + [self.recordSoundView startRecord]; +} +-(void)stopRecordAudio{ + [[NIMSDK sharedSDK].mediaManager stopRecord]; +} +-(void)resetRecordAudio{ + self.isNoSave = NO; + self.navigationController.interactivePopGestureRecognizer.enabled = YES; + [self.countDownAdmin stopClockwise]; + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + self.filePath = nil; + self.currentTime = 0; + self.totalTime = 60.0; + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"%.0fs/%.0fs",0.0,self.totalTime] progress:0 animated:NO]; + [self.recordSoundView resetRecord]; + }); + + +} +-(void)playRecordAudio{ + if(self.filePath.length==0)return; + [self.recordSoundView playRecord]; + NSInteger getCurrentTime = ceil(self.totalTime); + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"0s/%lds",getCurrentTime] progress:0 animated:NO]; + if (!self.isPlaying) { + if(![self.filePath containsString:@"http"]){ + [self playAudioWithUrl:self.filePath time:(int)getCurrentTime isDelay:[XPSkillCardPlayerManager shareInstance].isMineInMic]; + return; + } + + NSString *fileName = [[self.filePath componentsSeparatedByString:@"/"] lastObject]; + NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) safeObjectAtIndex1:0] stringByAppendingPathComponent:@"kMineSoundCard"]; + NSString *fullPath = [filePath stringByAppendingPathComponent:fileName]; + if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath]) { + [self playAudioWithUrl:fullPath time:(int)getCurrentTime isDelay:[XPSkillCardPlayerManager shareInstance].isMineInMic]; + + } else { + if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { + NSFileManager *fileMgr = [[NSFileManager alloc] init]; + [fileMgr createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil]; + } + [UploadFile downloadAudioWithFileName:fileName musicUrl:self.filePath mainFileName:@"kMineSoundCard" completion:^(BOOL isSuccess, NSString *editAudioPath) { + if(isSuccess){ + [self playAudioWithUrl:editAudioPath time:(int)getCurrentTime isDelay:[XPSkillCardPlayerManager shareInstance].isMineInMic]; + + }else{ + [self stopPlayAudioCompleted]; + } + + + }]; + } + + } else { + [self stopPlayAudioCompleted]; + + } + + + + +} +/// 播放录音 +/// - Parameters: +/// - url: 录音链接 +/// - time: 录音时间 +/// - isDelay: 是否延时0.5秒播放录音,因为如果在麦上的话,需要先关麦再播放,所以要延时0.5秒来关麦后再播放,不然会没声音 +-(void)playAudioWithUrl:(NSString*)url time:(int)time isDelay:(BOOL)isDelay{ + if(isDelay == YES){ + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + self.isPlaying = YES; + [self.countDownAdmin openClockwiseWithTime:time]; + }); + [[XPSkillCardPlayerManager shareInstance] playerNewVoiceWithPath:url completionBlock:^{ + + }]; + return; + } + self.isPlaying = YES; + [self.countDownAdmin openClockwiseWithTime:time]; + [[XPSkillCardPlayerManager shareInstance] playerVoiceWithPath:url completionBlock:^{ + + }]; +} +-(void)stopPlayRecordAudio{ + + [[XPSkillCardPlayerManager shareInstance]recoverMicroAndVoiceWithBroadcast:[XPSkillCardPlayerManager shareInstance].isMineInMic]; + [self stopPlayAudioCompleted]; + +} +- (void)deleteRecordingAudio{ + + TTNewAlertView *alertView = [[TTNewAlertView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + @kWeakify(self) + alertView.confirmHandle = ^(){ + @kStrongify(self) + [self.presenter deleteSound]; + }; + alertView.message = YMLocalizedString(@"XPMineUserInfoRecordedSoundVC6"); + + [TTPopup popupView:alertView style:TTPopupStyleAlert]; +} +-(void)saveRecordAudio{ + + if(self.filePath.length > 0){ + [XNDJTDDLoadingTool showOnlyView:self.view]; + [self.presenter uploadVoice:self.filePath]; + }else{ + [self showErrorToast:YMLocalizedString(@"XPMineUserInfoRecordedSoundVC3")]; + } + +} +///播放录音完成 +-(void)stopPlayAudioCompleted{ + [self.countDownAdmin stopClockwise]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + [self.recordSoundView stopPlayRecord]; + self.isPlaying = NO; + self.currentTime = 0; + NSInteger getCurrentTime = ceil(self.totalTime); + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"0s/%lds",getCurrentTime] progress:0 animated:NO]; + [[XPSkillCardPlayerManager shareInstance] stopMusic]; + }); + +} +#pragma mark - NIMMediaManagerDelegate +/** + * 开始录制音频的回调 + * + * @param filePath 录制的音频的文件路径 + * @param error 错误信息 + * @discussion 如果录音失败,filePath 有可能为 nil + */ +- (void)recordAudio:(nullable NSString *)filePath didBeganWithError:(nullable NSError *)error{ + +} +/** + * 录制音频完成后的回调 + * + * @param filePath 录制完成的音频文件路径 + * @param error 错误信息 + */ +- (void)recordAudio:(nullable NSString *)filePath didCompletedWithError:(nullable NSError *)error{ + if([XPSkillCardPlayerManager shareInstance].isMineInMic == YES){ + [[XPSkillCardPlayerManager shareInstance]recoverMicroAndVoiceWithBroadcast:NO]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + [self recordAudioCompletedActionWiftFilePath:filePath]; + }); + return; + } + [self recordAudioCompletedActionWiftFilePath:filePath]; +} + +-(void)recordAudioCompletedActionWiftFilePath:(nullable NSString *)filePath{ + if(self.currentTime < 1){ + self.filePath = nil; + self.currentTime = 0; + [self showErrorToast:YMLocalizedString(@"XPMineUserInfoRecordedSoundVC1")]; + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"%.0fs/%.0fs",0.0,self.totalTime] progress:0 animated:NO]; + [self.recordSoundView stopRecord]; + + return; + } + self.isNoSave = YES; + if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { + self.navigationController.interactivePopGestureRecognizer.enabled = NO; + } + self.filePath = filePath; + self.totalTime = self.currentTime; + self.currentTime = 0; + NSInteger getCurrentTime = ceil(self.totalTime); + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"0s/%lds",getCurrentTime] progress:0 animated:NO]; + [self.recordSoundView recordCompleted]; + +} + + +/** + * 音频录制进度更新回调 + * + * @param currentTime 当前录制的时间 + */ +- (void)recordAudioProgress:(NSTimeInterval)currentTime{ + self.currentTime = currentTime; + if(self.currentTime > 60){ + self.currentTime = 60; + } + NSInteger getCurrentTime = ceil(self.currentTime); + [self.recordSoundView recordingWithTime:[NSString stringWithFormat:@"%lds/%.0fs",getCurrentTime,self.totalTime] progress:currentTime / self.totalTime animated:NO]; +} + + +#pragma mark -懒加载 +- (XPMineUserInfoRecordedSoundView *)recordSoundView{ + if (!_recordSoundView){ + _recordSoundView = [[XPMineUserInfoRecordedSoundView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; + _recordSoundView.delegate = self; + } + return _recordSoundView; +} +-(UILabel *)titleView{ + if (!_titleView){ + _titleView = [UILabel labelInitWithText:YMLocalizedString(@"XPMineUserInfoRecordedSoundVC2") font:kFontSemibold(17) textColor:[DJDKMIMOMColor inputTextColor]]; + + } + return _titleView; +} +-(UIButton *)backBtn{ + if (!_backBtn){ + _backBtn = [UIButton new]; + [_backBtn setImage:kImage(@"common_nav_back") forState:UIControlStateNormal]; + [_backBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; + [_backBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _backBtn; +} +-(CountDownHelper *)countDownAdmin{ + if (!_countDownAdmin){ + _countDownAdmin = [CountDownHelper new]; + } + return _countDownAdmin; +} +@end diff --git a/YuMi/Modules/YMMine/View/XPMineUserInfoTagVC.h b/YuMi/Modules/YMMine/View/XPMineUserInfoTagVC.h new file mode 100644 index 00000000..5b2efa21 --- /dev/null +++ b/YuMi/Modules/YMMine/View/XPMineUserInfoTagVC.h @@ -0,0 +1,25 @@ +// +// XPMineUserInfoTagVC.h +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import "MvpViewController.h" +#import "XPMineUserInfoTagModel.h" +NS_ASSUME_NONNULL_BEGIN +@class XPMineUserInfoTagVC; +@protocol XPMineUserInfoTagVCDelegate + +- (void)xPMineUserInfoTagVC:(XPMineUserInfoTagVC *)vc didClickComplete:(NSArray *)meLabels; + +@end + + +@interface XPMineUserInfoTagVC : MvpViewController +@property (nonatomic,strong) XPMineUserInfoTagModel *tagModel; +/// +@property (nonatomic,weak) id delegate; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMine/View/XPMineUserInfoTagVC.m b/YuMi/Modules/YMMine/View/XPMineUserInfoTagVC.m new file mode 100644 index 00000000..6775ca4f --- /dev/null +++ b/YuMi/Modules/YMMine/View/XPMineUserInfoTagVC.m @@ -0,0 +1,140 @@ +// +// XPMineUserInfoTagVC.m +// xplan-ios +// +// Created by duoban on 2023/2/15. +// + +#import "XPMineUserInfoTagVC.h" +///view +#import "XPMineUserInfoTagHeadView.h" +#import "XPMineUserInfoNavView.h" +#import "XPMineUserInfoTagView.h" +#import "XPMineUserInfoPresenter.h" +#import "XPMineUserInfoProtocol.h" +@interface XPMineUserInfoTagVC () +///头部 +@property (nonatomic,strong) XPMineUserInfoTagHeadView *headView; +///导航栏 +@property (nonatomic,strong) XPMineUserInfoNavView *navView; +/// +@property (nonatomic,strong) XPMineUserInfoTagView *tagVeiw; +/// +@property (nonatomic,copy) NSArray *meLabels; +@end + +@implementation XPMineUserInfoTagVC +- (BOOL)isHiddenNavBar { + return YES; +} +- (XPMineUserInfoPresenter *)createPresenter { + return [[XPMineUserInfoPresenter alloc] init]; +} +-(void)viewWillDisappear:(BOOL)animated{ + [super viewWillAppear:animated]; + self.tagModel.meLabels = self.meLabels; +} +- (void)viewDidLoad { + [super viewDidLoad]; + [self initSubViews]; + [self initSubViewConstraints]; + [self requestData]; + + + +} +-(void)requestData{ + + + [self.presenter getTagList]; +} +#pragma mark - XPMineUserInfoTagView +-(void)didingSelectTag{ + self.headView.tagModel = self.self.tagVeiw.tagModel; +} +-(void)setTagModel:(XPMineUserInfoTagModel *)tagModel{ + _tagModel = tagModel; + self.meLabels = self.tagModel.meLabels; + self.headView.tagModel = _tagModel; + self.tagVeiw.tagModel = _tagModel; +} +#pragma mark - XPMineUserInfoEditProtocol +-(void)saveTagListSuccess{ + self.meLabels = self.tagModel.meLabels; + [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoTagVC2")]; + + if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoTagVC:didClickComplete:)]){ + [self.delegate xPMineUserInfoTagVC:self didClickComplete:self.meLabels]; + } + [self.navigationController popViewControllerAnimated:YES]; +} +-(void)getTagListSuccess:(XPMineUserInfoTagModel *)model{ + + self.tagModel = model; + + +} +#pragma mark - XPMineUserInfoNavViewDelegate +- (void)xPMineUserInfoNavView:(XPMineUserInfoNavView *)view didClickBack:(UIButton *)sender{ + [self.navigationController popViewControllerAnimated:YES]; +} +- (void)xPMineUserInfoNavView:(XPMineUserInfoNavView *)view didClickComplete:(UIButton *)sender{ + NSArray *meLabels = self.tagVeiw.tagModel.meLabels; + NSString *tagStr = @""; + for (int i = 0; i < meLabels.count; i++) { + NSString *text = meLabels[i]; + if(text.length > 0){ + if(i == 0){ + tagStr = meLabels[i]; + }else{ + tagStr = [NSString stringWithFormat:@"%@,%@",tagStr,meLabels[i]]; + } + } + + } + [self.presenter saveTagListWithLabels:tagStr]; +} +#pragma mark - Private Method +- (void)initSubViews { + [self.view addSubview:self.headView]; + [self.view addSubview:self.navView]; + [self.view addSubview:self.tagVeiw]; +} +- (void)initSubViewConstraints { + [self.headView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.equalTo(self.view); + make.height.mas_equalTo(kGetScaleWidth(304)); + }]; + [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.top.equalTo(self.view); + make.height.mas_equalTo(kNavigationHeight); + }]; + [self.tagVeiw mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.bottom.right.equalTo(self.view); + make.top.equalTo(self.headView.mas_bottom); + + }]; +} +#pragma mark -懒加载 +- (XPMineUserInfoNavView *)navView{ + if (!_navView){ + _navView = [[XPMineUserInfoNavView alloc]initWithFrame:CGRectZero]; + _navView.delegate = self; + } + return _navView; +} +- (XPMineUserInfoTagHeadView *)headView{ + if (!_headView){ + _headView = [[XPMineUserInfoTagHeadView alloc]initWithFrame:CGRectZero]; + + } + return _headView; +} +- (XPMineUserInfoTagView *)tagVeiw{ + if (!_tagVeiw){ + _tagVeiw = [[XPMineUserInfoTagView alloc]initWithFrame:CGRectZero]; + _tagVeiw.delegate = self; + } + return _tagVeiw; +} +@end diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.h b/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.h index d5f3bfc6..46e3e471 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.h +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.h @@ -1,23 +1,24 @@ // -// YMMonentsLayoutConfig.h -// YUMI +// XPMonentsLayoutConfig.h +// xplan-ios // -// Created by YUMI on 2022/5/12. +// Created by 冯硕 on 2022/5/12. // #import -#import "YUMIMacroUitls.h" NS_ASSUME_NONNULL_BEGIN -#define kMONENTS_CONTENT_LEFT_PADDING 67 -#define kMONENTS_CONTENT_RIGHT_PADDING 36 +#define kMONENTS_CONTENT_LEFT_PADDING 18 +#define kMONENTS_CONTENT_RIGHT_PADDING 18 #define kMONENTS_CONTENT_MAX_WIDTH (KScreenWidth - kMONENTS_CONTENT_LEFT_PADDING - kMONENTS_CONTENT_RIGHT_PADDING) -#define kMONENTS_PIC_ONE_WIDTH 200 ///只有一个动态图片的高度 +#define kMONENTS_PIC_ONE_WIDTH 109 ///只有一个动态图片的高度 #define kMONENTS_PIC_SPACE 4 ///图片之间的间隙的宽度或者高度 -#define kMONENTS_USER_INFO_HEIGHT 60 ///用户信息的高度 +#define kMONENTS_USER_INFO_HEIGHT 50 ///用户信息的高度 #define kMONENTS_TOOL_BAR_HEIGHT 58 ///底部操作栏的高度 #define kMONENTS_CONTENT_SPACAE_HEIGHT 12 /// 每个内容之间下面的间隙的高度 -#define kMONENTS_TEXT_TOPIC_HEIGHT 20 /// 话题的高度 +#define kMONENTS_TEXT_TOPIC_HEIGHT 15 /// 话题的高度 #define kMONENTS_FOLD_HEIGHT 20 /// 展开 关闭的高度 +#define kMONENTS_Time_HEIGHT 14 /// 时间 +#define kMONENTS_Content_Text_Space 5 /// 内容 展开按钮 时间的间隙 #pragma mark - 评论的配置 #define kMONENTS_COMMENT_LEFT_PADDING 15 ///评论左的间隙 #define kMONENTS_COMMENT_RIGHT_PADDING 25 ///评论右的间隙 @@ -29,21 +30,15 @@ NS_ASSUME_NONNULL_BEGIN #define kMONENTS_COMMENT_REPLY_LEFT_PADDING (kMONENTS_COMMENT_LEFT_PADDING + kMONENTS_COMMENT_RIGHT_PADDING + kMONENTS_COMMENT_AVATAR_NICK_PADDING) ///回复这左边的间隙 #define KMONENTS_COMMENT_REPLY_MAX_WIDTH (KMONENTS_COMMENT_MAX_WIDTH - KMONENTS_COMMENT_REPLY_AVATAR_WIDTH - kMONENTS_COMMENT_AVATAR_NICK_PADDING) ///评论回复内容的最大宽度 -#pragma mark - 审核UI配置 -#define kSIMPLE_MONENTS_CONTENT_LEFT_PADDING 16 ///动态内容左边间距 -#define kSIMPLE_MONENTS_CONTENT_RIGHT_PADDING 16 ///动态内容右边间距 -#define kSIMPLE_MONENTS_CONTENT_MAX_WIDTH (KScreenWidth - kSIMPLE_MONENTS_CONTENT_LEFT_PADDING - kSIMPLE_MONENTS_CONTENT_RIGHT_PADDING) ///动态内容最大宽度 - -#define KSIMPLE_MONENTS_COMMENT_AVATAR_WIDTH 40 ///评论的头像大小 - @class MonentsInfoModel, MonentsCommentModel; @interface XPMonentsLayoutConfig : NSObject -+ (void)layoutSimpleMonentsModel:(MonentsInfoModel *)monents; + (void)layoutMonentsModel:(MonentsInfoModel *)monents; + (CGFloat)monentsPicHeight:(MonentsInfoModel *)monents; + (CGFloat)monentsContentHeight:(MonentsInfoModel *)monents; ///计算评论的高度 + (CGFloat)commentCommentRowHeight:(MonentsCommentModel * )comment; ++ (void)layoutMonentsModelWithDynamic:(MonentsInfoModel *)monents; ++ (void)getNewlayoutMonentsModelWithDynamic:(MonentsInfoModel *)monents; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.m b/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.m index ee3d1cc3..b68838b6 100644 --- a/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.m +++ b/YuMi/Modules/YMMonents/Presenter/XPMonentsLayoutConfig.m @@ -1,78 +1,113 @@ // -// YMMonentsLayoutConfig.m -// YUMI +// XPMonentsLayoutConfig.m +// xplan-ios // -// Created by YUMI on 2022/5/12. +// Created by 冯硕 on 2022/5/12. // #import "XPMonentsLayoutConfig.h" #import -#import "DJDKMIMOMColor.h" + ///Model #import "MonentsInfoModel.h" #import "MonentsCommentModel.h" #import "QEmotionHelper.h" @implementation XPMonentsLayoutConfig - -#pragma mark - 审核的布局 - -+ (void)layoutSimpleMonentsModel:(MonentsInfoModel *)monents { - CGFloat rowHeight = kMONENTS_CONTENT_SPACAE_HEIGHT; ++ (void)getNewlayoutMonentsModelWithDynamic:(MonentsInfoModel *)monents { + CGFloat rowHeight = 10; + ///用户信息和文字之间的间隙 + rowHeight += kMONENTS_CONTENT_SPACAE_HEIGHT; ///文字内容的高度 - rowHeight += [self simpleMonentsContentHeight:monents]; + rowHeight += [self monentsContentHeight:monents]; + ///图片的高度 + rowHeight += [self getNewMonentsPicHeight:monents]; + ///如果没有图片的话 间隙就只有一个 + if (monents.type == MonentsContentType_Picture && monents.content.length > 0) { + rowHeight += (kMONENTS_CONTENT_SPACAE_HEIGHT); + } + ///话题的高度 + if (monents.worldId > 0) { + rowHeight += kMONENTS_TEXT_TOPIC_HEIGHT; + } + ///底部操作栏的高度 + rowHeight += kMONENTS_TOOL_BAR_HEIGHT; + monents.rowHeight = rowHeight; +} ++ (void)layoutMonentsModelWithDynamic:(MonentsInfoModel *)monents { + CGFloat rowHeight = 10; + ///用户信息和文字之间的间隙 + rowHeight += kMONENTS_CONTENT_SPACAE_HEIGHT; + ///文字内容的高度 + rowHeight += [self monentsContentHeight:monents]; ///图片的高度 rowHeight += [self monentsPicHeight:monents]; ///如果没有图片的话 间隙就只有一个 if (monents.type == MonentsContentType_Picture && monents.content.length > 0) { - rowHeight += (kMONENTS_CONTENT_SPACAE_HEIGHT * 2); - }else { - rowHeight += kMONENTS_CONTENT_SPACAE_HEIGHT; + rowHeight += (kMONENTS_CONTENT_SPACAE_HEIGHT); } ///话题的高度 - rowHeight += kMONENTS_TEXT_TOPIC_HEIGHT; + if (monents.worldId > 0) { + rowHeight += kMONENTS_TEXT_TOPIC_HEIGHT; + } + ///底部操作栏的高度 + rowHeight += kMONENTS_TOOL_BAR_HEIGHT; monents.rowHeight = rowHeight; } -+ (CGFloat)simpleMonentsContentHeight:(MonentsInfoModel *)monents { - if (monents.content.length <= 0) { - monents.contentHeight = 0; - return 0; ++ (void)layoutMonentsModel:(MonentsInfoModel *)monents { + CGFloat rowHeight = kMONENTS_USER_INFO_HEIGHT; + ///用户信息和文字之间的间隙 + rowHeight += kMONENTS_CONTENT_SPACAE_HEIGHT; + ///文字内容的高度 + rowHeight += [self monentsContentHeight:monents]; + ///图片的高度 + rowHeight += [self monentsPicHeight:monents]; + ///如果没有图片的话 间隙就只有一个 + if (monents.type == MonentsContentType_Picture) { + rowHeight += 8; //stackView设置的space=8 } - ///计算文本的高度 - if (!monents.contentAttribute) { - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; - if (monents.squareTop ) {//动态/广场 - NSTextAttachment * attachment = [[NSTextAttachment alloc] init]; - attachment.bounds = CGRectMake(0, 0, 25 * 1.3 ,10 * 1.3); - attachment.image = [UIImage imageNamed:@"monents_info_top"]; - NSAttributedString * starAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)attachment]; - [attributedString insertAttributedString:starAttribute atIndex:0]; - } - [attributedString appendAttributedString:[self creatStrAttrByStr:monents.content attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}]]; - attributedString.yy_lineSpacing = 5; - attributedString.yy_lineBreakMode = NSLineBreakByWordWrapping; - monents.contentAttribute = attributedString; + ///话题的高度 + if (monents.worldId > 0) { + rowHeight += kMONENTS_TEXT_TOPIC_HEIGHT; + rowHeight += (kMONENTS_CONTENT_SPACAE_HEIGHT); } + ///底部操作栏的高度 + rowHeight += kMONENTS_TOOL_BAR_HEIGHT; - YYTextContainer *container = [YYTextContainer new]; - container.size = CGSizeMake(kSIMPLE_MONENTS_CONTENT_MAX_WIDTH, CGFLOAT_MAX); - container.maximumNumberOfRows = 0; - YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:monents.contentAttribute]; - monents.numberOfText = layout.rowCount; - CGFloat foldHeight = 0; - if (layout.rowCount > 6) { - foldHeight = kMONENTS_FOLD_HEIGHT; - NSInteger numberOfLines = monents.isFold ? 6 : 0; - container.maximumNumberOfRows = numberOfLines; - } - YYTextLayout *realLayout = [YYTextLayout layoutWithContainer:container text:monents.contentAttribute]; - CGFloat contentHeight = realLayout.textBoundingSize.height; - monents.contentHeight =contentHeight; - return contentHeight + foldHeight; + ///时间高度,cell在约束文本内容的stackView时,直接加了24,这里统一 + rowHeight += 24; + + monents.rowHeight = rowHeight; } - -+ (CGFloat)simpleMonentsPicHeight:(MonentsInfoModel *)monents { ++ (CGFloat)getNewMonentsPicHeight:(MonentsInfoModel *)monents { + ///计算图片的高度 + NSInteger picCount = monents.dynamicResList.count; + CGFloat picHeight = 0; + CGFloat width = KScreenWidth-27*2; + if (picCount == 0) { + picHeight = 0; + } else if(picCount == 1) { + picHeight = width; + } else if(picCount == 2) { + picHeight = (width - kMONENTS_PIC_SPACE) / 2; + } else { + if (picCount > 9) { + picCount = 9; + } + CGFloat itemWidth = (width - kMONENTS_PIC_SPACE * 2) / 3; + NSInteger page = picCount % 3; + NSInteger line = picCount / 3; + if (page == 0) { + picHeight = itemWidth * line + (line -1)* kMONENTS_PIC_SPACE; + } else { + picHeight = itemWidth * (line +1) + line * kMONENTS_PIC_SPACE; + } + } + monents.picHeight = picHeight; + return picHeight; +} ++ (CGFloat)monentsPicHeight:(MonentsInfoModel *)monents { ///计算图片的高度 NSInteger picCount = monents.dynamicResList.count; CGFloat picHeight = 0; @@ -81,12 +116,12 @@ } else if(picCount == 1) { picHeight = kMONENTS_PIC_ONE_WIDTH; } else if(picCount == 2) { - picHeight = (kSIMPLE_MONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE) / 2; + picHeight = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE) / 2; } else { if (picCount > 9) { picCount = 9; } - CGFloat itemWidth = (kSIMPLE_MONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE * 2) / 3; + CGFloat itemWidth = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE * 2) / 3; NSInteger page = picCount % 3; NSInteger line = picCount / 3; if (page == 0) { @@ -99,153 +134,105 @@ return picHeight; } -#pragma mark - 正常的布局 - -+ (void)layoutMonentsModel:(MonentsInfoModel *)monents { - CGFloat rowHeight = kMONENTS_USER_INFO_HEIGHT; - ///用户信息和文字之间的间隙 - rowHeight += kMONENTS_CONTENT_SPACAE_HEIGHT; - ///文字内容的高度 - rowHeight += [self monentsContentHeight:monents]; - ///图片的高度 - rowHeight += [self monentsPicHeight:monents]; - ///如果没有图片的话 间隙就只有一个 - if (monents.type == MonentsContentType_Picture && monents.content.length > 0) { - rowHeight += (kMONENTS_CONTENT_SPACAE_HEIGHT * 2); - }else { - rowHeight += kMONENTS_CONTENT_SPACAE_HEIGHT; - } - ///话题的高度 - rowHeight += kMONENTS_TEXT_TOPIC_HEIGHT; - ///底部操作栏的高度 - rowHeight += kMONENTS_TOOL_BAR_HEIGHT; - monents.rowHeight = rowHeight; -} - -+ (CGFloat)monentsPicHeight:(MonentsInfoModel *)monents { - ///计算图片的高度 - NSInteger picCount = monents.dynamicResList.count; - CGFloat picHeight = 0; - if (picCount == 0) { - picHeight = 0; - } else if(picCount == 1) { - picHeight = kMONENTS_PIC_ONE_WIDTH; - } else if(picCount == 2) { - picHeight = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE) / 2; - } else { - if (picCount > 9) { - picCount = 9; - } - CGFloat itemWidth = (kMONENTS_CONTENT_MAX_WIDTH - kMONENTS_PIC_SPACE * 2) / 3; - NSInteger page = picCount % 3; - NSInteger line = picCount / 3; - if (page == 0) { - picHeight = itemWidth * line + (line -1)* kMONENTS_PIC_SPACE; - } else { - picHeight = itemWidth * (line +1) + line * kMONENTS_PIC_SPACE; - } - } - monents.picHeight = picHeight; - return picHeight; -} - + (CGFloat)monentsContentHeight:(MonentsInfoModel *)monents { - if (monents.content.length <= 0) { - monents.contentHeight = 0; - return 0; - } - ///计算文本的高度 - if (!monents.contentAttribute) { - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; - if (monents.squareTop ) {//动态/广场 - NSTextAttachment * attachment = [[NSTextAttachment alloc] init]; - attachment.bounds = CGRectMake(0, 0, 25 * 1.3 ,10 * 1.3); - attachment.image = [UIImage imageNamed:@"monents_info_top"]; - NSAttributedString * starAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)attachment]; - [attributedString insertAttributedString:starAttribute atIndex:0]; - } - [attributedString appendAttributedString:[self creatStrAttrByStr:monents.content attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}]]; - attributedString.yy_lineSpacing = 5; - attributedString.yy_lineBreakMode = NSLineBreakByWordWrapping; - monents.contentAttribute = attributedString; - } - - YYTextContainer *container = [YYTextContainer new]; - container.size = CGSizeMake(kMONENTS_CONTENT_MAX_WIDTH, CGFLOAT_MAX); - container.maximumNumberOfRows = 0; - YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:monents.contentAttribute]; - monents.numberOfText = layout.rowCount; - CGFloat foldHeight = 0; - if (layout.rowCount > 6) { - foldHeight = kMONENTS_FOLD_HEIGHT; - NSInteger numberOfLines = monents.isFold ? 6 : 0; - container.maximumNumberOfRows = numberOfLines; - } - YYTextLayout *realLayout = [YYTextLayout layoutWithContainer:container text:monents.contentAttribute]; - CGFloat contentHeight = realLayout.textBoundingSize.height; - monents.contentHeight =contentHeight; - return contentHeight + foldHeight; + if (monents.content.length <= 0) { + monents.contentHeight = 0; + return 0; + } + ///计算文本的高度 + if (!monents.contentAttribute) { + NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; + if (monents.squareTop ) {//动态/广场 + NSTextAttachment * attachment = [[NSTextAttachment alloc] init]; + attachment.bounds = CGRectMake(0, 0, 10, 12); + attachment.image = [UIImage imageNamed:@"monents_info_top"]; + NSAttributedString * starAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)attachment]; + [attributedString insertAttributedString:starAttribute atIndex:0]; + //将图片插入到合适的位置 + [attributedString appendAttributedString:[self creatStrAttrByStr:YMLocalizedString(@"XPMonentsLayoutConfig0") attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15], NSForegroundColorAttributeName: UIColorFromRGB(0xE84C46)}]]; + } + [attributedString appendAttributedString:[self creatStrAttrByStr:monents.content attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}]]; + attributedString.yy_lineSpacing = 5; + attributedString.yy_lineBreakMode = NSLineBreakByWordWrapping; + monents.contentAttribute = attributedString; + } + + YYTextContainer *container = [YYTextContainer new]; + container.size = CGSizeMake(kMONENTS_CONTENT_MAX_WIDTH, CGFLOAT_MAX); + container.maximumNumberOfRows = 0; + YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:monents.contentAttribute]; + monents.numberOfText = layout.rowCount; + CGFloat foldHeight = 0; + if (layout.rowCount > 6) { + foldHeight = kMONENTS_FOLD_HEIGHT + kMONENTS_Content_Text_Space; + NSInteger numberOfLines = monents.isFold ? 6 : 0; + container.maximumNumberOfRows = numberOfLines; + } + YYTextLayout *realLayout = [YYTextLayout layoutWithContainer:container text:monents.contentAttribute]; + CGFloat contentHeight = realLayout.textBoundingSize.height ; + monents.contentHeight = contentHeight + kMONENTS_Time_HEIGHT + kMONENTS_Content_Text_Space; + return contentHeight + foldHeight; } + (NSMutableAttributedString *)creatStrAttrByStr:(NSString *)str attributed:(NSDictionary *)attribute{ - if (str.length == 0 || !str) { - str = @" "; - } - NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str attributes:attribute]; - return attr; + if (str.length == 0 || !str) { + str = @" "; + } + NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str attributes:attribute]; + return attr; } ///计算评论的高度 + (CGFloat)commentCommentRowHeight:(MonentsCommentModel * )comment { - if (comment.commentRowHeight > 0 && !comment.isReloadHeight) { - return comment.commentRowHeight; - } - __block CGFloat rowHeight = 0; - CGFloat commentTopHeight = 10 + 15 + 10;///10顶部的间隙 15 昵称的高度 - ///内容 - QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper]; - NSMutableAttributedString * attribute = [faceManager attributedStringByText:comment.content font:[UIFont systemFontOfSize:15]]; - YYTextContainer *container = [YYTextContainer new]; - container.size = CGSizeMake(KMONENTS_COMMENT_REPLY_MAX_WIDTH, CGFLOAT_MAX); - container.maximumNumberOfRows = 0; - YYTextLayout *realLayout = [YYTextLayout layoutWithContainer:container text:attribute]; - CGFloat commentHeight = realLayout.textBoundingSize.height; - commentHeight = MAX(commentHeight, 15); - rowHeight += commentTopHeight; - rowHeight += commentHeight; - - ///展开剩余的回复 - if (comment.replyInfo.leftCount > 0) { - rowHeight += 44; - } - - if (comment.replyInfo.replyList.count > 0) { - rowHeight += 10 * 2; - } else { - rowHeight += 10; - } - - ///评论的高度 - [comment.replyInfo.replyList enumerateObjectsUsingBlock:^(MonentsReplyModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if (obj.content.length > 0) { - [obj createContentAttribute]; - CGFloat replayHeight = 0; - CGFloat commentTopHeight = 10 + 15 + 10;///10顶部的间隙 15 昵称的高度 - CGFloat commentBottomHeight = 10; - YYTextContainer *container = [YYTextContainer new]; - container.size = CGSizeMake(KMONENTS_COMMENT_REPLY_MAX_WIDTH, CGFLOAT_MAX); - container.maximumNumberOfRows = 0; - YYTextLayout *realLayout = [YYTextLayout layoutWithContainer:container text:obj.contentAttribute]; - CGFloat replyContentHeight = realLayout.textBoundingSize.height; - replayHeight += commentTopHeight; - replayHeight += replyContentHeight; - replayHeight += commentBottomHeight; - obj.replyRowHeight = replayHeight; - rowHeight += replayHeight; - } - }]; - comment.commentRowHeight = rowHeight; - return rowHeight; + if (comment.commentRowHeight > 0 && !comment.isReloadHeight) { + return comment.commentRowHeight; + } + __block CGFloat rowHeight = 0; + CGFloat commentTopHeight = 10 + 15 + 10;///10顶部的间隙 15 昵称的高度 + ///内容 + QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper]; + NSMutableAttributedString * attribute = [faceManager attributedStringByText:comment.content font:[UIFont systemFontOfSize:15]]; + YYTextContainer *container = [YYTextContainer new]; + container.size = CGSizeMake(KMONENTS_COMMENT_REPLY_MAX_WIDTH, CGFLOAT_MAX); + container.maximumNumberOfRows = 0; + YYTextLayout *realLayout = [YYTextLayout layoutWithContainer:container text:attribute]; + CGFloat commentHeight = realLayout.textBoundingSize.height; + commentHeight = MAX(commentHeight, 15); + rowHeight += commentTopHeight; + rowHeight += commentHeight; + + ///展开剩余的回复 + if (comment.replyInfo.leftCount > 0) { + rowHeight += 44; + } + + if (comment.replyInfo.replyList.count > 0) { + rowHeight += 10 * 2; + } else { + rowHeight += 10; + } + + ///评论的高度 + [comment.replyInfo.replyList enumerateObjectsUsingBlock:^(MonentsReplyModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj.content.length > 0) { + [obj createContentAttribute]; + CGFloat replayHeight = 0; + CGFloat commentTopHeight = 10 + 15 + 10;///10顶部的间隙 15 昵称的高度 + CGFloat commentBottomHeight = 10; + YYTextContainer *container = [YYTextContainer new]; + container.size = CGSizeMake(KMONENTS_COMMENT_REPLY_MAX_WIDTH, CGFLOAT_MAX); + container.maximumNumberOfRows = 0; + YYTextLayout *realLayout = [YYTextLayout layoutWithContainer:container text:obj.contentAttribute]; + CGFloat replyContentHeight = realLayout.textBoundingSize.height; + replayHeight += commentTopHeight; + replayHeight += replyContentHeight; + replayHeight += commentBottomHeight; + obj.replyRowHeight = replayHeight; + rowHeight += replayHeight; + } + }]; + comment.commentRowHeight = rowHeight; + return rowHeight; } @end diff --git a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m index 2476ba87..2446a843 100644 --- a/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m +++ b/YuMi/Modules/YMMonents/View/Cell/XPMonentsTableViewCell.m @@ -127,8 +127,8 @@ }]; [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.mas_equalTo(self.backView).offset(kSIMPLE_MONENTS_CONTENT_LEFT_PADDING); - make.right.mas_equalTo(self.backView).offset(-kSIMPLE_MONENTS_CONTENT_RIGHT_PADDING); + make.left.mas_equalTo(self.backView).offset(12); + make.right.mas_equalTo(self.backView).offset(-12); make.top.mas_equalTo(self.backView.mas_top).offset(kMONENTS_CONTENT_SPACAE_HEIGHT); }]; diff --git a/YuMi/Resources/pi_new_loading.svga b/YuMi/Resources/pi_new_loading.svga new file mode 100644 index 00000000..cb9c62c0 Binary files /dev/null and b/YuMi/Resources/pi_new_loading.svga differ diff --git a/YuMi/Structure/MVP/Model/UserInfoModel.h b/YuMi/Structure/MVP/Model/UserInfoModel.h index 0443837e..cc2d508d 100644 --- a/YuMi/Structure/MVP/Model/UserInfoModel.h +++ b/YuMi/Structure/MVP/Model/UserInfoModel.h @@ -1,6 +1,6 @@ // // UserInfoModel.h -// YUMI +// xplan-ios // // Created by zu on 2021/9/14. // @@ -12,8 +12,8 @@ #import "UserVipInfoVo.h" #import "UserPhoto.h" #import "UserGiftWallInfoModel.h" -#import "YUMINNNN.h" #import "MonentsInfoModel.h" +#import "XPSoundCardModel.h" NS_ASSUME_NONNULL_BEGIN @@ -43,6 +43,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic , copy) NSString * reviewingAvatar; @property (nonatomic , assign) BOOL isReview; @property (nonatomic , strong) UserInfoSkillVo * userInfoSkillVo; +@property (nonatomic,copy) NSString *region; +@property (nonatomic,copy) NSArray *labels; @property (nonatomic , assign) BOOL newUser; @property (nonatomic , assign) NSInteger followNum; @property (nonatomic , assign) BOOL isBindPaymentPwd; @@ -132,11 +134,16 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic,assign) BOOL banAccount; ///用户的动态 @property (nonatomic,strong) NSArray *dynamicInfo; -@property (nonatomic,strong) NSMutableAttributedString *levelAtt; -@property (nonatomic,strong) NSMutableAttributedString *idAtt; - ///区号 @property (nonatomic,copy) NSString *phoneAreaCode; +///声音卡 +@property (nonatomic,strong) XPSoundCardModel *audioCard; + + +/// +/// +@property (nonatomic,strong) NSMutableAttributedString *levelAtt; +@property (nonatomic,strong) NSMutableAttributedString *idAtt; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/UserInfoModel.m b/YuMi/Structure/MVP/Model/UserInfoModel.m index 074c5e0b..4578c11c 100644 --- a/YuMi/Structure/MVP/Model/UserInfoModel.m +++ b/YuMi/Structure/MVP/Model/UserInfoModel.m @@ -1,6 +1,6 @@ // // UserInfoModel.m -// YUMI +// xplan-ios // // Created by zu on 2021/9/14. // @@ -10,24 +10,25 @@ @implementation UserInfoModel + (NSDictionary *)objectClassInArray { - return @{ - @"privatePhoto":UserPhoto.class, - @"userGiftWall":UserGiftWallInfoModel.class, - @"userLuckyBagGiftWall":UserGiftWallInfoModel.class, - @"dynamicInfo":MonentsInfoModel.class - }; + return @{ + @"privatePhoto":UserPhoto.class, + @"userGiftWall":UserGiftWallInfoModel.class, + @"userLuckyBagGiftWall":UserGiftWallInfoModel.class, + @"dynamicInfo":MonentsInfoModel.class, + @"audioCard":XPSoundCardModel.class + }; } ///如果一个模型中需要字段映射的话 比如id -> ID name -> other.name + (NSDictionary *)replacedKeyFromPropertyName { - return @{@"carEffect": @"carport.effect", + return @{@"carEffect": @"carport.effect", @"viewUrl": @"carport.viewUrl", @"otherViewType": @"carport.otherViewType", - @"headwearEffect" : @"userHeadwear.effect", - @"headwearPic" : @"userHeadwear.pic", - @"carName": @"carport.name", - @"reviewingAvatar" : @"newAvatar" - }; + @"headwearEffect" : @"userHeadwear.effect", + @"headwearPic" : @"userHeadwear.pic", + @"carName": @"carport.name", + @"reviewingAvatar" : @"newAvatar" + }; } @end diff --git a/YuMi/Structure/PrefixHeader.pch b/YuMi/Structure/PrefixHeader.pch index e69c16f8..b92d0d08 100644 --- a/YuMi/Structure/PrefixHeader.pch +++ b/YuMi/Structure/PrefixHeader.pch @@ -39,4 +39,5 @@ #import "YYUtility.h" #import #import "StatisticsServiceHelper.h" +#import "YUMIConstant.h" #endif /* PrefixHeader_pch */ diff --git a/YuMi/Tools/CountDown/CountDownHelper.h b/YuMi/Tools/CountDown/CountDownHelper.h index 5656528a..0dfda72d 100644 --- a/YuMi/Tools/CountDown/CountDownHelper.h +++ b/YuMi/Tools/CountDown/CountDownHelper.h @@ -1,8 +1,8 @@ // // CountDownHelper.h -// YUMI +// xplan-ios // -// Created by YUMI on 2021/9/15. +// Created by 冯硕 on 2021/9/15. // 倒计时 #import @@ -15,18 +15,34 @@ NS_ASSUME_NONNULL_BEGIN - (void)onCountdownFinish; ///倒计时进行 - (void)onCountdownOpen:(int)time; - +///顺计时结束 +- (void)onClockwiseFinish; +///顺计时进行 +- (void)onClockwiseOpen:(CGFloat)time; @end @interface CountDownHelper : NSObject +///倒计时是否完成 +@property (nonatomic,assign) BOOL isCountdownFinish; +///顺计时的秒数 +@property (nonatomic,assign) CGFloat seconds; +///代理 +@property (nonatomic,weak) id delegate; + +///单例 + (instancetype)shareHelper; // 停止倒计时 - (void)stopCountDown; ///开始倒计时 - (void)openCountdownWithTime:(int)totalTime; -///代理 -@property (nonatomic,assign) id delegate; + +// 停止顺计时 +- (void)stopClockwise; +///开始顺计时 +- (void)openClockwiseWithTime:(int)totalTime; + + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Tools/CountDown/CountDownHelper.m b/YuMi/Tools/CountDown/CountDownHelper.m index 7bce5763..aa921b7a 100644 --- a/YuMi/Tools/CountDown/CountDownHelper.m +++ b/YuMi/Tools/CountDown/CountDownHelper.m @@ -1,68 +1,129 @@ // // CountDownHelper.m -// YUMI +// xplan-ios // -// Created by YUMI on 2021/9/15. +// Created by 冯硕 on 2021/9/15. // #import "CountDownHelper.h" @interface CountDownHelper () @property (strong, nonatomic) dispatch_source_t timer; +@property (strong, nonatomic) dispatch_source_t clockwiseTimer; @end @implementation CountDownHelper - +-(instancetype)init{ + self = [super init]; + if(self){ + self.isCountdownFinish = YES; + self.seconds = 1.0; + } + return self; +} + (instancetype)shareHelper { - static dispatch_once_t onceToken; - static CountDownHelper * helper = nil; - dispatch_once(&onceToken, ^{ - helper = [[CountDownHelper alloc] init]; - }); - return helper; + static dispatch_once_t onceToken; + static CountDownHelper * helper = nil; + dispatch_once(&onceToken, ^{ + helper = [[CountDownHelper alloc] init]; + }); + return helper; } // 停止倒计时 - (void)stopCountDown { - if (self.timer != nil) { - dispatch_source_cancel(self.timer); - self.timer = nil; - } + if (self.timer != nil) { + dispatch_source_cancel(self.timer); + self.timer = nil; + } + self.isCountdownFinish = YES; +} +- (void)stopClockwise { + if (self.clockwiseTimer != nil) { + dispatch_source_cancel(self.clockwiseTimer); + self.clockwiseTimer = nil; + } + self.isCountdownFinish = YES; } - // 开始倒计时 - (void)openCountdownWithTime:(int)totalTime{ - if (time <= 0) { - return; - } - __block int time = totalTime; //倒计时时间 - if (self.timer != nil) { - dispatch_source_cancel(self.timer); - } - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); - dispatch_source_set_timer(self.timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行 - __weak typeof(self) weakself = self; - dispatch_source_set_event_handler(self.timer, ^{ - __strong typeof(weakself) self = weakself; - if(time <= 0){ //倒计时结束,关闭 - dispatch_source_cancel(self.timer); - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.delegate && [self.delegate respondsToSelector:@selector(onCountdownFinish)]) { - [self.delegate onCountdownFinish]; - } - }); - }else{ - time--; - dispatch_async(dispatch_get_main_queue(), ^{ - //设置按钮显示读秒效果 - if (self.delegate && [self.delegate respondsToSelector:@selector(onCountdownOpen:)]) { - [self.delegate onCountdownOpen:time]; - } - }); - - } - }); - dispatch_resume(self.timer); + if (time <= 0) { + return; + } + + __block CGFloat time = (CGFloat)totalTime; //倒计时时间 + + if (self.timer != nil) { + dispatch_source_cancel(self.timer); + } + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); + dispatch_source_set_timer(self.timer,dispatch_walltime(NULL, 0),1*NSEC_PER_SEC, 0); //每秒执行 + __weak typeof(self) weakself = self; + dispatch_source_set_event_handler(self.timer, ^{ + __strong typeof(weakself) self = weakself; + if(time <= 0){ //倒计时结束,关闭 + dispatch_source_cancel(self.timer); + dispatch_async(dispatch_get_main_queue(), ^{ + self.isCountdownFinish = YES; + if (self.delegate && [self.delegate respondsToSelector:@selector(onCountdownFinish)]) { + [self.delegate onCountdownFinish]; + + } + }); + }else{ + time--; + self.isCountdownFinish = NO; + dispatch_async(dispatch_get_main_queue(), ^{ + //设置按钮显示读秒效果 + if (self.delegate && [self.delegate respondsToSelector:@selector(onCountdownOpen:)]) { + [self.delegate onCountdownOpen:time]; + } + }); + + } + }); + dispatch_resume(self.timer); +} + +- (void)openClockwiseWithTime:(int)totalTime{ + if (totalTime <= 0) { + return; + } + __block CGFloat backTime = 0; //倒计时时间 + if (self.clockwiseTimer != nil) { + dispatch_source_cancel(self.clockwiseTimer); + } + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + self.clockwiseTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); + dispatch_source_set_timer(self.clockwiseTimer,dispatch_walltime(NULL, 0),self.seconds*NSEC_PER_SEC, 0); //每秒执行 + __weak typeof(self) weakself = self; + dispatch_source_set_event_handler(self.clockwiseTimer, ^{ + __strong typeof(weakself) self = weakself; + if(backTime > totalTime){ //倒计时结束,关闭 + dispatch_source_cancel(self.clockwiseTimer); + dispatch_async(dispatch_get_main_queue(), ^{ + self.isCountdownFinish = YES; + if (self.delegate && [self.delegate respondsToSelector:@selector(onClockwiseFinish)]) { + [self.delegate onClockwiseFinish]; + + } + }); + }else{ + backTime = backTime + self.seconds; + self.isCountdownFinish = NO; + dispatch_async(dispatch_get_main_queue(), ^{ + //设置按钮显示读秒效果 + + if(self.delegate && [self.delegate respondsToSelector:@selector(onClockwiseOpen:)]){ + [self.delegate onClockwiseOpen:backTime]; + } + + + }); + + } + }); + dispatch_resume(self.clockwiseTimer); } @end diff --git a/YuMi/Tools/File/UploadFile.h b/YuMi/Tools/File/UploadFile.h index e5f785b2..1a5754d4 100644 --- a/YuMi/Tools/File/UploadFile.h +++ b/YuMi/Tools/File/UploadFile.h @@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN token:(NSString *)token success:(void (^)(NSString *key, NSDictionary *resp))success failure:(void (^)(NSNumber *resCode, NSString *message))failure; - ++ (void)downloadAudioWithFileName:(NSString *)fileName musicUrl:(NSString *)musicUrl mainFileName:(NSString *)mainFileName completion:(void (^) (BOOL isSuccess, NSString *editAudioPath))completion; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Tools/File/UploadFile.m b/YuMi/Tools/File/UploadFile.m index da2aced9..82940608 100644 --- a/YuMi/Tools/File/UploadFile.m +++ b/YuMi/Tools/File/UploadFile.m @@ -7,7 +7,7 @@ #import "UploadFile.h" #import - +#import @implementation UploadFile /// 上传一个文件 @@ -33,5 +33,20 @@ } } option:nil]; } - ++(void)downloadAudioWithFileName:(NSString *)fileName musicUrl:(NSString *)musicUrl mainFileName:(NSString *)mainFileName completion:(void (^) (BOOL isSuccess, NSString *editAudioPath))completion { + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:musicUrl]]; + NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { + } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { + NSString *filePath = [[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) safeObjectAtIndex1:0] stringByAppendingPathComponent:mainFileName] stringByAppendingPathComponent:fileName]; + return [NSURL fileURLWithPath:filePath]; + } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { + if (!error) { + completion(YES, filePath.path); + } else { + completion(NO, nil); + } + }]; + [download resume]; +} @end diff --git a/YuMi/Tools/SDPhotoBrowser/SDPhotoBrowser.h b/YuMi/Tools/SDPhotoBrowser/SDPhotoBrowser.h index 504f44cf..301ecce0 100755 --- a/YuMi/Tools/SDPhotoBrowser/SDPhotoBrowser.h +++ b/YuMi/Tools/SDPhotoBrowser/SDPhotoBrowser.h @@ -30,6 +30,7 @@ @property (nonatomic, assign) NSInteger currentImageIndex; @property (nonatomic, assign) NSInteger imageCount; @property (nonatomic, assign) BOOL isMe; +@property (nonatomic, assign) BOOL isAvatar; @property (nonatomic, assign) CGRect sourceImagesFrame; @property (nonatomic, strong) id delegate; @property (nonatomic, assign) BOOL isHaveUserAdd; // 为了区分当前页面的cell是否第一个是添加图片的Icon diff --git a/YuMi/Tools/SGYProgressView/SGYProgressView.h b/YuMi/Tools/SGYProgressView/SGYProgressView.h new file mode 100644 index 00000000..36df036e --- /dev/null +++ b/YuMi/Tools/SGYProgressView/SGYProgressView.h @@ -0,0 +1,37 @@ +// +// SGYProgressView.h +// xplan-ios +// +// Created by duoban on 2022/12/29. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SGYProgressView : UIView +/// 初始化方法 +/// @param frame 圆形环的绘制区域 +/// @param trackWidth 圆形环的宽度 +- (instancetype)initWithFrame:(CGRect)frame trackWidth:(CGFloat)trackWidth NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +@property (nonatomic, strong) UIColor *progressColor; //进度条颜色 +@property (nonatomic, strong) UIColor *progressBgColor; //进度条背景颜色 + +@property (nonatomic,assign)CGFloat progress; // 0.0 .. 1.0, default is + +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated; + +/// 设置进度条 +/// @param progress 进度条百分比 +/// @param animated 是否开启动画 +/// @param startAngle 起始角度 +/// @param clockwise 进度条方向(是否顺时针) +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated startAngle:(CGFloat )startAngle clockwise:(BOOL)clockwise; +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Tools/SGYProgressView/SGYProgressView.m b/YuMi/Tools/SGYProgressView/SGYProgressView.m new file mode 100644 index 00000000..fea7561a --- /dev/null +++ b/YuMi/Tools/SGYProgressView/SGYProgressView.m @@ -0,0 +1,112 @@ +// +// SGYProgressView.m +// xplan-ios +// +// Created by duoban on 2022/12/29. +// + +#import "SGYProgressView.h" +@interface SGYProgressView () +@property (nonatomic, strong) CAShapeLayer *backgroundLayer; //背景图层 +@property (nonatomic, strong) CAShapeLayer *frontFillLayer; //用来填充的图层 + +@property (nonatomic, assign) CGFloat trackWidth; //导轨宽度 +@property (nonatomic, assign) CGFloat width; //圆环宽度 + +@end + + + + +@implementation SGYProgressView +#pragma mark -- initialization 初始化 +- (instancetype)initWithFrame:(CGRect)frame trackWidth:(CGFloat)trackWidth +{ + if (self = [super initWithFrame:frame]) + { + _trackWidth = trackWidth; + _width = frame.size.width; + + [self setupSubviews]; + } + return self; + +} + +#pragma mark -- setupSubviews 创建子视图 +- (void)setupSubviews +{ + //创建背景图层 + _backgroundLayer = [CAShapeLayer layer]; + _backgroundLayer.fillColor = nil; + + //创建填充图层 + _frontFillLayer = [CAShapeLayer layer]; + _frontFillLayer.fillColor = nil; + _frontFillLayer.lineCap = kCALineCapRound; + [self.layer addSublayer:_backgroundLayer]; + [self.layer addSublayer:_frontFillLayer]; + + //设置颜色 + _frontFillLayer.strokeColor = [UIColor colorWithRed:218/255.0 green:165/255.0 blue:32/255.0 alpha:1.0].CGColor; + _backgroundLayer.strokeColor = [UIColor lightGrayColor].CGColor; + +} + +-(void)layoutSubviews { + + [super layoutSubviews]; + + CGFloat width = self.width; + UIBezierPath *backgroundBezierPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(width/2.0f, width/2.0f) radius:(CGRectGetWidth(self.bounds)- self.trackWidth)/2.f startAngle:0 endAngle:M_PI*2 + clockwise:YES]; + _backgroundLayer.path = backgroundBezierPath.CGPath; + + //设置线宽 + _frontFillLayer.lineWidth = self.trackWidth; + _backgroundLayer.lineWidth = self.trackWidth; +} + +#pragma mark -- setter方法 +- (void)setProgressColor:(UIColor *)progressColor{ + + _progressColor = progressColor; + _frontFillLayer.strokeColor = progressColor.CGColor; +} + +- (void)setProgressBgColor:(UIColor *)progressBgColor{ + + _progressBgColor = progressBgColor; + _backgroundLayer.strokeColor = progressBgColor.CGColor; +} + +- (void)setProgress:(CGFloat)progress +{ + [self setProgress:progress animated:NO startAngle:-M_PI_2 clockwise:NO]; + +} + +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated{ + + [self setProgress:progress animated:animated startAngle:-M_PI_2 clockwise:NO]; +} + +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated startAngle:(CGFloat )startAngle clockwise:(BOOL)clockwise{ + progress = MAX( MIN(progress, 1.0), 0.0); + _progress = progress; + CGFloat width = self.width; + + CGFloat endAngle = startAngle + (clockwise?(2*M_PI)*progress:(-2*M_PI)*progress); + UIBezierPath *frontFillBezierPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(width/2.0f, width/2.0f) radius:(CGRectGetWidth(self.bounds)-self.trackWidth)/2.f startAngle:startAngle endAngle:endAngle clockwise:clockwise]; + _frontFillLayer.path = frontFillBezierPath.CGPath; + if (animated) { + CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + basicAnimation.duration = 0.75;//动画时间 + basicAnimation.fromValue=[NSNumber numberWithInteger:0]; + basicAnimation.toValue=[NSNumber numberWithInteger:1]; + [_frontFillLayer addAnimation:basicAnimation forKey:@"strokeKey"]; + } +} + + +@end diff --git a/YuMi/zh-Hans.lproj/Localizable.strings b/YuMi/zh-Hans.lproj/Localizable.strings index fb167190..23f3baf6 100644 --- a/YuMi/zh-Hans.lproj/Localizable.strings +++ b/YuMi/zh-Hans.lproj/Localizable.strings @@ -159,12 +159,18 @@ "XPMineSettingPresent25" = "注销账号"; "XPMineSettingPresent26" = "修改"; +///XPMineUserInfoEditPresenter.m "XPMineUserInfoEditPresenter0" = "上传失败"; -"XPMineUserInfoEditPresenter1" = "昵称:"; -"XPMineUserInfoEditPresenter2" = "头像:"; -"XPMineUserInfoEditPresenter3" = "生日:"; -"XPMineUserInfoEditPresenter4" = "相册:"; -"XPMineUserInfoEditPresenter5" = "个人介绍:"; +"XPMineUserInfoEditPresenter1" = "昵称"; +"XPMineUserInfoEditPresenter2" = "头像"; +"XPMineUserInfoEditPresenter3" = "生日"; +"XPMineUserInfoEditPresenter4" = "相册"; +"XPMineUserInfoEditPresenter5" = "个人介绍"; +"XPMineUserInfoEditPresenter6" = "声音签名"; +"XPMineUserInfoEditPresenter7" = "来录制你的专属声音吧~"; +"XPMineUserInfoEditPresenter8" = "标签"; +"XPMineUserInfoEditPresenter9" = "设置个人标签将更受欢迎~"; +"XPMineUserInfoEditPresenter10" = "地区"; "XPMineUserInfolbumPresenter0" = "上传失败"; @@ -337,7 +343,10 @@ "XPMineUserInfoHeaderView1" = "我是个默认签名"; "XPMineUserInfoHeaderView2" = "%ld粉丝"; "XPMineUserInfoHeaderView3" = "直播中"; +"XPMineUserInfoHeaderView4" = "录制声音卡"; +///XPMineUserInfoHeaderTagView +"XPMineUserInfoHeaderTagView0"="设置你的个人标签"; "XPMineUserInfoDateView0" = "取消"; "XPMineUserInfoDateView1" = "确定"; @@ -361,7 +370,7 @@ "XPMineFriendEmptyTableViewCell0" = "暂无数据"; -"XPMineDataGiftTableViewCell0" = "礼物牆"; +"XPMineDataGiftTableViewCell0" = "普通礼物"; "XPMineDataGiftTableViewCell2" = "幸运礼物"; "XPMineUserInfoEmptyCollectionViewCell0" = "还未收到过礼物"; @@ -445,12 +454,17 @@ "XPMineUserInfoDesViewController2" = "填写自我介绍,可以让别人更瞭解你哦~"; "XPMineUserInfoDesViewController3" = "完成"; +///XPMineUserInfoEditViewController.m "XPMineUserInfoEditViewController0" = "编辑个人资料"; "XPMineUserInfoEditViewController1" = "拍照上传"; +"XPMineUserInfoEditViewController2" = "相机不可用"; "XPMineUserInfoEditViewController3" = "相机权限受限,点击确定去系统设置"; +"XPMineUserInfoEditViewController4" = "相机不可用"; "XPMineUserInfoEditViewController5" = "相册权限受限,点击确定去系统设置"; "XPMineUserInfoEditViewController6" = "本地相册"; +"XPMineUserInfoEditViewController7" = "相册不可用"; "XPMineUserInfoEditViewController8" = "相册权限受限,点击确定去系统设置"; +"XPMineUserInfoEditViewController9" = "相册不可用"; "XPMineUserInfoEditViewController10" = "相册权限受限,点击确定去系统设置"; "XPMineUserInfoEditViewController11" = "头像正在审核中"; "XPMineUserInfoEditViewController12" = "头像已送审,审核成功后自动应用头像"; @@ -2290,7 +2304,10 @@ ///XPGuildSearchNavView.m "XPGuildSearchNavView0" = "搜索昵称/%@ID"; "XPGuildSearchNavView1" = "搜索"; - +///XPMineUserInfoIndividualTagView +"XPMineUserInfoIndividualTagView0"="TA的标签"; +"XPMineUserInfoIndividualTagView1"="我的标签"; +"XPMineUserInfoIndividualTagView2"="编辑标签"; ///XPGuildIncomeHeaderView.m "XPGuildIncomeHeaderView0" = "MM月dd日"; "XPGuildIncomeHeaderView1" = "MM月dd日"; @@ -2764,7 +2781,47 @@ "XPTreasureFairyGiftView6"="传说"; "XPTreasureFairyGiftView7"="召唤"; "XPTreasureFairyGiftView8"="钻"; - +///XPMonentsLayoutConfig.m +"XPMonentsLayoutConfig0" = "置顶 "; +///XPMineDataSkillCardTableViewCell.m +"XPMineDataSkillCardTableViewCell0" = "技能卡"; +"XPMineDataSkillCardTableViewCell1" = "还未添加技能卡喔"; +///XPMineUserInfoRecordedSoundView +"XPMineUserInfoRecordedSoundView0"="好的声音能带来更多关注哦~"; +"XPMineUserInfoRecordedSoundView1"="点击开始录制"; +"XPMineUserInfoRecordedSoundView2"="重新录制"; +"XPMineUserInfoRecordedSoundView3"="保存声音"; +"XPMineUserInfoRecordedSoundView4"="声音审核中,审核通过即可展示~"; +"XPMineUserInfoRecordedSoundView5"="点击停止"; +"XPMineUserInfoRecordedSoundView6"="点击试听"; +"XPMineUserInfoRecordedSoundView7"="点击停止播放"; +"XPMineUserInfoRecordedSoundView8"="删除声音"; +"XPMineUserInfoRecordedSoundView9"="声音签名审核通过,快叫小伙伴听听吧~"; +"XPMineUserInfoRecordedSoundView10"="正在上麦中,不能录音"; +///XPMineUserInfoRecordedSoundVC +"XPMineUserInfoRecordedSoundVC0"="请给予麦克风权限后再试"; +"XPMineUserInfoRecordedSoundVC1"="录制时间过短~"; +"XPMineUserInfoRecordedSoundVC2"="声音签名"; +"XPMineUserInfoRecordedSoundVC3"="保存声音失败"; +"XPMineUserInfoRecordedSoundVC4"="保存声音成功"; +"XPMineUserInfoRecordedSoundVC5"="删除声音成功"; +"XPMineUserInfoRecordedSoundVC6"="确定要删除这段声音吗?"; +"XPMineUserInfoRecordedSoundVC7"="声音还未录制完成,确认退出吗?"; +"XPMineUserInfoRecordedSoundVC8"="声音还未保存,确认退出吗?"; +///XPMineUserInfoNavView +"XPMineUserInfoTagVC0"="我的标签"; +"XPMineUserInfoTagVC1"="完成"; +"XPMineUserInfoTagVC2"="标签保存成功"; +///XPMineUserInfoTagEmptyViewCell +"XPMineUserInfoTagEmptyViewCell0"="编辑你的标签,可以大大提高你的人气~"; +///XPMineUserInfoTagItemView +"XPMineUserInfoTagItemView0"="最多只能添加20个标签哦~"; +///XPMineUserInfoIndividualTagView +"XPMineUserInfoIndividualTagView0"="TA的标签"; +"XPMineUserInfoIndividualTagView1"="我的标签"; +"XPMineUserInfoIndividualTagView2"="编辑标签"; +///XPMineUserInfoHeaderTagView +"XPMineUserInfoHeaderTagView0"="设置你的个人标签"; ///不能脚本生成的 "App_Common_And" = "和"; "App_Common_Male" = "男"; diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings index 0e53603d..cc9a15e2 100644 --- a/YuMi/zh-Hant.lproj/Localizable.strings +++ b/YuMi/zh-Hant.lproj/Localizable.strings @@ -159,12 +159,18 @@ "XPMineSettingPresent25" = "註銷賬號"; "XPMineSettingPresent26" = "修改"; +///XPMineUserInfoEditPresenter.m "XPMineUserInfoEditPresenter0" = "上傳失敗"; -"XPMineUserInfoEditPresenter1" = "昵稱:"; -"XPMineUserInfoEditPresenter2" = "頭像:"; -"XPMineUserInfoEditPresenter3" = "生日:"; -"XPMineUserInfoEditPresenter4" = "相冊:"; -"XPMineUserInfoEditPresenter5" = "個人介紹:"; +"XPMineUserInfoEditPresenter1" = "昵稱"; +"XPMineUserInfoEditPresenter2" = "頭像"; +"XPMineUserInfoEditPresenter3" = "生日"; +"XPMineUserInfoEditPresenter4" = "相冊"; +"XPMineUserInfoEditPresenter5" = "個人介紹"; +"XPMineUserInfoEditPresenter6" = "聲音簽名"; +"XPMineUserInfoEditPresenter7" = "來錄制你的專屬聲音吧~"; +"XPMineUserInfoEditPresenter8" = "標簽"; +"XPMineUserInfoEditPresenter9" = "設置個人標簽將更受歡迎~"; +"XPMineUserInfoEditPresenter10" = "地區"; "XPMineUserInfolbumPresenter0" = "上傳失敗"; @@ -337,7 +343,18 @@ "XPMineUserInfoHeaderView1" = "我是個默認簽名"; "XPMineUserInfoHeaderView2" = "%ld粉絲"; "XPMineUserInfoHeaderView3" = "直播中"; - +"XPMineUserInfoHeaderView4" = "錄制聲音卡"; +///XPMineUserInfoIndividualTagView +"XPMineUserInfoIndividualTagView0"="TA的標簽"; +"XPMineUserInfoIndividualTagView1"="我的標簽"; +"XPMineUserInfoIndividualTagView2"="編輯標簽"; +///XPMineUserInfoHeaderTagView +"XPMineUserInfoHeaderTagView0"="設置你的個人標簽"; +///XPMineDataSkillCardTableViewCell.m +"XPMineDataSkillCardTableViewCell0" = "技能卡"; +"XPMineDataSkillCardTableViewCell1" = "還未添加技能卡喔"; +///XPMonentsLayoutConfig.m +"XPMonentsLayoutConfig0" = "置頂 "; "XPMineUserInfoDateView0" = "取消"; "XPMineUserInfoDateView1" = "確定"; @@ -361,7 +378,7 @@ "XPMineFriendEmptyTableViewCell0" = "暫無數據"; -"XPMineDataGiftTableViewCell0" = "禮物牆"; +"XPMineDataGiftTableViewCell0" = "普通禮物"; "XPMineDataGiftTableViewCell2" = "幸運禮物"; "XPMineUserInfoEmptyCollectionViewCell0" = "還未收到過禮物"; @@ -445,12 +462,17 @@ "XPMineUserInfoDesViewController2" = "填寫自我介紹,可以讓別人更瞭解你哦~"; "XPMineUserInfoDesViewController3" = "完成"; +///XPMineUserInfoEditViewController.m "XPMineUserInfoEditViewController0" = "編輯個人資料"; "XPMineUserInfoEditViewController1" = "拍照上傳"; +"XPMineUserInfoEditViewController2" = "相機不可用"; "XPMineUserInfoEditViewController3" = "相機權限受限,點擊確定去系統設置"; +"XPMineUserInfoEditViewController4" = "相機不可用"; "XPMineUserInfoEditViewController5" = "相冊權限受限,點擊確定去系統設置"; "XPMineUserInfoEditViewController6" = "本地相冊"; +"XPMineUserInfoEditViewController7" = "相冊不可用"; "XPMineUserInfoEditViewController8" = "相冊權限受限,點擊確定去系統設置"; +"XPMineUserInfoEditViewController9" = "相冊不可用"; "XPMineUserInfoEditViewController10" = "相冊權限受限,點擊確定去系統設置"; "XPMineUserInfoEditViewController11" = "頭像正在審核中"; "XPMineUserInfoEditViewController12" = "頭像已送審,審核成功後自動應用頭像"; @@ -2764,6 +2786,43 @@ "XPTreasureFairyGiftView6"="傳說"; "XPTreasureFairyGiftView7"="召喚"; "XPTreasureFairyGiftView8"="鉆"; +///XPMineUserInfoRecordedSoundView +"XPMineUserInfoRecordedSoundView0"="好的聲音能帶來更多關註哦~"; +"XPMineUserInfoRecordedSoundView1"="點擊開始錄製"; +"XPMineUserInfoRecordedSoundView2"="重新錄製"; +"XPMineUserInfoRecordedSoundView3"="保存聲音"; +"XPMineUserInfoRecordedSoundView4"="聲音審核中,審核通過即可展示~"; + +"XPMineUserInfoRecordedSoundView5"="點擊停止"; +"XPMineUserInfoRecordedSoundView6"="點擊試聽"; +"XPMineUserInfoRecordedSoundView7"="點擊停止播放"; +"XPMineUserInfoRecordedSoundView8"="删除聲音"; +"XPMineUserInfoRecordedSoundView9"="聲音簽名審核通過,快叫小夥伴聽聽吧~"; +"XPMineUserInfoRecordedSoundView10"="正在上麥中,不能錄音"; +///XPMineUserInfoRecordedSoundVC +"XPMineUserInfoRecordedSoundVC0"="請給予麥克風權限後再試"; +"XPMineUserInfoRecordedSoundVC1"="錄製時間過短~"; +"XPMineUserInfoRecordedSoundVC2"="聲音簽名"; +"XPMineUserInfoRecordedSoundVC3"="保存聲音失敗"; +"XPMineUserInfoRecordedSoundVC4"="保存聲音成功"; +"XPMineUserInfoRecordedSoundVC5"="刪除聲音成功"; +"XPMineUserInfoRecordedSoundVC6"="確定要刪除這段聲音嗎?"; +"XPMineUserInfoRecordedSoundVC7"="聲音還未錄製完成,確認退出嗎?"; +"XPMineUserInfoRecordedSoundVC8"="聲音還未保存,確認退出嗎?"; +//XPMineUserInfoTagVC +"XPMineUserInfoTagVC0"="我的標簽"; +"XPMineUserInfoTagVC1"="完成"; +"XPMineUserInfoTagVC2"="標簽保存成功"; +///XPMineUserInfoTagEmptyViewCell +"XPMineUserInfoTagEmptyViewCell0"="編輯你的標簽,可以大大提高你的人氣~"; +///XPMineUserInfoTagItemView +"XPMineUserInfoTagItemView0"="最多只能添加20個標簽哦~"; +///XPMineUserInfoIndividualTagView +"XPMineUserInfoIndividualTagView0"="TA的標簽"; +"XPMineUserInfoIndividualTagView1"="我的標簽"; +"XPMineUserInfoIndividualTagView2"="編輯標簽"; +///XPMineUserInfoHeaderTagView +"XPMineUserInfoHeaderTagView0"="設置你的個人標簽"; ///不能腳本生成的 "App_Common_And" = "和"; "App_Common_Male" = "男";