XQMuse.xcodeproj/project.pbxproj
@@ -7,6 +7,12 @@ objects = { /* Begin PBXBuildFile section */ 1300BD3B2C6DFB1C000BCA5E /* VIPCenterVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1300BD3A2C6DFB1C000BCA5E /* VIPCenterVC.xib */; }; 1300BD3C2C6DFB1C000BCA5E /* VIPCenterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1300BD392C6DFB1C000BCA5E /* VIPCenterVC.swift */; }; 130913EA2C6DE33200418201 /* PaymentOrderResultVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130913E92C6DE33200418201 /* PaymentOrderResultVC.xib */; }; 130913EB2C6DE33200418201 /* PaymentOrderResultVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130913E82C6DE33200418201 /* PaymentOrderResultVC.swift */; }; 130913EE2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130913ED2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib */; }; 130913EF2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130913EC2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift */; }; 130B76592C6C4963006371AF /* HomeRelaxVoiceCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130B76572C6C4963006371AF /* HomeRelaxVoiceCCell.swift */; }; 130B765A2C6C4963006371AF /* HomeRelaxVoiceCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130B76582C6C4963006371AF /* HomeRelaxVoiceCCell.xib */; }; 130B765D2C6C4C33006371AF /* HomeItemListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130B765B2C6C4C33006371AF /* HomeItemListVC.swift */; }; @@ -19,8 +25,15 @@ 131E75C52C6B87C500E2C85D /* ForgotPasswordChangeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 131E75C22C6B87C400E2C85D /* ForgotPasswordChangeVC.swift */; }; 132EB01C2C6B32B200990429 /* RegisterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132EB01A2C6B32B200990429 /* RegisterVC.swift */; }; 132EB01D2C6B32B200990429 /* RegisterVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 132EB01B2C6B32B200990429 /* RegisterVC.xib */; }; 1336EFA52C6DEB550075E070 /* HoverHeaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1336EFA42C6DEB550075E070 /* HoverHeaderFlowLayout.swift */; }; 1336EFA72C6DEC640075E070 /* PaymentOrderResultTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1336EFA62C6DEC640075E070 /* PaymentOrderResultTopView.swift */; }; 1336EFA92C6DEC6B0075E070 /* PaymentOrderResultTopView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1336EFA82C6DEC6B0075E070 /* PaymentOrderResultTopView.xib */; }; 134783CF2C6C86EC0096C736 /* PlaySettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134783CE2C6C86EC0096C736 /* PlaySettingView.swift */; }; 134783D12C6C86F40096C736 /* PlaySettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134783D02C6C86F40096C736 /* PlaySettingView.xib */; }; 134A45322C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134A45302C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift */; }; 134A45352C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134A45342C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift */; }; 134A45392C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134A45372C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift */; }; 134A453A2C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134A45382C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib */; }; 137175C62C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 137175C52C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf */; }; 137175C82C6C3C6D00B38EF1 /* Agenda-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 137175C72C6C3C6D00B38EF1 /* Agenda-Light.otf */; }; 137175CB2C6C412A00B38EF1 /* BackgroundVoiceVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137175C92C6C412A00B38EF1 /* BackgroundVoiceVC.swift */; }; @@ -29,6 +42,13 @@ 1377768E2C6AFD25004FF994 /* LoginVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1377768C2C6AFD25004FF994 /* LoginVC.xib */; }; 137776922C6AFE69004FF994 /* SearchVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137776902C6AFE69004FF994 /* SearchVC.swift */; }; 137776932C6AFE69004FF994 /* SearchVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137776912C6AFE69004FF994 /* SearchVC.xib */; }; 1377B40C2C6D936A00CF7CA5 /* CommentUserInputContentTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1377B40A2C6D936A00CF7CA5 /* CommentUserInputContentTCell.swift */; }; 1377B40D2C6D936A00CF7CA5 /* CommentUserInputContentTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1377B40B2C6D936A00CF7CA5 /* CommentUserInputContentTCell.xib */; }; 1377B40F2C6D93FA00CF7CA5 /* CommentCommentHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1377B40E2C6D93FA00CF7CA5 /* CommentCommentHeaderView.swift */; }; 1377B4112C6DAA1900CF7CA5 /* ChooseOptView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1377B4102C6DAA1900CF7CA5 /* ChooseOptView.swift */; }; 1377B4132C6DAA2000CF7CA5 /* ChooseOptView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1377B4122C6DAA2000CF7CA5 /* ChooseOptView.xib */; }; 1377B4162C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1377B4142C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.swift */; }; 1377B4172C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1377B4152C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib */; }; 137ABE342C6B3F64003A91C5 /* ForgotPasswordVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137ABE322C6B3F64003A91C5 /* ForgotPasswordVC.swift */; }; 137ABE352C6B3F64003A91C5 /* ForgotPasswordVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137ABE332C6B3F64003A91C5 /* ForgotPasswordVC.xib */; }; 137ABE382C6B6641003A91C5 /* WebVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137ABE372C6B6641003A91C5 /* WebVC.swift */; }; @@ -77,10 +97,21 @@ 13D256B72C6C68F8006FC2D7 /* ShareView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13D256B62C6C68F8006FC2D7 /* ShareView.xib */; }; 13E0FBF92C6C8BDE009997AE /* CountdownChooseListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E0FBF82C6C8BDE009997AE /* CountdownChooseListView.swift */; }; 13E0FBFB2C6C8BE3009997AE /* CountdownChooseListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13E0FBFA2C6C8BE3009997AE /* CountdownChooseListView.xib */; }; 13E160202C6CB8930027F781 /* CommentListVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13E1601F2C6CB8930027F781 /* CommentListVC.xib */; }; 13E160212C6CB8930027F781 /* CommentListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E1601E2C6CB8930027F781 /* CommentListVC.swift */; }; 13EFCDBE2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EFCDBD2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift */; }; 13EFCDC12C6DD27A00B51AE6 /* PaymentOrderVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EFCDBF2C6DD27A00B51AE6 /* PaymentOrderVC.swift */; }; 13EFCDC22C6DD27A00B51AE6 /* PaymentOrderVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EFCDC02C6DD27A00B51AE6 /* PaymentOrderVC.xib */; }; D80DD987C5D5D23DD582763D /* Pods_XQMuse.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 627C13604519744922724D64 /* Pods_XQMuse.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 1300BD392C6DFB1C000BCA5E /* VIPCenterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VIPCenterVC.swift; sourceTree = "<group>"; }; 1300BD3A2C6DFB1C000BCA5E /* VIPCenterVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VIPCenterVC.xib; sourceTree = "<group>"; }; 130913E82C6DE33200418201 /* PaymentOrderResultVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentOrderResultVC.swift; sourceTree = "<group>"; }; 130913E92C6DE33200418201 /* PaymentOrderResultVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentOrderResultVC.xib; sourceTree = "<group>"; }; 130913EC2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeRelaxBanner_2_1_CCell.swift; sourceTree = "<group>"; }; 130913ED2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeRelaxBanner_2_1_CCell.xib; sourceTree = "<group>"; }; 130B76572C6C4963006371AF /* HomeRelaxVoiceCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeRelaxVoiceCCell.swift; sourceTree = "<group>"; }; 130B76582C6C4963006371AF /* HomeRelaxVoiceCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeRelaxVoiceCCell.xib; sourceTree = "<group>"; }; 130B765B2C6C4C33006371AF /* HomeItemListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeItemListVC.swift; sourceTree = "<group>"; }; @@ -93,8 +124,15 @@ 131E75C32C6B87C400E2C85D /* ForgotPasswordChangeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ForgotPasswordChangeVC.xib; sourceTree = "<group>"; }; 132EB01A2C6B32B200990429 /* RegisterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterVC.swift; sourceTree = "<group>"; }; 132EB01B2C6B32B200990429 /* RegisterVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RegisterVC.xib; sourceTree = "<group>"; }; 1336EFA42C6DEB550075E070 /* HoverHeaderFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoverHeaderFlowLayout.swift; sourceTree = "<group>"; }; 1336EFA62C6DEC640075E070 /* PaymentOrderResultTopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentOrderResultTopView.swift; sourceTree = "<group>"; }; 1336EFA82C6DEC6B0075E070 /* PaymentOrderResultTopView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentOrderResultTopView.xib; sourceTree = "<group>"; }; 134783CE2C6C86EC0096C736 /* PlaySettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaySettingView.swift; sourceTree = "<group>"; }; 134783D02C6C86F40096C736 /* PlaySettingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PlaySettingView.xib; sourceTree = "<group>"; }; 134A45302C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseVCOfficalCommentVC.swift; sourceTree = "<group>"; }; 134A45342C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseVCTeacherSpecialVC.swift; sourceTree = "<group>"; }; 134A45372C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseOfficalCommendTopCCell.swift; sourceTree = "<group>"; }; 134A45382C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseOfficalCommendTopCCell.xib; sourceTree = "<group>"; }; 137175C52C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceHanSansCN-Regular.otf"; sourceTree = "<group>"; }; 137175C72C6C3C6D00B38EF1 /* Agenda-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Agenda-Light.otf"; sourceTree = "<group>"; }; 137175C92C6C412A00B38EF1 /* BackgroundVoiceVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundVoiceVC.swift; sourceTree = "<group>"; }; @@ -103,6 +141,13 @@ 1377768C2C6AFD25004FF994 /* LoginVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LoginVC.xib; sourceTree = "<group>"; }; 137776902C6AFE69004FF994 /* SearchVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchVC.swift; sourceTree = "<group>"; }; 137776912C6AFE69004FF994 /* SearchVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchVC.xib; sourceTree = "<group>"; }; 1377B40A2C6D936A00CF7CA5 /* CommentUserInputContentTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentUserInputContentTCell.swift; sourceTree = "<group>"; }; 1377B40B2C6D936A00CF7CA5 /* CommentUserInputContentTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommentUserInputContentTCell.xib; sourceTree = "<group>"; }; 1377B40E2C6D93FA00CF7CA5 /* CommentCommentHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommentCommentHeaderView.swift; sourceTree = "<group>"; }; 1377B4102C6DAA1900CF7CA5 /* ChooseOptView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseOptView.swift; sourceTree = "<group>"; }; 1377B4122C6DAA2000CF7CA5 /* ChooseOptView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ChooseOptView.xib; sourceTree = "<group>"; }; 1377B4142C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Home_Style_4_Inner_1_CCell.swift; sourceTree = "<group>"; }; 1377B4152C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Home_Style_4_Inner_1_CCell.xib; sourceTree = "<group>"; }; 137ABE322C6B3F64003A91C5 /* ForgotPasswordVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForgotPasswordVC.swift; sourceTree = "<group>"; }; 137ABE332C6B3F64003A91C5 /* ForgotPasswordVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ForgotPasswordVC.xib; sourceTree = "<group>"; }; 137ABE372C6B6641003A91C5 /* WebVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebVC.swift; sourceTree = "<group>"; }; @@ -153,6 +198,11 @@ 13D256B62C6C68F8006FC2D7 /* ShareView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShareView.xib; sourceTree = "<group>"; }; 13E0FBF82C6C8BDE009997AE /* CountdownChooseListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountdownChooseListView.swift; sourceTree = "<group>"; }; 13E0FBFA2C6C8BE3009997AE /* CountdownChooseListView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CountdownChooseListView.xib; sourceTree = "<group>"; }; 13E1601E2C6CB8930027F781 /* CommentListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentListVC.swift; sourceTree = "<group>"; }; 13E1601F2C6CB8930027F781 /* CommentListVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommentListVC.xib; sourceTree = "<group>"; }; 13EFCDBD2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTyroGuideVC.swift; sourceTree = "<group>"; }; 13EFCDBF2C6DD27A00B51AE6 /* PaymentOrderVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentOrderVC.swift; sourceTree = "<group>"; }; 13EFCDC02C6DD27A00B51AE6 /* PaymentOrderVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentOrderVC.xib; sourceTree = "<group>"; }; 257B6AA3157A71622E7EABC6 /* Pods-XQMuse.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XQMuse.debug.xcconfig"; path = "Target Support Files/Pods-XQMuse/Pods-XQMuse.debug.xcconfig"; sourceTree = "<group>"; }; 627C13604519744922724D64 /* Pods_XQMuse.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_XQMuse.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B934C5A58089E8AEA47DCFE7 /* Pods-XQMuse.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XQMuse.release.xcconfig"; path = "Target Support Files/Pods-XQMuse/Pods-XQMuse.release.xcconfig"; sourceTree = "<group>"; }; @@ -170,6 +220,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 1300BD382C6DFB0A000BCA5E /* VC */ = { isa = PBXGroup; children = ( 1300BD392C6DFB1C000BCA5E /* VIPCenterVC.swift */, 1300BD3A2C6DFB1C000BCA5E /* VIPCenterVC.xib */, ); path = VC; sourceTree = "<group>"; }; 131E75C62C6B87CC00E2C85D /* VC */ = { isa = PBXGroup; children = ( @@ -185,6 +244,24 @@ 139466462C6B8E0200F6FB15 /* UpdatePhoneVC.xib */, ); path = VC; sourceTree = "<group>"; }; 134A452F2C6E0D3800538D78 /* VC */ = { isa = PBXGroup; children = ( 134A45302C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift */, 134A45342C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift */, ); path = VC; sourceTree = "<group>"; }; 134A45362C6E165F00538D78 /* CCell */ = { isa = PBXGroup; children = ( 134A45372C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift */, 134A45382C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib */, ); path = CCell; sourceTree = "<group>"; }; 137175C42C6C3C2100B38EF1 /* Fonts */ = { @@ -218,6 +295,13 @@ 130B765C2C6C4C33006371AF /* HomeItemListVC.xib */, 1385E0082C6C57A900AADB1F /* HomeItemDetailVC.swift */, 1385E0092C6C57A900AADB1F /* HomeItemDetailVC.xib */, 13E1601E2C6CB8930027F781 /* CommentListVC.swift */, 13E1601F2C6CB8930027F781 /* CommentListVC.xib */, 13EFCDBD2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift */, 13EFCDBF2C6DD27A00B51AE6 /* PaymentOrderVC.swift */, 13EFCDC02C6DD27A00B51AE6 /* PaymentOrderVC.xib */, 130913E82C6DE33200418201 /* PaymentOrderResultVC.swift */, 130913E92C6DE33200418201 /* PaymentOrderResultVC.xib */, ); path = VC; sourceTree = "<group>"; @@ -316,8 +400,9 @@ 13985DB32C69B7D40046B6DC /* Config */ = { isa = PBXGroup; children = ( 137175C42C6C3C2100B38EF1 /* Fonts */, 139C165F2C6A0FBB00A924D9 /* TestLeftRightCollectionViewFlowLayout.swift */, 1336EFA42C6DEB550075E070 /* HoverHeaderFlowLayout.swift */, 137175C42C6C3C2100B38EF1 /* Fonts */, 13985DB42C69B7DF0046B6DC /* Def.swift */, 13985DB72C69B80D0046B6DC /* Themes.swift */, ); @@ -327,9 +412,12 @@ 13985DBB2C69DDDC0046B6DC /* View */ = { isa = PBXGroup; children = ( 1377B40E2C6D93FA00CF7CA5 /* CommentCommentHeaderView.swift */, 13985DBC2C69DDF30046B6DC /* HomeTopMenuView.swift */, 13985DBE2C69DDF90046B6DC /* HomeTopMenuView.xib */, 13985DCF2C69F2A80046B6DC /* HomeHeaderVC.swift */, 1336EFA62C6DEC640075E070 /* PaymentOrderResultTopView.swift */, 1336EFA82C6DEC6B0075E070 /* PaymentOrderResultTopView.xib */, ); path = View; sourceTree = "<group>"; @@ -347,6 +435,10 @@ 130B76582C6C4963006371AF /* HomeRelaxVoiceCCell.xib */, 1385E0042C6C558200AADB1F /* HomeRelaxBanner_2_CCell.swift */, 1385E0052C6C558200AADB1F /* HomeRelaxBanner_2_CCell.xib */, 1377B4142C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.swift */, 1377B4152C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib */, 130913EC2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift */, 130913ED2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib */, ); path = CCell; sourceTree = "<group>"; @@ -354,6 +446,8 @@ 13985DC52C69E9260046B6DC /* Course */ = { isa = PBXGroup; children = ( 134A45362C6E165F00538D78 /* CCell */, 134A452F2C6E0D3800538D78 /* VC */, 13985DC62C69E9550046B6DC /* CourseVC.swift */, ); path = Course; @@ -385,6 +479,7 @@ 13985DCA2C69E9C10046B6DC /* Me */ = { isa = PBXGroup; children = ( 1300BD382C6DFB0A000BCA5E /* VC */, 13985DCD2C69EA160046B6DC /* MeVC.swift */, ); path = Me; @@ -401,6 +496,8 @@ 139C165C2C6A0AC600A924D9 /* Home_Style_3_TCell.xib */, 130ED7E52C6AEF5900D0736E /* Home_Style_4_TCell.swift */, 130ED7E62C6AEF5900D0736E /* Home_Style_4_TCell.xib */, 1377B40A2C6D936A00CF7CA5 /* CommentUserInputContentTCell.swift */, 1377B40B2C6D936A00CF7CA5 /* CommentUserInputContentTCell.xib */, ); path = TCell; sourceTree = "<group>"; @@ -414,6 +511,8 @@ 134783D02C6C86F40096C736 /* PlaySettingView.xib */, 13E0FBF82C6C8BDE009997AE /* CountdownChooseListView.swift */, 13E0FBFA2C6C8BE3009997AE /* CountdownChooseListView.xib */, 1377B4102C6DAA1900CF7CA5 /* ChooseOptView.swift */, 1377B4122C6DAA2000CF7CA5 /* ChooseOptView.xib */, ); path = View; sourceTree = "<group>"; @@ -496,13 +595,18 @@ buildActionMask = 2147483647; files = ( 13985DD42C69FC1F0046B6DC /* Home_Style_1_TCell.xib in Resources */, 1377B4132C6DAA2000CF7CA5 /* ChooseOptView.xib in Resources */, 130B765E2C6C4C33006371AF /* HomeItemListVC.xib in Resources */, 1385E0072C6C558200AADB1F /* HomeRelaxBanner_2_CCell.xib in Resources */, 132EB01D2C6B32B200990429 /* RegisterVC.xib in Resources */, 1336EFA92C6DEC6B0075E070 /* PaymentOrderResultTopView.xib in Resources */, 137ABE352C6B3F64003A91C5 /* ForgotPasswordVC.xib in Resources */, 1377768E2C6AFD25004FF994 /* LoginVC.xib in Resources */, 130913EE2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib in Resources */, 130ED7E82C6AEF5900D0736E /* Home_Style_4_TCell.xib in Resources */, 1377B4172C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib in Resources */, 13985D9F2C69B2440046B6DC /* Assets.xcassets in Resources */, 13EFCDC22C6DD27A00B51AE6 /* PaymentOrderVC.xib in Resources */, 13D256B72C6C68F8006FC2D7 /* ShareView.xib in Resources */, 13985DC32C69E0BF0046B6DC /* HomeTopMenuCCell.xib in Resources */, 139C165E2C6A0AC600A924D9 /* Home_Style_3_TCell.xib in Resources */, @@ -510,18 +614,23 @@ 13985DA22C69B2440046B6DC /* Base in Resources */, 134783D12C6C86F40096C736 /* PlaySettingView.xib in Resources */, 139C165A2C6A053000A924D9 /* Home_Style_2_TCell.xib in Resources */, 1300BD3B2C6DFB1C000BCA5E /* VIPCenterVC.xib in Resources */, 139466482C6B8E0200F6FB15 /* UpdatePhoneVC.xib in Resources */, 134A453A2C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib in Resources */, 1377B40D2C6D936A00CF7CA5 /* CommentUserInputContentTCell.xib in Resources */, 137175CC2C6C412A00B38EF1 /* BackgroundVoiceVC.xib in Resources */, 137776932C6AFE69004FF994 /* SearchVC.xib in Resources */, 13985DBF2C69DDF90046B6DC /* HomeTopMenuView.xib in Resources */, 1385E00B2C6C57A900AADB1F /* HomeItemDetailVC.xib in Resources */, 137ABE3C2C6B6BDD003A91C5 /* ForgotPasswordInputCodeVC.xib in Resources */, 130913EA2C6DE33200418201 /* PaymentOrderResultVC.xib in Resources */, 130ED7ED2C6AF05C00D0736E /* Home_Style_4_Inner_CCell.xib in Resources */, 137175C62C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf in Resources */, 131E75C42C6B87C500E2C85D /* ForgotPasswordChangeVC.xib in Resources */, 139C16642C6A108A00A924D9 /* HomeRelaxBannerCCell.xib in Resources */, 13E0FBFB2C6C8BE3009997AE /* CountdownChooseListView.xib in Resources */, 130B765A2C6C4963006371AF /* HomeRelaxVoiceCCell.xib in Resources */, 13E160202C6CB8930027F781 /* CommentListVC.xib in Resources */, 139228B12C6B8374006F3CB6 /* Popup_1_View.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -584,17 +693,26 @@ 13985DB22C69B7B00046B6DC /* TapBtn.swift in Sources */, 13985DBA2C69B8ED0046B6DC /* HomeVC.swift in Sources */, 13985DAF2C69B7B00046B6DC /* BaseNav.swift in Sources */, 134A45352C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift in Sources */, 134A45392C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift in Sources */, 13985D982C69B2410046B6DC /* SceneDelegate.swift in Sources */, 13985DBD2C69DDF30046B6DC /* HomeTopMenuView.swift in Sources */, 1377B4112C6DAA1900CF7CA5 /* ChooseOptView.swift in Sources */, 1385E0062C6C558200AADB1F /* HomeRelaxBanner_2_CCell.swift in Sources */, 130913EB2C6DE33200418201 /* PaymentOrderResultVC.swift in Sources */, 137ABE342C6B3F64003A91C5 /* ForgotPasswordVC.swift in Sources */, 13EFCDBE2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift in Sources */, 134A45322C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift in Sources */, 139C16602C6A0FBB00A924D9 /* TestLeftRightCollectionViewFlowLayout.swift in Sources */, 13985DC72C69E9550046B6DC /* CourseVC.swift in Sources */, 1385E0022C6C4F1200AADB1F /* Services.swift in Sources */, 13985DB82C69B80D0046B6DC /* Themes.swift in Sources */, 13985DD02C69F2A80046B6DC /* HomeHeaderVC.swift in Sources */, 1336EFA52C6DEB550075E070 /* HoverHeaderFlowLayout.swift in Sources */, 13985DB52C69B7DF0046B6DC /* Def.swift in Sources */, 139228AF2C6B836B006F3CB6 /* Popup_1_View.swift in Sources */, 1336EFA72C6DEC640075E070 /* PaymentOrderResultTopView.swift in Sources */, 13EFCDC12C6DD27A00B51AE6 /* PaymentOrderVC.swift in Sources */, 13985DCE2C69EA160046B6DC /* MeVC.swift in Sources */, 13985DCC2C69E9FA0046B6DC /* PavilionVC.swift in Sources */, 13985DC42C69E0BF0046B6DC /* HomeTopMenuCCell.swift in Sources */, @@ -609,10 +727,16 @@ 13E0FBF92C6C8BDE009997AE /* CountdownChooseListView.swift in Sources */, 130ED7EE2C6AF05C00D0736E /* Home_Style_4_Inner_CCell.swift in Sources */, 139C165D2C6A0AC600A924D9 /* Home_Style_3_TCell.swift in Sources */, 1377B40F2C6D93FA00CF7CA5 /* CommentCommentHeaderView.swift in Sources */, 1377B40C2C6D936A00CF7CA5 /* CommentUserInputContentTCell.swift in Sources */, 1385DFFA2C6C4EBC00AADB1F /* RefreshModel.swift in Sources */, 139C16632C6A108A00A924D9 /* HomeRelaxBannerCCell.swift in Sources */, 131E75C52C6B87C500E2C85D /* ForgotPasswordChangeVC.swift in Sources */, 130ED7E72C6AEF5900D0736E /* Home_Style_4_TCell.swift in Sources */, 130913EF2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift in Sources */, 1300BD3C2C6DFB1C000BCA5E /* VIPCenterVC.swift in Sources */, 1377B4162C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.swift in Sources */, 13E160212C6CB8930027F781 /* CommentListVC.swift in Sources */, 137ABE3B2C6B6BDD003A91C5 /* ForgotPasswordInputCodeVC.swift in Sources */, 130B765D2C6C4C33006371AF /* HomeItemListVC.swift in Sources */, 1385E0002C6C4F1200AADB1F /* NetworkRequest.swift in Sources */, XQMuse/Assets.xcassets/Btns/btn_close_1.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_close_1@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_close_1@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Btns/btn_close_1.imageset/btn_close_1@2x.png
XQMuse/Assets.xcassets/Btns/btn_close_1.imageset/btn_close_1@3x.png
XQMuse/Assets.xcassets/Btns/btn_collect_1_s.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_collect_1_s@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_collect_1_s@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Btns/btn_collect_1_s.imageset/btn_collect_1_s@2x.png
XQMuse/Assets.xcassets/Btns/btn_collect_1_s.imageset/btn_collect_1_s@3x.png
XQMuse/Assets.xcassets/Btns/btn_good.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_good@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_good@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Btns/btn_good.imageset/btn_good@2x.png
XQMuse/Assets.xcassets/Btns/btn_good.imageset/btn_good@3x.png
XQMuse/Assets.xcassets/Btns/btn_like_u.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_like_u@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_like_u@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Btns/btn_like_u.imageset/btn_like_u@2x.png
XQMuse/Assets.xcassets/Btns/btn_like_u.imageset/btn_like_u@3x.png
XQMuse/Assets.xcassets/Btns/btn_roll_loop.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_roll_loop@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "btn_roll_loop@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Btns/btn_roll_loop.imageset/btn_roll_loop@2x.png
XQMuse/Assets.xcassets/Btns/btn_roll_loop.imageset/btn_roll_loop@3x.png
XQMuse/Assets.xcassets/Icons/icon_choose_small_1.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_choose_small_1@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_choose_small_1@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Icons/icon_choose_small_1.imageset/icon_choose_small_1@2x.png
XQMuse/Assets.xcassets/Icons/icon_choose_small_1.imageset/icon_choose_small_1@3x.png
XQMuse/Assets.xcassets/Icons/icon_choose_small_2.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_choose_small_2@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_choose_small_2@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Icons/icon_choose_small_2.imageset/icon_choose_small_2@2x.png
XQMuse/Assets.xcassets/Icons/icon_choose_small_2.imageset/icon_choose_small_2@3x.png
XQMuse/Assets.xcassets/Icons/icon_freee.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_freee@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_freee@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Icons/icon_freee.imageset/icon_freee@2x.png
XQMuse/Assets.xcassets/Icons/icon_freee.imageset/icon_freee@3x.png
XQMuse/Assets.xcassets/Icons/icon_success_full.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_success_full@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_success_full@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Icons/icon_success_full.imageset/icon_success_full@2x.png
XQMuse/Assets.xcassets/Icons/icon_success_full.imageset/icon_success_full@3x.png
XQMuse/Assets.xcassets/Icons/icon_wallet.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_wallet@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_wallet@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Icons/icon_wallet.imageset/icon_wallet@2x.png
XQMuse/Assets.xcassets/Icons/icon_wallet.imageset/icon_wallet@3x.png
XQMuse/Assets.xcassets/Placeholder/bg_vip.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "bg_vip@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "bg_vip@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Placeholder/bg_vip.imageset/bg_vip@2x.png
XQMuse/Assets.xcassets/Placeholder/bg_vip.imageset/bg_vip@3x.png
XQMuse/Assets.xcassets/Placeholder/bg_vip_u.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "bg_vip_u@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "bg_vip_u@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } XQMuse/Assets.xcassets/Placeholder/bg_vip_u.imageset/bg_vip_u@2x.png
XQMuse/Assets.xcassets/Placeholder/bg_vip_u.imageset/bg_vip_u@3x.png
XQMuse/Config/HoverHeaderFlowLayout.swift
New file @@ -0,0 +1,99 @@ // // HoverHeaderFlowLayout.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import Foundation import UIKit import JQTools /// 悬浮HeaderView class HoverHeaderFlowLayout:UICollectionViewFlowLayout{ var naviHeight:CGFloat = JQ_NavBarHeight//默认分组停放高度 override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { //UICollectionViewLayoutAttributes:我称它为collectionView中的item(包括cell和header、footer这些)的结构信息 //截取到父类所返回的数组(里面放的是当前屏幕所能展示的item的结构信息),并转化成不可变数组 var superArray = super.layoutAttributesForElements(in: rect) //创建存索引的数组,无符号(正整数),无序(不能通过下标取值),不可重复(重复的话会自动过滤) let noneHeaderSections=NSMutableIndexSet(); for attributes:UICollectionViewLayoutAttributes in superArray! { //如果当前的元素分类是一个cell,将cell所在的分区section加入数组,重复的话会自动过滤 if attributes.representedElementCategory == .cell{ noneHeaderSections.add(attributes.indexPath.section) } } //遍历superArray,将当前屏幕中拥有的header的section从数组中移除,得到一个当前屏幕中没有header的section数组 //正常情况下,随着手指往上移,header脱离屏幕会被系统回收而cell尚在,也会触发该方法 for attributes:UICollectionViewLayoutAttributes in superArray! { //如果当前的元素是一个header,将header所在的section从数组中移除 if attributes.representedElementKind == UICollectionView.elementKindSectionHeader { noneHeaderSections.remove(attributes.indexPath.section) } } //遍历当前屏幕中没有header的section数组 noneHeaderSections .enumerate({ (idx, obj) -> Void in //取到当前section中第一个item的indexPath let indexPath = NSIndexPath(item: 0, section: idx) let attributes=self.layoutAttributesForSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, at: indexPath as IndexPath) //如果当前分区确实有因为离开屏幕而被系统回收的header if attributes != nil { //将该header结构信息重新加入到superArray中去 superArray?.append(attributes!) } }) //遍历superArray,改变header结构信息中的参数,使它可以在当前section还没完全离开屏幕的时候一直显示 for attributes:UICollectionViewLayoutAttributes in superArray! { //如果当前item是header if attributes.representedElementKind == UICollectionView.elementKindSectionHeader { //得到当前header所在分区的cell的数量 let numberOfItemsInSection=self.collectionView!.numberOfItems(inSection: attributes.indexPath.section) //取到当前section中第一个item的indexPath let firstItemIndexPath = NSIndexPath(item: 0, section: attributes.indexPath.section) //得到最后一个item的indexPath let lastItemIndexPath = NSIndexPath(item: max(0, numberOfItemsInSection-1), section: attributes.indexPath.section) //得到第一个item和最后一个item的结构信息 var firstItemAttributes, lastItemAttributes:UICollectionViewLayoutAttributes if numberOfItemsInSection>0 { //cell有值,则获取第一个cell和最后一个cell的结构信息 firstItemAttributes=self.layoutAttributesForItem(at: firstItemIndexPath as IndexPath)! lastItemAttributes=self.layoutAttributesForItem(at: lastItemIndexPath as IndexPath)! }else{ //cell没值,就新建一个UICollectionViewLayoutAttributes firstItemAttributes=UICollectionViewLayoutAttributes() //然后模拟出在当前分区中的唯一一个cell,cell在header的下面,高度为0,还与header隔着可能存在的sectionInset的top let y=attributes.frame.maxY + sectionInset.top firstItemAttributes.frame=CGRect(x: 0, y: y, width: 0, height: 0) //因为只有一个cell,所以最后一个cell等于第一个cell lastItemAttributes=firstItemAttributes; } //获取当前header的frame var rect=attributes.frame; //当前的滑动距离 + 因为导航栏产生的偏移量,默认为0(如果app需求不同,需自己设置) let offset=(self.collectionView?.contentOffset.y)! + naviHeight //第一个cell的y值 - 当前header的高度 - 可能存在的sectionInset的top let headerY=firstItemAttributes.frame.origin.y-rect.size.height-sectionInset.top //哪个大取哪个,保证header悬停 //针对当前header基本上都是offset更加大,针对下一个header则会是headerY大,各自处理 let maxY=max(offset, headerY) //最后一个cell的y值 + 最后一个cell的高度 + 可能存在的sectionInset的bottom - 当前header的高度 //当当前section的footer或者下一个section的header接触到当前header的底部,计算出的headerMissingY即为有效值 let headerMissingY = lastItemAttributes.frame.maxY + sectionInset.bottom - rect.size.height; //给rect的y赋新值,因为在最后消失的临界点要跟谁消失,所以取小 rect.origin.y=min(maxY, headerMissingY) //给header的结构信息的frame重新赋值 attributes.frame=rect //如果按照正常情况下,header离开屏幕被系统回收,而header的层次关系又与cell相等,如果不去理会,会出现cell在header上面的情况 //通过打印可以知道cell的层次关系zIndex数值为0,我们可以将header的zIndex设置成1,如果不放心,也可以将它设置成非常大,这里随便填了个7 attributes.zIndex=7 } } return superArray } //return true;表示一旦滑动就实时调用上面这个layoutAttributesForElementsInRect:方法 override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { return true } } XQMuse/Root/Course/CCell/CourseOfficalCommendTopCCell.swift
New file @@ -0,0 +1,17 @@ // // CourseOfficalCommendTopCCell.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit class CourseOfficalCommendTopCCell: UICollectionViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } } XQMuse/Root/Course/CCell/CourseOfficalCommendTopCCell.xib
New file @@ -0,0 +1,25 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_CourseOfficalCommendTopCCell" id="gTV-IL-0wX" customClass="CourseOfficalCommendTopCCell" customModule="XQMuse" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="328" height="269"/> <autoresizingMask key="autoresizingMask"/> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <rect key="frame" x="0.0" y="0.0" width="328" height="269"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> </view> <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/> <size key="customSize" width="328" height="269"/> <point key="canvasLocation" x="293.12977099236639" y="97.535211267605632"/> </collectionViewCell> </objects> </document> XQMuse/Root/Course/CourseVC.swift
@@ -6,24 +6,149 @@ // import UIKit import SPPageMenu import JQTools import FFPage class CourseVC: BaseVC { private(set) var pageMenu:SPPageMenu = { let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) // 追踪线 pageMenu.trackerWidth = 27.5 pageMenu.setTrackerHeight(11, cornerRadius:0) pageMenu.trackerFollowingMode = .always pageMenu.contentInset = UIEdgeInsets(top: 0, left: 19.5, bottom: 15, right: 19.5) pageMenu.setItems(["官方推荐","导师专栏"], selectedItemIndex: 0) pageMenu.backgroundColor = UIColor(hexString: "#F0F0F0") pageMenu.tracker.image = UIImage(named: "icon_unline") pageMenu.tracker.backgroundColor = .clear // 分割线 pageMenu.dividingLine.backgroundColor = .clear pageMenu.dividingLineHeight = 1 // item pageMenu.spacing = 27.0 pageMenu.permutationWay = .scrollAdaptContent // 字体 pageMenu.selectedItemTitleFont = Def_SourceHanSansCN_Regular(fontSize: 21) pageMenu.unSelectedItemTitleFont = Def_SourceHanSansCN_Regular(fontSize: 16) // 颜色 pageMenu.selectedItemTitleColor = UIColor(hexStr: "#252A23") pageMenu.unSelectedItemTitleColor = UIColor(hexStr: "#A1A1A1") return pageMenu }() lazy var pageViewController:FFPageViewController = { let pageVC = FFPageViewController() pageVC.view.backgroundColor = .clear pageVC.scrollview.backgroundColor = .clear pageVC.scrollview.bounces = false return pageVC }() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func setUI() { super.setUI() let titleView = UIView() titleView.frame = CGRect(x: 0, y: 0, width: 100, height: 40) let titleL = UILabel() titleL.font = Def_SourceHanSansCN_Regular(fontSize: 21) titleL.text = "心泉课程" titleL.textAlignment = .center titleL.textColor = UIColor(hexStr: "#252A23") titleL.frame = CGRect(x: 0, y: 0, width: 100, height: 19) /* // MARK: - Navigation let subTitleL = UILabel() subTitleL.font = Def_Agenda_Light(fontSize: 8) subTitleL.text = "XIN QUAN" subTitleL.textAlignment = .center subTitleL.textColor = UIColor(hexStr: "#252A23") subTitleL.frame = CGRect(x: 0, y: 20, width: 100, height: 19) // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ titleView.addSubview(titleL) titleView.addSubview(subTitleL) navigationItem.titleView = titleView let search = UIButton(type: .custom) search.setImage(UIImage(named: "btn_search"), for: .normal) search.addTarget(self, action: #selector(searchAction), for: .touchUpInside) search.bounds = CGRect(origin: .zero, size:CGSize(width: 50, height: 30)) navigationItem.leftBarButtonItem = UIBarButtonItem(customView: search) let voices = UIButton(type: .custom) voices.setImage(UIImage(named: "btn_voices"), for: .normal) voices.addTarget(self, action: #selector(settingvoiceAction), for: .touchUpInside) voices.bounds = CGRect(origin: .zero, size:CGSize(width: 50, height: 30)) navigationItem.rightBarButtonItem = UIBarButtonItem(customView: voices) pageMenu.delegate = self view.addSubview(pageMenu) pageMenu.snp.makeConstraints { make in make.left.right.equalToSuperview() make.height.equalTo(73.5) make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top) } view.addSubview(pageViewController.view) pageViewController.view.backgroundColor = .clear pageViewController.delegate = self pageViewController.view.snp.makeConstraints { make in make.top.equalTo(pageMenu.snp.bottom) make.left.right.bottom.equalToSuperview() } } @objc func searchAction(){ let vc = SearchVC() push(vc: vc) } @objc func settingvoiceAction(){ let vc = BackgroundVoiceVC() push(vc: vc) } } extension CourseVC:SPPageMenuDelegate{ func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { pageViewController.scroll(toPage: index, animation: true) } } extension CourseVC:FFPageViewControllerDelegate{ func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { pageMenu.selectedItemIndex = currentPage } func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { return 2 } func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { if page == 0{ return CourseVCOfficalCommentVC() } if page == 1{ return CourseVCTeacherSpecialVC() } return UIViewController() } } XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
New file @@ -0,0 +1,102 @@ // // CourseVCOfficalCommentVC.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class CourseVCOfficalCommentVC: BaseVC { private var collectionView:UICollectionView! private var titleItems = [TitleItem]() override func viewDidLoad() { super.viewDidLoad() titleItems.append(TitleItem(title: "新手冥想指南", subTitle: "Meditation guide")) titleItems.append(TitleItem(title: "推荐课程", subTitle: "与内心的宁静与喜悦入睡")) } override func setUI() { super.setUI() view.backgroundColor = UIColor(hexString: "#F0F0F0") let layout = UICollectionViewFlowLayout() collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) collectionView.delegate = self collectionView.dataSource = self collectionView.contentInset = UIEdgeInsets(top: 0, left: 19, bottom: 0, right: 19) collectionView.register(UINib(nibName: "HomeRelaxBanner_2_CCell", bundle: nil), forCellWithReuseIdentifier: "_HomeRelaxBanner_2_CCell") collectionView.register(UINib(nibName: "CourseOfficalCommendTopCCell", bundle: nil), forCellWithReuseIdentifier: "_CourseOfficalCommendTopCCell") collectionView.register(HomeHeaderView_1.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header") view.addSubview(collectionView) collectionView.snp.makeConstraints { make in make.edges.equalToSuperview() } } } extension CourseVCOfficalCommentVC:UICollectionViewDelegate & UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { if kind == UICollectionView.elementKindSectionHeader{ let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath) as! HomeHeaderView_1 let m = titleItems[indexPath.section] headerView.setTitle(m.title, subTitle: m.subTitle) return headerView } return UICollectionReusableView() } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if indexPath.section == 0{ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CourseOfficalCommendTopCCell", for: indexPath) as! CourseOfficalCommendTopCCell cell.backgroundColor = .jq_randomColor return cell } let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell cell.backgroundColor = .jq_randomColor return cell } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { if section == 0{ return 1 } return 20 } func numberOfSections(in collectionView: UICollectionView) -> Int { return titleItems.count } } extension CourseVCOfficalCommentVC:UICollectionViewDelegateFlowLayout{ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if indexPath.section == 0{ return CGSize(width: JQ_ScreenW, height: 421) } let w = (JQ_ScreenW - 19 * 2 - 14) / 2 return CGSize(width: w, height: w * 1.314) } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return 14 } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return 14 } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { return CGSize(width: JQ_ScreenW, height: 80.5) } } XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
New file @@ -0,0 +1,30 @@ // // CourseVCTeacherSpecialVC.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class CourseVCTeacherSpecialVC: BaseVC { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .jq_randomColor } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ } XQMuse/Root/Home/CCell/HomeRelaxBanner_2_1_CCell.swift
New file @@ -0,0 +1,33 @@ // // HomeRelaxBanner_2_1_CCell.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class HomeRelaxBanner_2_1_CCell: UICollectionViewCell { @IBOutlet weak var view_text_bg: UIView! override func awakeFromNib() { super.awakeFromNib() // Initialization code jq_cornerRadius = 10 let blurEffect = UIBlurEffect(style: .light) let visualEffectView = UIVisualEffectView(effect: blurEffect) view_text_bg.addSubview(visualEffectView) visualEffectView.snp.makeConstraints { make in make.edges.equalToSuperview() } visualEffectView.alpha = 0.7 view_text_bg.sendSubviewToBack(visualEffectView) visualEffectView.layer.masksToBounds = true } } XQMuse/Root/Home/CCell/HomeRelaxBanner_2_1_CCell.xib
New file @@ -0,0 +1,99 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_HomeRelaxBanner_2_1_CCell" id="gTV-IL-0wX" customClass="HomeRelaxBanner_2_1_CCell" customModule="XQMuse" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="160" height="196"/> <autoresizingMask key="autoresizingMask"/> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <rect key="frame" x="0.0" y="0.0" width="160" height="196"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="VwD-36-ent"> <rect key="frame" x="0.0" y="0.0" width="160" height="196"/> </imageView> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nyj-tV-0t4"> <rect key="frame" x="0.0" y="146" width="160" height="50"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6md-5M-Pce"> <rect key="frame" x="20" y="5.9999999999999991" width="13" height="10.666666666666664"/> <constraints> <constraint firstAttribute="height" constant="10.57" id="b4q-6z-Gno"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EeQ-hi-VEz"> <rect key="frame" x="20" y="22" width="89" height="10.666666666666664"/> <constraints> <constraint firstAttribute="height" constant="10.57" id="ma3-Tn-T3O"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="8"/> <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <nil key="highlightedColor"/> </label> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_use_small" translatesAutoresizingMaskIntoConstraints="NO" id="Y7f-aB-0R5"> <rect key="frame" x="119" y="22" width="10" height="10.666666666666664"/> <constraints> <constraint firstAttribute="width" constant="10" id="3we-wk-eag"/> <constraint firstAttribute="height" constant="10.5" id="T4v-eM-jjx"/> </constraints> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="1000" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wxc-EY-qwU"> <rect key="frame" x="131" y="22.666666666666657" width="6" height="9.6666666666666643"/> <fontDescription key="fontDescription" type="system" pointSize="8"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/> <nil key="highlightedColor"/> </label> </subviews> <constraints> <constraint firstAttribute="trailing" secondItem="Wxc-EY-qwU" secondAttribute="trailing" constant="23" id="1lo-tj-hSD"/> <constraint firstItem="Y7f-aB-0R5" firstAttribute="leading" secondItem="EeQ-hi-VEz" secondAttribute="trailing" constant="10" id="6Ta-sO-wtF"/> <constraint firstItem="Wxc-EY-qwU" firstAttribute="leading" secondItem="Y7f-aB-0R5" secondAttribute="trailing" constant="2" id="HlL-mC-Zj3"/> <constraint firstItem="6md-5M-Pce" firstAttribute="top" secondItem="nyj-tV-0t4" secondAttribute="top" constant="6" id="KXL-JH-Ymd"/> <constraint firstItem="Wxc-EY-qwU" firstAttribute="centerY" secondItem="EeQ-hi-VEz" secondAttribute="centerY" id="Pau-3T-hlR"/> <constraint firstItem="Y7f-aB-0R5" firstAttribute="centerY" secondItem="EeQ-hi-VEz" secondAttribute="centerY" id="Te3-Aw-qID"/> <constraint firstItem="EeQ-hi-VEz" firstAttribute="top" secondItem="6md-5M-Pce" secondAttribute="bottom" constant="5.5" id="TwN-Dx-nby"/> <constraint firstItem="6md-5M-Pce" firstAttribute="leading" secondItem="nyj-tV-0t4" secondAttribute="leading" constant="20" id="UZ1-SQ-4vN"/> <constraint firstItem="EeQ-hi-VEz" firstAttribute="leading" secondItem="6md-5M-Pce" secondAttribute="leading" id="qrg-fN-GGz"/> <constraint firstAttribute="height" constant="50" id="tml-hU-Ojf"/> </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_freee" translatesAutoresizingMaskIntoConstraints="NO" id="C5o-Fs-4Xu"> <rect key="frame" x="11" y="9" width="50" height="18"/> </imageView> </subviews> </view> <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/> <constraints> <constraint firstAttribute="bottom" secondItem="nyj-tV-0t4" secondAttribute="bottom" id="6kR-m6-W7L"/> <constraint firstItem="VwD-36-ent" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="6q4-UC-TbP"/> <constraint firstItem="nyj-tV-0t4" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="HsY-aP-b2m"/> <constraint firstItem="C5o-Fs-4Xu" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="11" id="LW9-j0-pdo"/> <constraint firstItem="C5o-Fs-4Xu" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="9" id="M5Z-Od-Ixc"/> <constraint firstAttribute="trailing" secondItem="VwD-36-ent" secondAttribute="trailing" id="eMF-Er-Mtm"/> <constraint firstItem="VwD-36-ent" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="gba-Nk-kGk"/> <constraint firstAttribute="trailing" secondItem="nyj-tV-0t4" secondAttribute="trailing" id="oZN-uZ-l0V"/> <constraint firstAttribute="bottom" secondItem="VwD-36-ent" secondAttribute="bottom" id="p7n-UX-5N7"/> </constraints> <size key="customSize" width="160" height="196"/> <connections> <outlet property="view_text_bg" destination="nyj-tV-0t4" id="Lef-w5-fi6"/> </connections> <point key="canvasLocation" x="164.8854961832061" y="71.83098591549296"/> </collectionViewCell> </objects> <resources> <image name="icon_freee" width="50" height="18"/> <image name="icon_use_small" width="10" height="10.666666984558105"/> </resources> </document> XQMuse/Root/Home/CCell/HomeRelaxBanner_2_CCell.xib
@@ -69,10 +69,6 @@ </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_vip" translatesAutoresizingMaskIntoConstraints="NO" id="yBF-fO-fwz"> <rect key="frame" x="14.666666666666666" y="7.6666666666666661" width="21.333333333333336" height="21.333333333333336"/> <constraints> <constraint firstAttribute="width" constant="21.5" id="bKV-6r-xqd"/> <constraint firstAttribute="height" constant="21.5" id="puY-wU-5SI"/> </constraints> </imageView> </subviews> </view> XQMuse/Root/Home/CCell/Home_Style_4_Inner_1_CCell.swift
New file @@ -0,0 +1,20 @@ // // Home_Style_4_Inner_1_CCell.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class Home_Style_4_Inner_1_CCell: UICollectionViewCell { @IBOutlet weak var view_shadow: UIView! override func awakeFromNib() { super.awakeFromNib() view_shadow.jq_gradientColor(colorArr: [UIColor.black.withAlphaComponent(0.2).cgColor,UIColor.clear.cgColor], cornerRadius: 0, startPoint: CGPoint(x: 1, y: 1), endPoint: CGPoint(x: 1, y: 0), bounds: nil, locations: nil) } } XQMuse/Root/Home/CCell/Home_Style_4_Inner_1_CCell.xib
New file @@ -0,0 +1,91 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_Home_Style_4_Inner_1_CCell" id="gTV-IL-0wX" customClass="Home_Style_4_Inner_1_CCell" customModule="XQMuse" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="413" height="265"/> <autoresizingMask key="autoresizingMask"/> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <rect key="frame" x="0.0" y="0.0" width="413" height="265"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="j7d-BF-xYH"> <rect key="frame" x="0.0" y="255.66666666666666" width="413" height="9.333333333333286"/> <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="0.45000000000000001" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="9.5" id="wsl-qN-1LP"/> </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ajx-e3-nPT"> <rect key="frame" x="0.0" y="0.0" width="413" height="255.66666666666666"/> </imageView> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="all-AA-1bU"> <rect key="frame" x="0.0" y="155.66666666666666" width="413" height="100"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_pay_s" translatesAutoresizingMaskIntoConstraints="NO" id="blS-wb-4tS"> <rect key="frame" x="24" y="58.000000000000007" width="14.666666666666664" height="18.333333333333336"/> <constraints> <constraint firstAttribute="height" constant="18.5" id="ENQ-ju-UWO"/> <constraint firstAttribute="width" constant="14.5" id="cuz-Sz-rLa"/> </constraints> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tDO-qY-aGP"> <rect key="frame" x="43" y="53.333333333333343" width="42" height="20.333333333333329"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="can be switched on" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NTV-9E-3YX"> <rect key="frame" x="43" y="77.666666666666686" width="94" height="12"/> <fontDescription key="fontDescription" type="system" pointSize="10"/> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="NTV-9E-3YX" firstAttribute="leading" secondItem="tDO-qY-aGP" secondAttribute="leading" id="51K-EF-Rvn"/> <constraint firstItem="blS-wb-4tS" firstAttribute="leading" secondItem="all-AA-1bU" secondAttribute="leading" constant="24" id="Lqw-Rn-RNa"/> <constraint firstItem="NTV-9E-3YX" firstAttribute="top" secondItem="tDO-qY-aGP" secondAttribute="bottom" constant="4" id="ZMe-Wi-gxX"/> <constraint firstItem="blS-wb-4tS" firstAttribute="top" secondItem="tDO-qY-aGP" secondAttribute="top" constant="4.5" id="bis-tD-VTd"/> <constraint firstAttribute="height" constant="100" id="j9f-27-wVi"/> <constraint firstItem="tDO-qY-aGP" firstAttribute="leading" secondItem="blS-wb-4tS" secondAttribute="trailing" constant="4.5" id="mdv-eZ-D7N"/> <constraint firstAttribute="bottom" secondItem="blS-wb-4tS" secondAttribute="bottom" constant="23.5" id="o7z-53-St0"/> </constraints> </view> </subviews> </view> <constraints> <constraint firstItem="j7d-BF-xYH" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="2GG-1b-kYs"/> <constraint firstItem="ajx-e3-nPT" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="3RP-eN-eVJ"/> <constraint firstAttribute="trailing" secondItem="j7d-BF-xYH" secondAttribute="trailing" id="8dC-va-Zn5"/> <constraint firstItem="j7d-BF-xYH" firstAttribute="top" secondItem="ajx-e3-nPT" secondAttribute="bottom" id="AvF-8C-wci"/> <constraint firstItem="all-AA-1bU" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="NnN-W9-Grf"/> <constraint firstAttribute="trailing" secondItem="all-AA-1bU" secondAttribute="trailing" id="QUs-lC-uZ4"/> <constraint firstItem="ajx-e3-nPT" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="pof-Re-QZd"/> <constraint firstAttribute="bottom" secondItem="j7d-BF-xYH" secondAttribute="bottom" id="weD-8Z-X7c"/> <constraint firstItem="j7d-BF-xYH" firstAttribute="top" secondItem="all-AA-1bU" secondAttribute="bottom" id="x5m-nj-8va"/> <constraint firstAttribute="trailing" secondItem="ajx-e3-nPT" secondAttribute="trailing" id="yxG-4V-MPe"/> </constraints> <size key="customSize" width="413" height="265"/> <connections> <outlet property="view_shadow" destination="all-AA-1bU" id="JuG-YX-jmu"/> </connections> <point key="canvasLocation" x="416.03053435114504" y="96.126760563380287"/> </collectionViewCell> </objects> <resources> <image name="icon_pay_s" width="14.666666984558105" height="18.666666030883789"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> XQMuse/Root/Home/HomeVC.swift
@@ -27,7 +27,7 @@ titleItems.append(TitleItem(title: "新手冥想指南", subTitle: "Meditation guide")) titleItems.append(TitleItem(title: "放松助眠", subTitle: "与内心的宁静与喜悦入睡",hasMore:true)) titleItems.append(TitleItem(title: "放松助眠", subTitle: "与内心的宁静与喜悦入睡",hasMore:true)) titleItems.append(TitleItem(title: "放松助眠", subTitle: "与内心的宁静与喜悦入睡",hasMore:true)) } override func setUI() { @@ -120,9 +120,29 @@ // present(nav, animated: true) } @objc func jumpMoreAction(_ sender:UIButton){ switch sender.tag { case 201: //跳转计划引导 break default: let topTitle = titleItems[sender.tag - 200].title let vc = HomeItemListVC(topTitle: topTitle, id: 0) push(vc: vc) } } } extension HomeVC:UITableViewDelegate & UITableViewDataSource{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if indexPath.section == 2{ let vc = HomeTyroGuideVC() push(vc: vc) } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if indexPath.section == 0{ let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_1_TCell") as! Home_Style_1_TCell @@ -130,7 +150,8 @@ } if indexPath.section == 1{ let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_2_TCell") as! Home_Style_2_TCell let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_4_TCell") as! Home_Style_4_TCell cell.style = .style1 return cell } @@ -147,11 +168,13 @@ if indexPath.section == 4{ let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_4_TCell") as! Home_Style_4_TCell cell.style = .style2 return cell } if indexPath.section == 5{ let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_4_TCell") as! Home_Style_4_TCell cell.style = .style2 return cell } @@ -187,6 +210,8 @@ let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "_HomeHeaderView") as! HomeHeaderView headerView.setTitle(titleItems[section].title, subTitle: titleItems[section].subTitle) headerView.btn_more.isHidden = !titleItems[section].hasMore headerView.btn_more.tag = section + 200 headerView.btn_more.addTarget(self, action: #selector(jumpMoreAction(_:)), for: .touchUpInside) if section == 1{ headerView.btn_more.setImage(UIImage(named: "btn_more"), for: .normal) XQMuse/Root/Home/TCell/CommentUserInputContentTCell.swift
New file @@ -0,0 +1,24 @@ // // CommentUserInputContentTCell.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit class CommentUserInputContentTCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() selectionStyle = .none } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } } XQMuse/Root/Home/TCell/CommentUserInputContentTCell.xib
New file @@ -0,0 +1,57 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="264" id="KGk-i7-Jjw" customClass="CommentUserInputContentTCell" customModule="XQMuse" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="455" height="264"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> <rect key="frame" x="0.0" y="0.0" width="455" height="264"/> <autoresizingMask key="autoresizingMask"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="JzV-uN-yIi"> <rect key="frame" x="21.999999999999996" y="28.999999999999996" width="38.666666666666657" height="38.666666666666657"/> <color key="backgroundColor" systemColor="secondarySystemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="38.5" id="PhY-mQ-I2e"/> <constraint firstAttribute="width" constant="38.5" id="z6u-Bo-dOZ"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="19.25"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="d4h-Q7-y18"> <rect key="frame" x="81" y="28" width="42" height="21"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <fontDescription key="fontDescription" type="system" pointSize="17"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> </subviews> <constraints> <constraint firstItem="JzV-uN-yIi" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="22" id="HkZ-1d-3HB"/> <constraint firstItem="JzV-uN-yIi" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="29" id="fxZ-lQ-vtI"/> </constraints> </tableViewCellContentView> <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> <point key="canvasLocation" x="183.96946564885496" y="97.183098591549296"/> </tableViewCell> </objects> <resources> <systemColor name="secondarySystemBackgroundColor"> <color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </systemColor> </resources> </document> XQMuse/Root/Home/TCell/Home_Style_3_TCell.swift
@@ -39,6 +39,18 @@ cell.contentView.backgroundColor = .jq_randomColor return cell } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if indexPath.row == 0{ let vc = PaymentOrderVC() JQ_currentViewController().jq_push(vc: vc) } if indexPath.row == 1{ let vc = VIPCenterVC() JQ_currentViewController().jq_push(vc: vc) } } } extension Home_Style_3_TCell:UICollectionViewDelegateFlowLayout{ XQMuse/Root/Home/TCell/Home_Style_4_TCell.swift
@@ -8,8 +8,15 @@ import UIKit import JQTools enum Home_Style_4_Style{ case style1 case style2 } class Home_Style_4_TCell: UITableViewCell { var style:Home_Style_4_Style! @IBOutlet weak var collectionView: UICollectionView! override func awakeFromNib() { @@ -17,20 +24,35 @@ collectionView.delegate = self collectionView.dataSource = self collectionView.isPagingEnabled = true collectionView.register(UINib(nibName: "Home_Style_4_Inner_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_Home_Style_4_Inner_1_CCell") collectionView.register(UINib(nibName: "Home_Style_4_Inner_CCell", bundle: nil), forCellWithReuseIdentifier: "_Home_Style_4_Inner_CCell") collectionView.showsHorizontalScrollIndicator = false } } extension Home_Style_4_TCell:UICollectionViewDelegate & UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let detailVC = HomeItemDetailVC() JQ_currentViewController().jq_push(vc: detailVC) } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 8 return 3 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if style == .style1{ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Home_Style_4_Inner_1_CCell", for: indexPath) as! Home_Style_4_Inner_1_CCell return cell } let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Home_Style_4_Inner_CCell", for: indexPath) as! Home_Style_4_Inner_CCell return cell if style == .style2{ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Home_Style_4_Inner_CCell", for: indexPath) as! Home_Style_4_Inner_CCell return cell } return UICollectionViewCell() } } @@ -43,6 +65,14 @@ } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.734) if style == .style2{ return CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.734) } if style == .style1{ return CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.551) } return .zero } } XQMuse/Root/Home/VC/CommentListVC.swift
New file @@ -0,0 +1,139 @@ // // CommentListVC.swift // XQMuse // // Created by 无故事王国 on 2024/8/14. // import UIKit import QMUIKit import JQTools class CommentListVC: BaseVC { @IBOutlet weak var view_content: UIView! @IBOutlet weak var tf_input: QMUITextField! @IBOutlet weak var label_questionNum: UILabel! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var cons_height: NSLayoutConstraint! override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .clear tf_input.tintColor = Def_ThemeColor tableView.separatorStyle = .none tableView.delegate = self tableView.dataSource = self if #available(iOS 15.0, *) { tableView.sectionHeaderTopPadding = 0 } cons_height.constant = JQ_ScreenH - 151 - JQ_NavBarHeight - UIDevice.jq_safeEdges.top - UIDevice.jq_safeEdges.bottom tableView.register(CommentCommentHeaderView.self, forHeaderFooterViewReuseIdentifier: "_header") tableView.register(CommentReplyTCell.self, forCellReuseIdentifier: "_CommentReplyTCell") } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() view_content.jq_cornerPart(byRoundingCorners: [.topLeft,.topRight], radii: 20) } @IBAction func closeAction(_ sender: UIButton) { self.dismiss(animated: true) } @IBAction func sendAction(_ sender: UIButton) { } @objc func longPressAction(_ gesture:UITapGestureRecognizer){ if gesture.state == .began { // 当长按开始时,你可以获取到 cell 的信息 if let headerView = gesture.view as? CommentCommentHeaderView { let index = headerView.tag - 1000 ChooseOptView.show(titles: ["举报提问","拉入黑名单"]) { _ in } } } } } extension CommentListVC:UITableViewDelegate & UITableViewDataSource{ func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "_header") as! CommentCommentHeaderView headerView.tag = section + 1000 if headerView.gestureRecognizers == nil{ let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPressAction)) longPress.minimumPressDuration = 0.5 headerView.addGestureRecognizer(longPress) } return headerView } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return UITableView.automaticDimension } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 0.001 } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableView.automaticDimension } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCell(withIdentifier: "_CommentReplyTCell", for: indexPath) as? CommentReplyTCell cell?.setText(text: "助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。助力13亿女性及其家庭生命蜕变,幸福重生的伟大愿景。") return cell! } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } func numberOfSections(in tableView: UITableView) -> Int { return 2 } } class CommentReplyTCell:UITableViewCell{ private lazy var label_content:UILabel = { let label = UILabel() label.textColor = UIColor(hexString: "#383838") label.numberOfLines = 0 return label }() override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: .default, reuseIdentifier: reuseIdentifier) if !self.contentView.subviews.contains(label_content){ self.selectionStyle = .none self.contentView.addSubview(label_content) label_content.snp.makeConstraints { make in make.top.equalToSuperview().offset(5) make.left.equalTo(72.5) make.right.equalTo(-28.5) make.height.greaterThanOrEqualTo(0) make.bottom.equalToSuperview().offset(0).priority(800) } } } func setText(text:String){ label_content.attributedText = AttributedStringbuilder().add(string: "平台回复:", withFont: .systemFont(ofSize: 12.5, weight: .bold), withColor: UIColor(hexString: "#383838")!,lineSpace: 5) .add(string: text, withFont: .systemFont(ofSize: 12.5), withColor: UIColor(hexString: "#383838")!,lineSpace: 5).mutableAttributedString } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } XQMuse/Root/Home/VC/CommentListVC.xib
New file @@ -0,0 +1,165 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CommentListVC" customModule="XQMuse" customModuleProvider="target"> <connections> <outlet property="cons_height" destination="Jt5-vL-Xy7" id="erW-Ls-spJ"/> <outlet property="label_questionNum" destination="tJL-SB-mev" id="hHc-29-HND"/> <outlet property="tableView" destination="3LK-mI-8Z0" id="B19-t5-s0l"/> <outlet property="tf_input" destination="p6F-O6-dow" id="j8I-wI-R2G"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> <outlet property="view_content" destination="0U5-hZ-s5i" id="uKy-gK-PdH"/> </connections> </placeholder> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZLl-N5-S08"> <rect key="frame" x="0.0" y="729" width="393" height="123"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zMX-CZ-PZh"> <rect key="frame" x="295.66666666666669" y="18.666666666666629" width="53" height="29"/> <color key="backgroundColor" red="0.59999999999999998" green="0.71372549019607845" blue="0.51372549019607838" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="29" id="7zY-nc-cNb"/> <constraint firstAttribute="width" constant="53" id="h5X-iG-2KS"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="12"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="发布"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="14.5"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="sendAction:" destination="-1" eventType="touchUpInside" id="nCB-YR-oTw"/> </connections> </button> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Stl-8O-SW3"> <rect key="frame" x="48.999999999999986" y="18.666666666666629" width="232.66666666666663" height="29"/> <subviews> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="留下你的精彩评论吧" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="p6F-O6-dow" customClass="QMUITextField"> <rect key="frame" x="16" y="0.0" width="208.66666666666666" height="29"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/> <textInputTraits key="textInputTraits"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor"> <color key="value" red="0.76470588235294112" green="0.76470588235294112" blue="0.76470588235294112" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </textField> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="trailing" secondItem="p6F-O6-dow" secondAttribute="trailing" constant="8" id="8TK-xK-ojU"/> <constraint firstItem="p6F-O6-dow" firstAttribute="top" secondItem="Stl-8O-SW3" secondAttribute="top" id="Azz-Ud-JFW"/> <constraint firstAttribute="bottom" secondItem="p6F-O6-dow" secondAttribute="bottom" id="Ozg-qC-Mq4"/> <constraint firstAttribute="height" constant="29" id="azq-2q-uXC"/> <constraint firstItem="p6F-O6-dow" firstAttribute="leading" secondItem="Stl-8O-SW3" secondAttribute="leading" constant="16" id="vwq-Ag-TCy"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> <color key="value" red="0.76470588240000004" green="0.76470588240000004" blue="0.76470588240000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> <real key="value" value="0.5"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="14.5"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="zMX-CZ-PZh" firstAttribute="centerY" secondItem="Stl-8O-SW3" secondAttribute="centerY" id="7Js-Xb-w0K"/> <constraint firstItem="zMX-CZ-PZh" firstAttribute="top" secondItem="ZLl-N5-S08" secondAttribute="top" constant="18.5" id="8hi-C8-9pO"/> <constraint firstAttribute="bottomMargin" secondItem="zMX-CZ-PZh" secondAttribute="bottom" constant="33.5" id="GzM-Ua-Hc9"/> <constraint firstAttribute="trailing" secondItem="zMX-CZ-PZh" secondAttribute="trailing" constant="44.5" id="JTi-St-uAF"/> <constraint firstItem="Stl-8O-SW3" firstAttribute="leading" secondItem="ZLl-N5-S08" secondAttribute="leading" constant="49" id="O3g-0S-qi6"/> <constraint firstItem="zMX-CZ-PZh" firstAttribute="leading" secondItem="Stl-8O-SW3" secondAttribute="trailing" constant="14" id="m88-K6-Hud"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0U5-hZ-s5i"> <rect key="frame" x="0.0" y="329" width="393" height="400"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0条提问" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tJL-SB-mev"> <rect key="frame" x="169.66666666666666" y="24" width="54" height="17"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> <color key="textColor" red="0.2196078431372549" green="0.2196078431372549" blue="0.2196078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zsV-4W-6yf"> <rect key="frame" x="22" y="62" width="349" height="0.6666666666666643"/> <color key="backgroundColor" red="0.81568627450980391" green="0.81568627450980391" blue="0.81568627450980391" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="UcA-2w-8E0"/> </constraints> </view> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WBR-j8-RVW"> <rect key="frame" x="343" y="17.666666666666686" width="30" height="30"/> <constraints> <constraint firstAttribute="width" constant="30" id="1oL-UI-u25"/> <constraint firstAttribute="height" constant="30" id="9ok-sn-Uf8"/> </constraints> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="btn_close_1"/> <connections> <action selector="closeAction:" destination="-1" eventType="touchUpInside" id="fk5-Mx-Y2A"/> </connections> </button> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="grouped" separatorStyle="default" allowsSelection="NO" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="3LK-mI-8Z0"> <rect key="frame" x="0.0" y="62.666666666666686" width="393" height="337.33333333333331"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <inset key="separatorInset" minX="15" minY="0.0" maxX="0.0" maxY="0.0"/> </tableView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="bottom" secondItem="3LK-mI-8Z0" secondAttribute="bottom" id="8bF-fE-Qnl"/> <constraint firstItem="zsV-4W-6yf" firstAttribute="leading" secondItem="0U5-hZ-s5i" secondAttribute="leading" constant="22" id="GYY-md-vcF"/> <constraint firstAttribute="height" constant="400" id="Jt5-vL-Xy7"/> <constraint firstItem="tJL-SB-mev" firstAttribute="top" secondItem="0U5-hZ-s5i" secondAttribute="top" constant="24" id="Pft-fr-Og2"/> <constraint firstAttribute="trailing" secondItem="WBR-j8-RVW" secondAttribute="trailing" constant="20" id="QCa-fd-2CB"/> <constraint firstItem="tJL-SB-mev" firstAttribute="centerX" secondItem="0U5-hZ-s5i" secondAttribute="centerX" id="U0k-kn-jV1"/> <constraint firstAttribute="trailing" secondItem="3LK-mI-8Z0" secondAttribute="trailing" id="etj-p3-kS2"/> <constraint firstAttribute="trailing" secondItem="zsV-4W-6yf" secondAttribute="trailing" constant="22" id="jVv-PN-k4y"/> <constraint firstItem="WBR-j8-RVW" firstAttribute="centerY" secondItem="tJL-SB-mev" secondAttribute="centerY" id="jcE-5f-nbR"/> <constraint firstItem="zsV-4W-6yf" firstAttribute="top" secondItem="tJL-SB-mev" secondAttribute="bottom" constant="21" id="p1i-1u-ria"/> <constraint firstItem="3LK-mI-8Z0" firstAttribute="top" secondItem="zsV-4W-6yf" secondAttribute="bottom" id="q7m-mm-acC"/> <constraint firstItem="3LK-mI-8Z0" firstAttribute="leading" secondItem="0U5-hZ-s5i" secondAttribute="leading" id="sXT-C6-oD6"/> </constraints> </view> </subviews> <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> <constraints> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="ZLl-N5-S08" secondAttribute="trailing" id="D5k-zM-9Qm"/> <constraint firstItem="ZLl-N5-S08" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="FVr-hV-lL4"/> <constraint firstItem="0U5-hZ-s5i" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="MK9-At-Oza"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="0U5-hZ-s5i" secondAttribute="trailing" id="Wzp-bR-aRa"/> <constraint firstAttribute="bottom" secondItem="ZLl-N5-S08" secondAttribute="bottom" id="ZT9-Iu-0bE"/> <constraint firstItem="ZLl-N5-S08" firstAttribute="top" secondItem="0U5-hZ-s5i" secondAttribute="bottom" id="aUb-Le-fpf"/> </constraints> <point key="canvasLocation" x="82" y="21"/> </view> </objects> <resources> <image name="btn_close_1" width="12" height="12"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> XQMuse/Root/Home/VC/HomeItemDetailVC.swift
@@ -23,6 +23,18 @@ title = "心泉·疗愈" } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) //如果从支付过来的,移除支付 navigationController!.viewControllers.removeAll { vc in if vc is PaymentOrderResultVC || vc is PaymentOrderVC{ return true } return false } } override func setUI() { let collect_bitem = UIBarButtonItem(image: UIImage(named: "btn_collect"), style: .plain, target: self, action: #selector(collectionAction)) @@ -59,7 +71,9 @@ } @IBAction func commentAction(_ sender: TapBtn) { let vc = CommentListVC() vc.modalPresentationStyle = .custom present(vc, animated: true) } @IBAction func beLikeAction(_ sender: UIButton) { XQMuse/Root/Home/VC/HomeItemDetailVC.xib
@@ -116,7 +116,8 @@ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OBt-Rv-6FE"> <rect key="frame" x="350.33333333333331" y="55" width="21.666666666666686" height="22"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="btn_like"/> <state key="normal" image="btn_like_u"/> <state key="selected" image="btn_like"/> <connections> <action selector="beLikeAction:" destination="-1" eventType="touchUpInside" id="yQs-VU-v7b"/> </connections> @@ -221,6 +222,7 @@ <resources> <image name="btn_comment" width="18.666666030883789" height="19"/> <image name="btn_like" width="21.666666030883789" height="17"/> <image name="btn_like_u" width="21.666666030883789" height="17"/> <image name="btn_list" width="17" height="13.666666984558105"/> <image name="btn_roll" width="22.666666030883789" height="19.666666030883789"/> <image name="btn_time" width="20.666666030883789" height="20.666666030883789"/> XQMuse/Root/Home/VC/HomeTyroGuideVC.swift
New file @@ -0,0 +1,37 @@ // // HomeTyroGuideVC.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit class HomeTyroGuideVC: BaseVC { var scrollView:UIScrollView! var centerImage:UIImageView! override func viewDidLoad() { super.viewDidLoad() title = "心泉·疗愈" } override func setUI() { super.setUI() scrollView = UIScrollView() scrollView.showsVerticalScrollIndicator = false view.addSubview(scrollView) scrollView.snp.makeConstraints { make in make.edges.equalToSuperview() } centerImage = UIImageView() scrollView.addSubview(centerImage) centerImage.snp.makeConstraints { make in make.edges.equalToSuperview() make.centerX.equalToSuperview() make.height.equalTo(1200) } } } XQMuse/Root/Home/VC/PaymentOrderResultVC.swift
New file @@ -0,0 +1,140 @@ // // PaymentOrderResultVC.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class PaymentOrderResultVC: BaseVC { var collectionView:UICollectionView! private let topView = PaymentOrderResultTopView.jq_loadNibView() // private let shadowView = UIView() override func viewDidLoad() { super.viewDidLoad() title = "支付结果" } override func setUI() { super.setUI() view.backgroundColor = .white let layout = HoverHeaderFlowLayout() let w = (JQ_ScreenW - 18 * 3) / 2 layout.itemSize = CGSize(width: w, height: w * 1.319) layout.headerReferenceSize = CGSize(width: JQ_ScreenW, height: 59) collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) collectionView.backgroundColor = .clear collectionView.delegate = self collectionView.delegate = self collectionView.dataSource = self collectionView.backgroundColor = .white collectionView.contentInset = UIEdgeInsets(top: 298, left: 18, bottom: 0, right: 18) collectionView.register(UINib(nibName: "HomeRelaxBanner_2_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_HomeRelaxBanner_2_1_CCell") collectionView.register(PaymentOrderResultHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header") view.addSubview(collectionView) collectionView.snp.makeConstraints { make in make.edges.equalToSuperview() } view.addSubview(topView) topView.backgroundColor = .clear topView.snp.makeConstraints {[unowned self] make in make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0) make.left.right.equalToSuperview() make.height.equalTo(278) } // view.addSubview(shadowView) // shadowView.backgroundColor = .white // shadowView.snp.makeConstraints {[unowned self] make in // make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0) // make.left.right.equalToSuperview() // make.height.equalTo(30) // } } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // shadowView.jq_gradientColor(colorArr: [UIColor(hexStr: "#F5F5F5").withAlphaComponent(0.15).cgColor,UIColor.clear.cgColor], cornerRadius: 0, startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 1), bounds: CGRect(x: 0, y: 0, width: JQ_ScreenW, height: 30),locations: [0.1,0.9]) } } extension PaymentOrderResultVC:UIScrollViewDelegate{ func scrollViewDidScroll(_ scrollView: UIScrollView) { let v = (scrollView.contentOffset.y) + 298 topView.y = -v } } extension PaymentOrderResultVC:UICollectionViewDelegate & UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 50 } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { // let vc = HomeItemDetailVC() // push(vc: vc) } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_1_CCell", for: indexPath) as! HomeRelaxBanner_2_1_CCell cell.backgroundColor = .jq_randomColor return cell } func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { if kind == UICollectionView.elementKindSectionHeader{ let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath) as! PaymentOrderResultHeaderView return headerView } return UICollectionReusableView() } } class PaymentOrderResultHeaderView:UICollectionReusableView{ override init(frame: CGRect) { super.init(frame: frame) setUI() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setUI(){ backgroundColor = .white let lineView = UIView() lineView.backgroundColor = UIColor(hexString: "#979797")?.withAlphaComponent(0.26) addSubview(lineView) lineView.snp.makeConstraints { make in make.left.equalTo(76) make.right.equalTo(-76) make.height.equalTo(1) make.centerY.equalToSuperview() } let lineLabel = UILabel() lineLabel.text = "猜你喜欢" lineLabel.backgroundColor = .white lineLabel.textAlignment = .center lineLabel.font = .systemFont(ofSize: 14, weight: .medium) lineLabel.textColor = UIColor(hexString: "#3F4343")?.withAlphaComponent(0.79) addSubview(lineLabel) lineLabel.snp.makeConstraints { make in make.center.equalToSuperview() make.width.equalTo(71) make.height.equalTo(20) } } } XQMuse/Root/Home/VC/PaymentOrderResultVC.xib
New file @@ -0,0 +1,22 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <dependencies> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PaymentOrderResultVC" customModuleProvider="target"> <connections> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> </connections> </placeholder> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> </view> </objects> </document> XQMuse/Root/Home/VC/PaymentOrderVC.swift
New file @@ -0,0 +1,49 @@ // // PaymentOrderVC.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import QMUIKit class PaymentOrderVC: BaseVC { @IBOutlet weak var tf_phone: QMUITextField! @IBOutlet weak var label_walletBalance: UILabel! @IBOutlet weak var btn_isreadAgreement: UIButton! override func viewDidLoad() { super.viewDidLoad() title = "确认订单" } override func setUI() { super.setUI() } @IBAction func invateRegisterAction(_ sender: UIButton) { } @IBAction func searchUserAction(_ sender: UIButton) { } @IBAction func readAgreementAction(_ sender: UIButton) { sender.isSelected = !sender.isSelected } @IBAction func webAgreementAction(_ sender: UIButton) { } @IBAction func completeAction(_ sender: UIButton) { let vc = PaymentOrderResultVC() push(vc: vc) } } XQMuse/Root/Home/VC/PaymentOrderVC.xib
New file @@ -0,0 +1,487 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PaymentOrderVC" customModule="XQMuse" customModuleProvider="target"> <connections> <outlet property="btn_isreadAgreement" destination="9jh-cC-nHB" id="kmT-qh-HGA"/> <outlet property="label_walletBalance" destination="W3z-Hl-09j" id="CNw-KV-Uyh"/> <outlet property="tf_phone" destination="W3K-U0-zHA" id="IkD-kf-fwY"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> </connections> </placeholder> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jDI-6t-fTs"> <rect key="frame" x="0.0" y="59" width="393" height="759"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="3me-1I-5oC"> <rect key="frame" x="8" y="14" width="377" height="404.33333333333331"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="H4R-h3-5Ua"> <rect key="frame" x="0.0" y="0.0" width="377" height="331.33333333333331"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8V3-V7-K06"> <rect key="frame" x="0.0" y="0.0" width="377" height="184"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="LBY-Q2-RQA"> <rect key="frame" x="13.666666666666664" y="16" width="87.333333333333343" height="85"/> <color key="backgroundColor" systemColor="separatorColor"/> <constraints> <constraint firstAttribute="width" constant="87.400000000000006" id="aed-zb-a4A"/> <constraint firstAttribute="height" constant="84.900000000000006" id="ggl-aL-eV6"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="10"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="1000" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GMw-pK-u8J"> <rect key="frame" x="120.33333333333334" y="24.666666666666671" width="14.666666666666657" height="19.333333333333329"/> <fontDescription key="fontDescription" type="system" pointSize="16"/> <color key="textColor" red="0.27450980392156865" green="0.27450980392156865" blue="0.27450980392156865" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="疗愈币0" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iyN-A8-Fyo"> <rect key="frame" x="145" y="27.666666666666668" width="218" height="14.333333333333332"/> <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="12"/> <color key="textColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="导师 --" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y7d-Qe-XsO"> <rect key="frame" x="120.33333333333333" y="78" width="39.333333333333329" height="14.333333333333329"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.47058823529411764" green="0.47058823529411764" blue="0.47058823529411764" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="x1" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hW7-II-bKY"> <rect key="frame" x="346.66666666666669" y="78" width="14" height="14.333333333333329"/> <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="12"/> <color key="textColor" red="0.54117647059999996" green="0.68235294120000001" blue="0.39607843139999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gF5-hA-riS"> <rect key="frame" x="13" y="123" width="351" height="0.3333333333333286"/> <color key="backgroundColor" red="0.81568627450980391" green="0.81568627450980391" blue="0.81568627450980391" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="owu-BJ-bUd"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="订单金额" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g8H-Sg-oWt"> <rect key="frame" x="15.000000000000004" y="123.33333333333336" width="57.333333333333343" height="60.666666666666671"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <color key="textColor" red="0.15686274509803921" green="0.15686274509803921" blue="0.15686274509803921" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="疗愈币0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s0D-hY-lov"> <rect key="frame" x="318.66666666666669" y="146.66666666666666" width="47" height="14.333333333333343"/> <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="12"/> <color key="textColor" red="0.15686274509803921" green="0.15686274509803921" blue="0.15686274509803921" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="trailing" secondItem="iyN-A8-Fyo" secondAttribute="trailing" constant="14" id="1Ab-m9-kit"/> <constraint firstItem="iyN-A8-Fyo" firstAttribute="top" secondItem="8V3-V7-K06" secondAttribute="top" constant="27.5" id="1jT-vp-k8O"/> <constraint firstItem="g8H-Sg-oWt" firstAttribute="leading" secondItem="8V3-V7-K06" secondAttribute="leading" constant="15" id="66U-aa-BBJ"/> <constraint firstAttribute="trailing" secondItem="s0D-hY-lov" secondAttribute="trailing" constant="11.5" id="AMo-y5-7xA"/> <constraint firstItem="gF5-hA-riS" firstAttribute="leading" secondItem="8V3-V7-K06" secondAttribute="leading" constant="13" id="CKv-M9-zoV"/> <constraint firstItem="LBY-Q2-RQA" firstAttribute="leading" secondItem="8V3-V7-K06" secondAttribute="leading" constant="13.5" id="EII-gU-Axu"/> <constraint firstItem="GMw-pK-u8J" firstAttribute="top" secondItem="LBY-Q2-RQA" secondAttribute="top" constant="8.5" id="GT6-MO-JEf"/> <constraint firstItem="gF5-hA-riS" firstAttribute="top" secondItem="LBY-Q2-RQA" secondAttribute="bottom" constant="22" id="MNO-Oi-6hN"/> <constraint firstItem="y7d-Qe-XsO" firstAttribute="bottom" secondItem="LBY-Q2-RQA" secondAttribute="bottom" constant="-8.5" id="P9l-wb-EZU"/> <constraint firstItem="s0D-hY-lov" firstAttribute="centerY" secondItem="g8H-Sg-oWt" secondAttribute="centerY" id="Seu-ey-YgT"/> <constraint firstAttribute="height" constant="184" id="Wwm-Xp-ZAb"/> <constraint firstAttribute="trailing" secondItem="gF5-hA-riS" secondAttribute="trailing" constant="13" id="X1m-vX-ke1"/> <constraint firstItem="iyN-A8-Fyo" firstAttribute="leading" secondItem="GMw-pK-u8J" secondAttribute="trailing" constant="10" id="avh-A8-gij"/> <constraint firstItem="LBY-Q2-RQA" firstAttribute="top" secondItem="8V3-V7-K06" secondAttribute="top" constant="16" id="cdP-YT-xpZ"/> <constraint firstAttribute="bottom" secondItem="g8H-Sg-oWt" secondAttribute="bottom" id="eRY-pS-OfM"/> <constraint firstItem="g8H-Sg-oWt" firstAttribute="top" secondItem="gF5-hA-riS" secondAttribute="bottom" id="oPQ-76-UJG"/> <constraint firstItem="hW7-II-bKY" firstAttribute="centerY" secondItem="y7d-Qe-XsO" secondAttribute="centerY" id="ofA-gH-hqR"/> <constraint firstItem="GMw-pK-u8J" firstAttribute="leading" secondItem="LBY-Q2-RQA" secondAttribute="trailing" constant="19.5" id="svq-SW-m5m"/> <constraint firstAttribute="trailing" secondItem="hW7-II-bKY" secondAttribute="trailing" constant="16.5" id="xEi-a8-oiB"/> <constraint firstItem="y7d-Qe-XsO" firstAttribute="leading" secondItem="GMw-pK-u8J" secondAttribute="leading" id="ydi-ue-GMN"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4AR-Ov-N15"> <rect key="frame" x="0.0" y="184" width="377" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qe7-dR-bUh"> <rect key="frame" x="13" y="0.0" width="351" height="0.66666666666666663"/> <color key="backgroundColor" red="0.81568627449999997" green="0.81568627449999997" blue="0.81568627449999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="SWq-R5-MlN"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="好友账号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="C5w-jL-Klr"> <rect key="frame" x="15.000000000000004" y="32.666666666666686" width="57.333333333333343" height="13.333333333333336"/> <constraints> <constraint firstAttribute="height" constant="13.5" id="vK6-2b-dMV"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <color key="textColor" red="0.15686274510000001" green="0.15686274510000001" blue="0.15686274510000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6I2-HS-Bee"> <rect key="frame" x="98.333333333333343" y="20.666666666666689" width="264.66666666666663" height="37.333333333333343"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4Lf-NY-aGs"> <rect key="frame" x="186.33333333333337" y="3.6666666666666288" width="62" height="30"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="查询账号"> <color key="titleColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> <connections> <action selector="searchUserAction:" destination="-1" eventType="touchUpInside" id="tB2-lO-CI9"/> </connections> </button> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入好友手机号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="W3K-U0-zHA" customClass="QMUITextField"> <rect key="frame" x="22.000000000000014" y="0.0" width="142.33333333333337" height="37.333333333333336"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/> <textInputTraits key="textInputTraits" keyboardType="numberPad"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength"> <integer key="value" value="11"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </textField> </subviews> <color key="backgroundColor" red="0.96470588235294119" green="0.96470588235294119" blue="0.96470588235294119" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="bottom" secondItem="W3K-U0-zHA" secondAttribute="bottom" id="4oG-31-jMv"/> <constraint firstAttribute="trailing" secondItem="4Lf-NY-aGs" secondAttribute="trailing" constant="16.5" id="Hb7-iV-iFK"/> <constraint firstAttribute="height" constant="37.5" id="Ys9-7K-SeD"/> <constraint firstItem="4Lf-NY-aGs" firstAttribute="centerY" secondItem="6I2-HS-Bee" secondAttribute="centerY" id="hSe-2O-7A4"/> <constraint firstItem="W3K-U0-zHA" firstAttribute="top" secondItem="6I2-HS-Bee" secondAttribute="top" id="lQJ-xY-LjC"/> <constraint firstItem="W3K-U0-zHA" firstAttribute="leading" secondItem="6I2-HS-Bee" secondAttribute="leading" constant="22" id="lVm-OD-nze"/> <constraint firstItem="4Lf-NY-aGs" firstAttribute="leading" secondItem="W3K-U0-zHA" secondAttribute="trailing" constant="22" id="xuH-bp-wvT"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="18.75"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="qe7-dR-bUh" firstAttribute="leading" secondItem="4AR-Ov-N15" secondAttribute="leading" constant="13" id="2dB-G5-Dxy"/> <constraint firstItem="qe7-dR-bUh" firstAttribute="top" secondItem="4AR-Ov-N15" secondAttribute="top" id="2i8-9X-Nhk"/> <constraint firstAttribute="trailing" secondItem="6I2-HS-Bee" secondAttribute="trailing" constant="14" id="9GI-su-N8M"/> <constraint firstAttribute="bottom" secondItem="C5w-jL-Klr" secondAttribute="bottom" constant="27" id="Bsq-R5-IOM"/> <constraint firstItem="C5w-jL-Klr" firstAttribute="leading" secondItem="4AR-Ov-N15" secondAttribute="leading" constant="15" id="QOx-K7-9Cf"/> <constraint firstItem="6I2-HS-Bee" firstAttribute="centerY" secondItem="C5w-jL-Klr" secondAttribute="centerY" id="lhx-yv-LxK"/> <constraint firstAttribute="trailing" secondItem="qe7-dR-bUh" secondAttribute="trailing" constant="13" id="rls-z3-x6a"/> <constraint firstItem="6I2-HS-Bee" firstAttribute="leading" secondItem="C5w-jL-Klr" secondAttribute="trailing" constant="26" id="t1P-Q5-jyI"/> <constraint firstItem="C5w-jL-Klr" firstAttribute="top" secondItem="qe7-dR-bUh" secondAttribute="bottom" constant="32" id="y2d-Wc-wJy"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nDP-lX-aFn"> <rect key="frame" x="0.0" y="257" width="377" height="74.333333333333314"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TT7-tl-th0"> <rect key="frame" x="13.666666666666671" y="0.0" width="53" height="53"/> <color key="backgroundColor" red="0.81568627449999997" green="0.81568627449999997" blue="0.81568627449999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="53.100000000000001" id="H0U-WM-5Rh"/> <constraint firstAttribute="width" constant="53.100000000000001" id="vFe-hz-ysZ"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="26.550000000000001"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hrJ-kN-vso"> <rect key="frame" x="75" y="12.666666666666686" width="14" height="14.333333333333336"/> <constraints> <constraint firstAttribute="height" constant="14.5" id="6vP-7r-hz3"/> </constraints> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/> <color key="textColor" red="0.082352941176470587" green="0.15294117647058825" blue="0.082352941176470587" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="*******" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZF1-aZ-gRo"> <rect key="frame" x="75" y="37.666666666666686" width="39.666666666666657" height="14.333333333333336"/> <fontDescription key="fontDescription" type="system" pointSize="12"/> <color key="textColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jVb-Rt-nvY"> <rect key="frame" x="102.66666666666667" y="0.0" width="171.66666666666663" height="40.333333333333336"/> <attributedString key="attributedText"> <fragment content="未查询到账户信息"> <attributes> <color key="NSColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <font key="NSFont" metaFont="cellTitle"/> <font key="NSOriginalFont" metaFont="cellTitle"/> <paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineHeightMultiple="1.3999999999999999" tighteningFactorForTruncation="0.0"> <lineBreakStrategy key="lineBreakStrategy" pushOut="YES" hangulWordPriority="YES" standard="YES"/> </paragraphStyle> </attributes> </fragment> <fragment> <string key="content" base64-UTF8="YES"> Cg </string> <attributes> <color key="NSColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <font key="NSFont" metaFont="cellTitle"/> <paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineHeightMultiple="1.3999999999999999" tighteningFactorForTruncation="0.0"> <lineBreakStrategy key="lineBreakStrategy" pushOut="YES" hangulWordPriority="YES" standard="YES"/> </paragraphStyle> </attributes> </fragment> <fragment content="可分享二维码至好友,邀请注册"> <attributes> <color key="NSColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <font key="NSFont" metaFont="cellTitle"/> <font key="NSOriginalFont" metaFont="cellTitle"/> <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/> </attributes> </fragment> </attributedString> <nil key="highlightedColor"/> </label> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3oo-WM-iPM"> <rect key="frame" x="304.66666666666669" y="48.666666666666686" width="57" height="11.666666666666664"/> <constraints> <constraint firstAttribute="height" constant="11.5" id="VZq-Ht-vK3"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="12"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="邀请注册>"> <color key="titleColor" red="0.12941176470588234" green="0.74117647058823533" blue="0.94117647058823528" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> <connections> <action selector="invateRegisterAction:" destination="-1" eventType="touchUpInside" id="aG5-GB-JKi"/> </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="jVb-Rt-nvY" firstAttribute="top" secondItem="nDP-lX-aFn" secondAttribute="top" id="8Zk-eE-Igp"/> <constraint firstItem="TT7-tl-th0" firstAttribute="leading" secondItem="nDP-lX-aFn" secondAttribute="leading" constant="13.5" id="AF2-I3-7dY"/> <constraint firstItem="hrJ-kN-vso" firstAttribute="top" secondItem="TT7-tl-th0" secondAttribute="top" constant="12.5" id="Fyp-9m-tWi"/> <constraint firstAttribute="height" constant="74.200000000000003" id="Qr5-hA-Inm"/> <constraint firstItem="TT7-tl-th0" firstAttribute="top" secondItem="nDP-lX-aFn" secondAttribute="top" id="aAo-RJ-pRa"/> <constraint firstItem="hrJ-kN-vso" firstAttribute="leading" secondItem="TT7-tl-th0" secondAttribute="trailing" constant="8.5" id="caT-gK-t5S"/> <constraint firstAttribute="trailing" secondItem="3oo-WM-iPM" secondAttribute="trailing" constant="15.5" id="cbc-z8-CEq"/> <constraint firstItem="ZF1-aZ-gRo" firstAttribute="top" secondItem="hrJ-kN-vso" secondAttribute="bottom" constant="10.5" id="dC3-2u-PfV"/> <constraint firstAttribute="bottom" secondItem="3oo-WM-iPM" secondAttribute="bottom" constant="14" id="fR1-dr-Rrz"/> <constraint firstItem="ZF1-aZ-gRo" firstAttribute="leading" secondItem="hrJ-kN-vso" secondAttribute="leading" id="iWe-1d-lr3"/> <constraint firstItem="jVb-Rt-nvY" firstAttribute="centerX" secondItem="nDP-lX-aFn" secondAttribute="centerX" id="zjC-zc-BNr"/> </constraints> </view> </subviews> </stackView> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="w7E-wj-goh"> <rect key="frame" x="0.0" y="347.33333333333331" width="377" height="57"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dXP-rs-EAP"> <rect key="frame" x="0.0" y="0.0" width="377" height="57"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_wallet" translatesAutoresizingMaskIntoConstraints="NO" id="3oH-OO-NEc"> <rect key="frame" x="13.000000000000002" y="17.666666666666686" width="21.666666666666671" height="21.666666666666671"/> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="余额抵扣" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TAm-8d-ISp"> <rect key="frame" x="42.333333333333329" y="20" width="57.333333333333329" height="17"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <color key="textColor" red="0.15686274509803921" green="0.15686274509803921" blue="0.15686274509803921" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前可用 ¥0.00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="W3z-Hl-09j"> <rect key="frame" x="111" y="21.666666666666686" width="78.666666666666686" height="13.333333333333336"/> <fontDescription key="fontDescription" type="system" pointSize="11"/> <color key="textColor" red="0.55686274509803924" green="0.55686274509803924" blue="0.55686274509803924" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_choose_small_s" translatesAutoresizingMaskIntoConstraints="NO" id="XNw-nK-MjP"> <rect key="frame" x="347.33333333333331" y="20.333333333333371" width="15.666666666666686" height="16"/> </imageView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="3oH-OO-NEc" firstAttribute="centerY" secondItem="dXP-rs-EAP" secondAttribute="centerY" id="5YR-Zx-2K1"/> <constraint firstItem="TAm-8d-ISp" firstAttribute="centerY" secondItem="3oH-OO-NEc" secondAttribute="centerY" id="Fpk-D9-CpC"/> <constraint firstItem="TAm-8d-ISp" firstAttribute="leading" secondItem="3oH-OO-NEc" secondAttribute="trailing" constant="7.5" id="Hj8-LR-gAd"/> <constraint firstItem="3oH-OO-NEc" firstAttribute="leading" secondItem="dXP-rs-EAP" secondAttribute="leading" constant="13" id="ZA2-Ui-sAL"/> <constraint firstAttribute="height" constant="57" id="eun-wF-OxK"/> <constraint firstItem="XNw-nK-MjP" firstAttribute="centerY" secondItem="dXP-rs-EAP" secondAttribute="centerY" id="mYL-ud-OMf"/> <constraint firstItem="W3z-Hl-09j" firstAttribute="leading" secondItem="TAm-8d-ISp" secondAttribute="trailing" constant="11.5" id="ncp-qs-Wq1"/> <constraint firstAttribute="trailing" secondItem="XNw-nK-MjP" secondAttribute="trailing" constant="14" id="reU-yz-Jef"/> <constraint firstItem="W3z-Hl-09j" firstAttribute="centerY" secondItem="3oH-OO-NEc" secondAttribute="centerY" id="rf6-DL-KBg"/> </constraints> </view> </subviews> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="10"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </stackView> </subviews> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="10"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </stackView> </subviews> <color key="backgroundColor" red="0.96470588235294119" green="0.96470588235294119" blue="0.96470588235294119" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="3me-1I-5oC" firstAttribute="leading" secondItem="jDI-6t-fTs" secondAttribute="leading" constant="8" id="7QP-Wu-rmk"/> <constraint firstItem="3me-1I-5oC" firstAttribute="top" secondItem="jDI-6t-fTs" secondAttribute="top" constant="14" id="8SM-fY-xg6"/> <constraint firstItem="3me-1I-5oC" firstAttribute="centerX" secondItem="jDI-6t-fTs" secondAttribute="centerX" id="cLe-W7-it0"/> <constraint firstAttribute="trailing" secondItem="3me-1I-5oC" secondAttribute="trailing" constant="8" id="tad-cX-Gms"/> <constraint firstAttribute="bottom" secondItem="3me-1I-5oC" secondAttribute="bottom" id="vI8-Um-Iyl"/> </constraints> </scrollView> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Obq-1G-1Dv"> <rect key="frame" x="0.0" y="652" width="393" height="200"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zZD-Dw-hLM"> <rect key="frame" x="0.0" y="74" width="393" height="126"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Pyy-JM-4Pd"> <rect key="frame" x="261" y="21.666666666666629" width="111" height="34"/> <color key="backgroundColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="34" id="6Nl-CN-S1r"/> <constraint firstAttribute="width" constant="111" id="OOS-Hg-erC"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="确认并支付"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="17"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="completeAction:" destination="-1" eventType="touchUpInside" id="b6g-LP-usR"/> </connections> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="合计" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JBC-49-la1"> <rect key="frame" x="19.666666666666664" y="30" width="28.666666666666664" height="17"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="疗愈币0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M0e-rH-WtI"> <rect key="frame" x="53.333333333333343" y="31.333333333333368" width="47" height="14.333333333333332"/> <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="12"/> <color key="textColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="bottomMargin" secondItem="Pyy-JM-4Pd" secondAttribute="bottom" constant="28.5" id="N0G-EG-xk9"/> <constraint firstAttribute="trailing" secondItem="Pyy-JM-4Pd" secondAttribute="trailing" constant="21" id="RoM-sw-iu1"/> <constraint firstItem="M0e-rH-WtI" firstAttribute="leading" secondItem="JBC-49-la1" secondAttribute="trailing" constant="5" id="fCj-BL-1bO"/> <constraint firstItem="Pyy-JM-4Pd" firstAttribute="centerY" secondItem="JBC-49-la1" secondAttribute="centerY" id="hvn-yw-c3j"/> <constraint firstItem="M0e-rH-WtI" firstAttribute="centerY" secondItem="JBC-49-la1" secondAttribute="centerY" id="iJ0-vD-NtC"/> <constraint firstItem="Pyy-JM-4Pd" firstAttribute="top" secondItem="zZD-Dw-hLM" secondAttribute="top" constant="21.5" id="pXj-Zn-UWT"/> <constraint firstItem="JBC-49-la1" firstAttribute="leading" secondItem="zZD-Dw-hLM" secondAttribute="leading" constant="19.5" id="z7o-9a-Uki"/> </constraints> </view> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9jh-cC-nHB"> <rect key="frame" x="20.666666666666668" y="40.666666666666629" width="13.000000000000004" height="13"/> <constraints> <constraint firstAttribute="width" constant="13" id="IBF-jr-z9B"/> <constraint firstAttribute="height" constant="13" id="V4I-Tw-Hxq"/> </constraints> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_choose_small_2"/> <state key="selected" image="icon_choose_small_s"/> <connections> <action selector="readAgreementAction:" destination="-1" eventType="touchUpInside" id="GM6-Su-Dlt"/> </connections> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我已阅读并同意" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jye-SN-JpG"> <rect key="frame" x="38.666666666666657" y="39.333333333333371" width="93" height="15.666666666666664"/> <fontDescription key="fontDescription" type="system" pointSize="13"/> <color key="textColor" red="0.49803921568627452" green="0.49803921568627452" blue="0.49803921568627452" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5Pu-d3-I9P"> <rect key="frame" x="136.66666666666666" y="33" width="153.99999999999997" height="28"/> <fontDescription key="fontDescription" type="system" pointSize="13"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="《课程/疗愈音频购买协议》"> <color key="titleColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> <connections> <action selector="webAgreementAction:" destination="-1" eventType="touchUpInside" id="lQQ-SI-FRJ"/> </connections> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="内容" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A9Y-9h-ygH"> <rect key="frame" x="295.66666666666669" y="39.333333333333371" width="26.666666666666686" height="15.666666666666664"/> <fontDescription key="fontDescription" type="system" pointSize="13"/> <color key="textColor" red="0.49803921569999998" green="0.49803921569999998" blue="0.49803921569999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" red="0.96470588235294119" green="0.96470588235294119" blue="0.96470588235294119" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="jye-SN-JpG" firstAttribute="centerY" secondItem="9jh-cC-nHB" secondAttribute="centerY" id="4uv-QN-KbO"/> <constraint firstItem="9jh-cC-nHB" firstAttribute="leading" secondItem="Obq-1G-1Dv" secondAttribute="leading" constant="20.5" id="BAt-W9-wQ3"/> <constraint firstAttribute="trailing" secondItem="zZD-Dw-hLM" secondAttribute="trailing" id="QNj-HH-BI8"/> <constraint firstAttribute="height" constant="200" id="SY9-Mu-JJ9"/> <constraint firstAttribute="bottom" secondItem="zZD-Dw-hLM" secondAttribute="bottom" id="VpP-mK-kyn"/> <constraint firstItem="A9Y-9h-ygH" firstAttribute="leading" secondItem="5Pu-d3-I9P" secondAttribute="trailing" constant="5" id="XBX-AX-6Id"/> <constraint firstItem="A9Y-9h-ygH" firstAttribute="centerY" secondItem="9jh-cC-nHB" secondAttribute="centerY" id="c9X-yt-FKJ"/> <constraint firstItem="zZD-Dw-hLM" firstAttribute="leading" secondItem="Obq-1G-1Dv" secondAttribute="leading" id="i9z-mv-DHb"/> <constraint firstItem="5Pu-d3-I9P" firstAttribute="leading" secondItem="jye-SN-JpG" secondAttribute="trailing" constant="5" id="q5m-YL-LGA"/> <constraint firstItem="jye-SN-JpG" firstAttribute="leading" secondItem="9jh-cC-nHB" secondAttribute="trailing" constant="5" id="qwc-IC-lkt"/> <constraint firstItem="zZD-Dw-hLM" firstAttribute="top" secondItem="9jh-cC-nHB" secondAttribute="bottom" constant="20.5" id="vw8-uk-x3o"/> <constraint firstItem="5Pu-d3-I9P" firstAttribute="centerY" secondItem="9jh-cC-nHB" secondAttribute="centerY" id="wil-L5-3cB"/> </constraints> </view> </subviews> <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="jDI-6t-fTs" secondAttribute="bottom" id="76U-vg-IWM"/> <constraint firstAttribute="bottom" secondItem="Obq-1G-1Dv" secondAttribute="bottom" id="OPT-8Z-cDT"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="jDI-6t-fTs" secondAttribute="trailing" id="Oze-d1-Fo4"/> <constraint firstItem="Obq-1G-1Dv" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="d3q-1L-OOX"/> <constraint firstItem="jDI-6t-fTs" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="hE9-Y9-CQv"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Obq-1G-1Dv" secondAttribute="trailing" id="iK0-gu-tri"/> <constraint firstItem="jDI-6t-fTs" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="qRi-DQ-rsJ"/> </constraints> <point key="canvasLocation" x="136.64122137404578" y="20.422535211267608"/> </view> </objects> <resources> <image name="icon_choose_small_2" width="13" height="13"/> <image name="icon_choose_small_s" width="15.666666984558105" height="16"/> <image name="icon_wallet" width="21.666666030883789" height="21.666666030883789"/> <systemColor name="separatorColor"> <color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.28999999999999998" colorSpace="custom" customColorSpace="sRGB"/> </systemColor> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> XQMuse/Root/Home/View/CommentCommentHeaderView.swift
New file @@ -0,0 +1,89 @@ // // CommentCommentHeaderView.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class CommentCommentHeaderView: UITableViewHeaderFooterView { private var img_userCover:UIImageView! private var label_userName:UILabel! private var label_content:UILabel! private var btn_belike:UIButton! private var label_datetime:UILabel! override init(reuseIdentifier: String?) { super.init(reuseIdentifier: reuseIdentifier) setUI() } private func setUI(){ img_userCover = UIImageView() img_userCover.backgroundColor = .gray img_userCover.jq_cornerRadius = 19.25 contentView.addSubview(img_userCover) img_userCover.snp.makeConstraints { make in make.top.equalTo(22.5) make.left.equalTo(22) make.width.height.equalTo(38.5) } label_userName = UILabel() label_userName.text = "张小胖" label_userName.font = UIFont.systemFont(ofSize: 14, weight: .bold) label_userName.textColor = UIColor(hexString: "#383838") contentView.addSubview(label_userName) label_userName.snp.makeConstraints {[unowned self] make in make.left.equalTo(self.img_userCover.snp.right).offset(12.5) make.centerY.equalTo(self.img_userCover) make.height.equalTo(13.5) make.right.equalTo(-50) } btn_belike = UIButton(type: .custom) btn_belike.setImage(UIImage(named: "btn_good"), for: .normal) contentView.addSubview(btn_belike) btn_belike.snp.makeConstraints { make in make.width.height.equalTo(30) make.right.equalTo(-20) make.centerY.equalTo(label_userName) } label_content = UILabel() label_content.text = "众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好众生皆苦,心态放好" label_content.font = UIFont.systemFont(ofSize: 12.5, weight: .bold) label_content.numberOfLines = 0 label_content.textColor = UIColor(hexString: "#383838") contentView.addSubview(label_content) label_content.snp.makeConstraints {[unowned self] make in make.top.equalTo(self.label_userName.snp.bottom).offset(12.5) make.left.equalTo(self.label_userName.snp.left) make.right.equalTo(-10) make.height.greaterThanOrEqualTo(13.5) } label_datetime = UILabel() label_datetime.text = "2024-10-25 21:23" label_datetime.font = UIFont.systemFont(ofSize: 9.41, weight: .medium) label_datetime.textColor = UIColor(hexString: "#B6B6B6") contentView.addSubview(label_datetime) label_datetime.snp.makeConstraints {[unowned self] make in make.top.equalTo(self.label_content.snp.bottom).offset(9) make.left.equalTo(self.label_userName.snp.left) make.height.equalTo(7) make.bottom.equalToSuperview().offset(-10) } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } XQMuse/Root/Home/View/HomeHeaderVC.swift
@@ -63,3 +63,57 @@ } } class HomeHeaderView_1: UICollectionReusableView{ private var label_title:UILabel! private var label_subTitle:UILabel! private(set) var btn_more:UIButton! override init(frame: CGRect) { super.init(frame: frame) setUI() } private func setUI(){ backgroundColor = .white label_title = UILabel() label_title.font = .systemFont(ofSize: 21) label_title.textColor = UIColor(hexStr: "#252A23") addSubview(label_title) label_title.snp.makeConstraints { make in make.left.equalTo(19) make.top.equalTo(25.5) make.height.equalTo(19.5) } label_subTitle = UILabel() label_subTitle.font = .systemFont(ofSize: 8) label_subTitle.textColor = UIColor(hexStr: "#A1A1A1") addSubview(label_subTitle) label_subTitle.snp.makeConstraints { make in make.left.equalTo(19) make.top.equalTo(label_title.snp.bottom).offset(9) make.height.equalTo(5.5) } btn_more = UIButton(type: .custom) btn_more.setImage(UIImage(named: "btn_more"), for: .normal) addSubview(btn_more) btn_more.snp.makeConstraints { make in make.centerY.equalToSuperview() make.right.equalTo(-18.5) make.width.equalTo(21) make.height.equalTo(16) } } func setTitle(_ title:String,subTitle:String){ label_title.text = title label_subTitle.text = subTitle } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } XQMuse/Root/Home/View/PaymentOrderResultTopView.swift
New file @@ -0,0 +1,35 @@ // // PaymentOrderResultTopView.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class PaymentOrderResultTopView: UIView,JQNibView{ @IBOutlet weak var label_price: UILabel! @IBOutlet weak var btn_lookCourse: UIButton! override func awakeFromNib() { super.awakeFromNib() } @IBAction func backRootAction(_ sender: UIButton) { JQ_currentNavigationController().popToRootViewController(animated: true) } @IBAction func lookCourseAction(_ sender: UIButton) { // let vc = HomeItemDetailVC() // JQ_currentViewController().jq_push(vc: vc) } override func layoutSubviews() { super.layoutSubviews() btn_lookCourse.jq_gradientNibColor(colorArr: [UIColor(hexStr: "#8EA47A").cgColor,UIColor(hexStr: "#AFCA98").cgColor], cornerRadius: 20) } } XQMuse/Root/Home/View/PaymentOrderResultTopView.xib
New file @@ -0,0 +1,121 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PaymentOrderResultTopView" customModule="XQMuse" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="446" height="497"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_success_full" translatesAutoresizingMaskIntoConstraints="NO" id="mgD-oQ-zrB"> <rect key="frame" x="203" y="49" width="40" height="40"/> <constraints> <constraint firstAttribute="height" constant="40" id="QfZ-XE-fPk"/> <constraint firstAttribute="width" constant="40" id="RRI-ss-kRL"/> </constraints> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="支付成功" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Vka-pM-ru5"> <rect key="frame" x="194.33333333333334" y="109" width="57.333333333333343" height="20"/> <constraints> <constraint firstAttribute="height" constant="20" id="SWT-Sd-K2H"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2980.00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hDa-VO-Vzk"> <rect key="frame" x="160.66666666666666" y="165" width="124.99999999999997" height="37"/> <constraints> <constraint firstAttribute="height" constant="37" id="9iu-Ck-Y6k"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="30"/> <color key="textColor" red="1" green="0.56470588235294117" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <stackView opaque="NO" contentMode="scaleToFill" spacing="28" translatesAutoresizingMaskIntoConstraints="NO" id="YSN-KS-kvL"> <rect key="frame" x="69" y="238" width="308" height="40"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dSe-ud-2f1"> <rect key="frame" x="0.0" y="0.0" width="140" height="40"/> <constraints> <constraint firstAttribute="width" constant="140" id="KJI-qN-yKV"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="返回首页"> <color key="titleColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> <color key="value" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> <real key="value" value="1"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="backRootAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="4hh-39-Uur"/> </connections> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ber-Ph-V3S"> <rect key="frame" x="168" y="0.0" width="140" height="40"/> <color key="backgroundColor" red="0.68627450980000004" green="0.79215686269999996" blue="0.59607843140000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="width" constant="140" id="Ure-sX-8tw"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="查看课程"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="lookCourseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="cH2-C0-P6A"/> </connections> </button> </subviews> <constraints> <constraint firstAttribute="height" constant="40" id="wwu-Aj-T3Z"/> </constraints> </stackView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="YSN-KS-kvL" firstAttribute="top" secondItem="hDa-VO-Vzk" secondAttribute="bottom" constant="36" id="A1T-Ct-hRw"/> <constraint firstItem="Vka-pM-ru5" firstAttribute="centerX" secondItem="mgD-oQ-zrB" secondAttribute="centerX" id="ErP-1R-DQc"/> <constraint firstItem="mgD-oQ-zrB" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="UMW-JZ-qPo"/> <constraint firstItem="hDa-VO-Vzk" firstAttribute="top" secondItem="Vka-pM-ru5" secondAttribute="bottom" constant="36" id="VTL-4p-1DR"/> <constraint firstItem="Vka-pM-ru5" firstAttribute="top" secondItem="mgD-oQ-zrB" secondAttribute="bottom" constant="20" id="ah5-Sm-gIS"/> <constraint firstItem="YSN-KS-kvL" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="eRB-0r-Pw4"/> <constraint firstItem="hDa-VO-Vzk" firstAttribute="centerX" secondItem="mgD-oQ-zrB" secondAttribute="centerX" id="vfJ-ca-4A7"/> <constraint firstItem="mgD-oQ-zrB" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="49" id="zDJ-bC-aYO"/> </constraints> <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> <connections> <outlet property="btn_lookCourse" destination="Ber-Ph-V3S" id="GQR-Kj-KTd"/> <outlet property="label_price" destination="hDa-VO-Vzk" id="AaM-U3-GkQ"/> </connections> <point key="canvasLocation" x="122.13740458015266" y="-104.5774647887324"/> </view> </objects> <resources> <image name="icon_success_full" width="40" height="40"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> XQMuse/Root/Me/VC/VIPCenterVC.swift
New file @@ -0,0 +1,127 @@ // // VIPCenterVC.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class VIPCenterVC: BaseVC { @IBOutlet weak var collectionView: UICollectionView! private var selectIndex = 0 override func viewDidLoad() { super.viewDidLoad() title = "会员中心" collectionView.delegate = self collectionView.dataSource = self collectionView.showsHorizontalScrollIndicator = false collectionView.contentInset = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15) collectionView.register(VipCenterCCell.self, forCellWithReuseIdentifier: "cell") } } extension VIPCenterVC:UICollectionViewDelegate & UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { selectIndex = indexPath.row collectionView.reloadData() } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! VipCenterCCell cell.isSelect(indexPath.row == selectIndex) return cell } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 5 } } extension VIPCenterVC:UICollectionViewDelegateFlowLayout{ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: 111, height: 132) } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return 11.5 } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return 11.5 } } class VipCenterCCell:UICollectionViewCell{ private var label_title:UILabel! private var label_price:UILabel! private var lable_priorDay:UILabel! override init(frame: CGRect) { super.init(frame: frame) contentView.jq_cornerRadius = 10 contentView.backgroundColor = UIColor(hexString: "#EFF2F2") setUI() } func setUI(){ label_title = UILabel() label_title.text = "年度会员" label_title.textAlignment = .center label_title.textColor = UIColor(hexString: "#353535") label_title.font = .systemFont(ofSize: 16, weight: .medium) contentView.addSubview(label_title) label_title.snp.makeConstraints { make in make.top.equalTo(31) make.centerX.equalToSuperview() make.height.equalTo(15) } label_price = UILabel() label_price.attributedText = AttributedStringbuilder.build().add(string: "¥", withFont: .systemFont(ofSize: 15, weight:.heavy), withColor: UIColor(hexString: "#353535")!).add(string: "199", withFont: .systemFont(ofSize: 20, weight:.heavy), withColor: UIColor(hexString: "#353535")!).mutableAttributedString label_price.textAlignment = .center label_price.font = .systemFont(ofSize: 16, weight: .medium) contentView.addSubview(label_price) label_price.snp.makeConstraints { make in make.top.equalTo(label_title.snp.bottom).offset(15.5) make.centerX.equalToSuperview() make.height.equalTo(15) } lable_priorDay = UILabel() lable_priorDay.text = "¥0/天" lable_priorDay.textAlignment = .center lable_priorDay.font = .systemFont(ofSize: 11, weight: .medium) contentView.addSubview(lable_priorDay) lable_priorDay.snp.makeConstraints { make in make.top.equalTo(label_price.snp.bottom).offset(15.5) make.centerX.equalToSuperview() make.height.equalTo(15) } } func isSelect(_ state:Bool){ if state{ contentView.backgroundColor = UIColor(hexString: "#A6C586") label_title.textColor = .white lable_priorDay.textColor = .white label_price.attributedText = AttributedStringbuilder.build().add(string: "¥", withFont: .systemFont(ofSize: 15, weight:.heavy), withColor: .white).add(string: "199", withFont: .systemFont(ofSize: 20, weight:.heavy), withColor: .white).mutableAttributedString }else{ contentView.backgroundColor = UIColor(hexString: "#EFF2F2") label_title.textColor = UIColor(hexString: "#353535") lable_priorDay.textColor = UIColor(hexString: "#B7B7B7") label_price.attributedText = AttributedStringbuilder.build().add(string: "¥", withFont: .systemFont(ofSize: 15, weight:.heavy), withColor: UIColor(hexString: "#353535")!).add(string: "199", withFont: .systemFont(ofSize: 20, weight:.heavy), withColor: UIColor(hexString: "#353535")!).mutableAttributedString } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } XQMuse/Root/Me/VC/VIPCenterVC.xib
New file @@ -0,0 +1,205 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VIPCenterVC" customModule="XQMuse" customModuleProvider="target"> <connections> <outlet property="collectionView" destination="Ue5-Zy-CjC" id="lPV-ex-sdB"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> </connections> </placeholder> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg_voice_top" translatesAutoresizingMaskIntoConstraints="NO" id="VLP-Hy-naC"> <rect key="frame" x="0.0" y="0.0" width="393" height="297"/> </imageView> <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bkf-bh-gzu"> <rect key="frame" x="0.0" y="59" width="393" height="759"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="L2t-aS-dfp"> <rect key="frame" x="0.0" y="0.0" width="393" height="462.66666666666669"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h8a-aO-hri"> <rect key="frame" x="14" y="54.666666666666679" width="365" height="113.33333333333331"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg_vip_u" translatesAutoresizingMaskIntoConstraints="NO" id="w2X-DC-MsM"> <rect key="frame" x="0.0" y="0.0" width="365" height="113.33333333333333"/> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="心泉·疗愈会员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YxW-A0-Oga"> <rect key="frame" x="19.666666666666657" y="23.333333333333329" width="151" height="21"/> <constraints> <constraint firstAttribute="height" constant="21" id="jjF-Bb-zsz"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="22"/> <color key="textColor" red="0.039215686274509803" green="0.25882352941176467" blue="0.074509803921568626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="升级为高级会员,解锁全部体验" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="teL-7U-G1S"> <rect key="frame" x="19" y="85.999999999999986" width="143.33333333333334" height="12"/> <fontDescription key="fontDescription" type="system" pointSize="10"/> <color key="textColor" red="0.039215686274509803" green="0.25882352941176467" blue="0.074509803921568626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <constraints> <constraint firstAttribute="width" secondItem="h8a-aO-hri" secondAttribute="height" multiplier="1:0.311" id="HXf-AV-84L"/> <constraint firstAttribute="bottom" secondItem="w2X-DC-MsM" secondAttribute="bottom" id="Id9-B8-cpn"/> <constraint firstAttribute="trailing" secondItem="w2X-DC-MsM" secondAttribute="trailing" id="UQH-42-3iR"/> <constraint firstItem="w2X-DC-MsM" firstAttribute="top" secondItem="h8a-aO-hri" secondAttribute="top" id="VlU-n4-JnN"/> <constraint firstItem="teL-7U-G1S" firstAttribute="top" secondItem="YxW-A0-Oga" secondAttribute="bottom" constant="41.5" id="Y8p-oG-uQE"/> <constraint firstItem="YxW-A0-Oga" firstAttribute="leading" secondItem="h8a-aO-hri" secondAttribute="leading" constant="19.5" id="ZIt-OF-kPt"/> <constraint firstItem="teL-7U-G1S" firstAttribute="leading" secondItem="h8a-aO-hri" secondAttribute="leading" constant="19" id="mBe-9s-o0A"/> <constraint firstItem="YxW-A0-Oga" firstAttribute="top" secondItem="h8a-aO-hri" secondAttribute="top" constant="23.5" id="qjQ-kX-c9q"/> <constraint firstItem="w2X-DC-MsM" firstAttribute="leading" secondItem="h8a-aO-hri" secondAttribute="leading" id="tk8-g5-TUO"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VIP会员套餐" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yWI-Sm-wHz"> <rect key="frame" x="31.666666666666664" y="197" width="102.66666666666669" height="21"/> <fontDescription key="fontDescription" type="system" pointSize="18"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="Ue5-Zy-CjC"> <rect key="frame" x="0.0" y="230.66666666666669" width="393" height="132"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="132" id="p8z-dn-4dN"/> </constraints> <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="hVs-Ty-M7N"> <size key="itemSize" width="128" height="128"/> <size key="headerReferenceSize" width="0.0" height="0.0"/> <size key="footerReferenceSize" width="0.0" height="0.0"/> <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> </collectionViewFlowLayout> </collectionView> <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a9D-PO-axc"> <rect key="frame" x="0.0" y="362.66666666666669" width="393" height="100"/> <constraints> <constraint firstAttribute="height" constant="100" id="AWY-C0-cXO"/> </constraints> <wkWebViewConfiguration key="configuration"> <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/> <wkPreferences key="preferences"/> </wkWebViewConfiguration> </wkWebView> </subviews> <constraints> <constraint firstItem="a9D-PO-axc" firstAttribute="top" secondItem="Ue5-Zy-CjC" secondAttribute="bottom" id="15v-6A-0ji"/> <constraint firstItem="Ue5-Zy-CjC" firstAttribute="top" secondItem="yWI-Sm-wHz" secondAttribute="bottom" constant="12.5" id="8id-05-Hve"/> <constraint firstItem="yWI-Sm-wHz" firstAttribute="top" secondItem="h8a-aO-hri" secondAttribute="bottom" constant="29" id="G5O-gM-Ih2"/> <constraint firstAttribute="trailing" secondItem="h8a-aO-hri" secondAttribute="trailing" constant="14" id="Hkp-e9-iFe"/> <constraint firstAttribute="trailing" secondItem="a9D-PO-axc" secondAttribute="trailing" id="N5F-Dn-3Lx"/> <constraint firstAttribute="trailing" secondItem="Ue5-Zy-CjC" secondAttribute="trailing" id="NFg-Zq-3Ts"/> <constraint firstItem="h8a-aO-hri" firstAttribute="leading" secondItem="L2t-aS-dfp" secondAttribute="leading" constant="14" id="cJj-1e-X2q"/> <constraint firstItem="a9D-PO-axc" firstAttribute="leading" secondItem="L2t-aS-dfp" secondAttribute="leading" id="gth-kx-AnP"/> <constraint firstItem="yWI-Sm-wHz" firstAttribute="leading" secondItem="L2t-aS-dfp" secondAttribute="leading" constant="31.5" id="h7x-TM-VyG"/> <constraint firstAttribute="bottom" secondItem="a9D-PO-axc" secondAttribute="bottom" id="rmB-ii-O0j"/> <constraint firstItem="h8a-aO-hri" firstAttribute="top" secondItem="L2t-aS-dfp" secondAttribute="top" constant="54.5" id="wLL-2b-kPO"/> <constraint firstItem="Ue5-Zy-CjC" firstAttribute="leading" secondItem="L2t-aS-dfp" secondAttribute="leading" id="yRz-xH-u7d"/> </constraints> </view> </subviews> <constraints> <constraint firstAttribute="bottom" secondItem="L2t-aS-dfp" secondAttribute="bottom" id="J9p-nF-AxN"/> <constraint firstItem="L2t-aS-dfp" firstAttribute="leading" secondItem="bkf-bh-gzu" secondAttribute="leading" id="O3u-1O-MwX"/> <constraint firstAttribute="trailing" secondItem="L2t-aS-dfp" secondAttribute="trailing" id="QkV-Xp-1qW"/> <constraint firstItem="L2t-aS-dfp" firstAttribute="centerX" secondItem="bkf-bh-gzu" secondAttribute="centerX" id="bfq-QO-tXk"/> <constraint firstItem="L2t-aS-dfp" firstAttribute="top" secondItem="bkf-bh-gzu" secondAttribute="top" id="ti0-Sy-Y1M"/> </constraints> </scrollView> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qa1-cj-VoU"> <rect key="frame" x="0.0" y="715" width="393" height="137"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="s5h-cp-fKN"> <rect key="frame" x="21.666666666666657" y="0.0" width="350" height="53.666666666666664"/> <color key="backgroundColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="53.5" id="zkd-En-arm"/> </constraints> <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="18"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="立即开通"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="26.75"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6ZY-8B-NMH"> <rect key="frame" x="22" y="76.666666666666629" width="12.666666666666664" height="12.333333333333329"/> <constraints> <constraint firstAttribute="width" constant="12.5" id="uyB-GW-yJB"/> <constraint firstAttribute="height" constant="12.5" id="zwf-eK-ebh"/> </constraints> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_choose_small_1"/> <state key="selected" image="icon_choose_small_s"/> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="同意" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tC0-1B-EV0"> <rect key="frame" x="40" y="74.666666666666629" width="27" height="16"/> <fontDescription key="fontDescription" type="system" pointSize="13"/> <color key="textColor" red="0.49803921568627452" green="0.49803921568627452" blue="0.49803921568627452" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tne-Fn-Oic"> <rect key="frame" x="72" y="68.666666666666629" width="94" height="28"/> <fontDescription key="fontDescription" type="system" pointSize="13"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="《会员用户协议》"> <color key="titleColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="137" id="482-Qh-0Jv"/> <constraint firstItem="Tne-Fn-Oic" firstAttribute="leading" secondItem="tC0-1B-EV0" secondAttribute="trailing" constant="5" id="9QN-fL-PVq"/> <constraint firstItem="6ZY-8B-NMH" firstAttribute="top" secondItem="s5h-cp-fKN" secondAttribute="bottom" constant="23" id="Jut-EV-WxL"/> <constraint firstItem="s5h-cp-fKN" firstAttribute="leading" secondItem="Qa1-cj-VoU" secondAttribute="leading" constant="21.5" id="Mmx-Rp-0pN"/> <constraint firstItem="tC0-1B-EV0" firstAttribute="centerY" secondItem="6ZY-8B-NMH" secondAttribute="centerY" id="Nvb-nK-Bbm"/> <constraint firstAttribute="trailing" secondItem="s5h-cp-fKN" secondAttribute="trailing" constant="21.5" id="Xai-on-BIU"/> <constraint firstItem="tC0-1B-EV0" firstAttribute="leading" secondItem="6ZY-8B-NMH" secondAttribute="trailing" constant="5.5" id="gHh-CI-WH0"/> <constraint firstItem="Tne-Fn-Oic" firstAttribute="centerY" secondItem="6ZY-8B-NMH" secondAttribute="centerY" id="ggp-TL-60y"/> <constraint firstItem="6ZY-8B-NMH" firstAttribute="leading" secondItem="Qa1-cj-VoU" secondAttribute="leading" constant="22" id="hEr-N9-UVg"/> <constraint firstItem="s5h-cp-fKN" firstAttribute="top" secondItem="Qa1-cj-VoU" secondAttribute="top" id="rid-ce-fN9"/> </constraints> </view> </subviews> <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Qa1-cj-VoU" secondAttribute="trailing" id="17Q-Ar-AY7"/> <constraint firstItem="VLP-Hy-naC" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="DUD-QX-KBG"/> <constraint firstItem="bkf-bh-gzu" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="GX4-yE-DfY"/> <constraint firstAttribute="bottom" secondItem="Qa1-cj-VoU" secondAttribute="bottom" id="ORB-Sa-yIO"/> <constraint firstItem="VLP-Hy-naC" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="TTg-Kg-sh0"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="bkf-bh-gzu" secondAttribute="trailing" id="bNU-bF-fJd"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="bkf-bh-gzu" secondAttribute="bottom" id="gKn-YZ-1jy"/> <constraint firstItem="bkf-bh-gzu" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="kpV-5I-DMc"/> <constraint firstItem="Qa1-cj-VoU" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="m1A-Bv-NWm"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="VLP-Hy-naC" secondAttribute="trailing" id="ul0-Xj-7Nb"/> </constraints> <point key="canvasLocation" x="140" y="21"/> </view> </objects> <resources> <image name="bg_vip_u" width="364.66665649414062" height="113.66666412353516"/> <image name="bg_voice_top" width="390" height="297"/> <image name="icon_choose_small_1" width="16" height="16"/> <image name="icon_choose_small_s" width="15.666666984558105" height="16"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> XQMuse/Root/Other/View/ChooseOptView.swift
New file @@ -0,0 +1,84 @@ // // ChooseOptView.swift // XQMuse // // Created by 无故事王国 on 2024/8/15. // import UIKit import JQTools class ChooseOptView: UIView,JQNibView{ @IBOutlet weak var view_container: UIView! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var cons_hight: NSLayoutConstraint! @IBOutlet weak var cons_bottom: NSLayoutConstraint! @IBOutlet weak var cons_cancel_bottom: NSLayoutConstraint! private var items = [String]() private var clouse:((Int)->Void)! override func awakeFromNib() { super.awakeFromNib() tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none tableView.register(UITableViewCell.self, forCellReuseIdentifier: "_cell") alpha = 0 cons_hight.constant = 0 cons_cancel_bottom.constant = UIDevice.jq_safeEdges.bottom cons_bottom.constant = -JQ_ScreenW layoutIfNeeded() } static func show(titles:[String],clouse:@escaping (Int)->Void){ let optView = ChooseOptView.jq_loadNibView() optView.items = titles optView.clouse = clouse optView.frame = sceneDelegate?.window?.frame ?? .zero sceneDelegate?.window?.addSubview(optView) optView.cons_hight.constant = Double(titles.count) * 56 optView.cons_bottom.constant = -UIDevice.jq_safeEdges.bottom UIView.animate(withDuration: 0.4) { optView.alpha = 1 optView.layoutIfNeeded() } } override func layoutSubviews() { super.layoutSubviews() view_container.jq_cornerPart(byRoundingCorners: [.topLeft,.topRight], radii: 22) } @IBAction func cancelAction(_ sender: Any) { self.cons_bottom.constant = -JQ_ScreenW UIView.animate(withDuration: 0.4) { self.alpha = 0 self.layoutIfNeeded() } completion: { _ in self.removeFromSuperview() } } } extension ChooseOptView:UITableViewDelegate & UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCell(withIdentifier: "_cell") cell!.textLabel?.font = UIFont.systemFont(ofSize: 15, weight: .medium) cell!.textLabel?.textColor = UIColor(hexString: "#92A87D") cell!.selectionStyle = .none cell?.textLabel?.textAlignment = .center cell?.textLabel?.text = items[indexPath.row] return cell! } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 56 } } XQMuse/Root/Other/View/ChooseOptView.xib
New file @@ -0,0 +1,88 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="ChooseOptView" customModule="XQMuse" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7hd-X4-jnx"> <rect key="frame" x="0.0" y="697" width="393" height="155"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kna-Ip-6Bx"> <rect key="frame" x="0.0" y="57" width="393" height="56"/> <constraints> <constraint firstAttribute="height" constant="56" id="gEr-Pp-xqo"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="15"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="取消"> <color key="titleColor" red="0.19607843137254902" green="0.19607843137254902" blue="0.19607843137254902" alpha="0.90000000000000002" colorSpace="custom" customColorSpace="sRGB"/> </state> <connections> <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="M22-Kg-s2o"/> </connections> </button> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="qay-oH-tG7"> <rect key="frame" x="0.0" y="0.0" width="393" height="56"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="56" id="uir-ga-z0g"/> </constraints> </tableView> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dpN-jw-hER"> <rect key="frame" x="0.0" y="56" width="393" height="1"/> <color key="backgroundColor" red="0.59215686274509804" green="0.59215686274509804" blue="0.59215686274509804" alpha="0.080000000000000002" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="1" id="r8G-HJ-2pB"/> </constraints> </view> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="dpN-jw-hER" firstAttribute="leading" secondItem="7hd-X4-jnx" secondAttribute="leading" id="0Mz-qH-S7E"/> <constraint firstItem="kna-Ip-6Bx" firstAttribute="leading" secondItem="7hd-X4-jnx" secondAttribute="leading" id="2hD-56-mub"/> <constraint firstAttribute="bottomMargin" secondItem="kna-Ip-6Bx" secondAttribute="bottom" id="CZq-RJ-SgM"/> <constraint firstItem="dpN-jw-hER" firstAttribute="top" secondItem="qay-oH-tG7" secondAttribute="bottom" id="EgY-36-Rv7"/> <constraint firstItem="dpN-jw-hER" firstAttribute="top" secondItem="qay-oH-tG7" secondAttribute="bottom" id="Ird-Ph-U3G"/> <constraint firstItem="qay-oH-tG7" firstAttribute="leading" secondItem="7hd-X4-jnx" secondAttribute="leading" id="J4F-q7-cVV"/> <constraint firstAttribute="trailing" secondItem="qay-oH-tG7" secondAttribute="trailing" id="K2S-zI-gMA"/> <constraint firstItem="kna-Ip-6Bx" firstAttribute="top" secondItem="dpN-jw-hER" secondAttribute="bottom" id="gMw-Yj-rrf"/> <constraint firstAttribute="trailing" secondItem="kna-Ip-6Bx" secondAttribute="trailing" id="iJy-rf-I9w"/> <constraint firstAttribute="trailing" secondItem="dpN-jw-hER" secondAttribute="trailing" id="ssg-as-5Kn"/> <constraint firstItem="qay-oH-tG7" firstAttribute="top" secondItem="7hd-X4-jnx" secondAttribute="top" id="ydC-Vg-0F3"/> </constraints> </view> </subviews> <viewLayoutGuide key="safeArea" id="Eor-ew-SMj"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="bottom" secondItem="7hd-X4-jnx" secondAttribute="bottom" id="BTa-FL-IQa"/> <constraint firstItem="7hd-X4-jnx" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="c5H-tP-bEh"/> <constraint firstAttribute="trailing" secondItem="7hd-X4-jnx" secondAttribute="trailing" id="msX-tJ-Wk6"/> </constraints> <connections> <outlet property="cons_bottom" destination="BTa-FL-IQa" id="U1i-Ow-Lpd"/> <outlet property="cons_cancel_bottom" destination="CZq-RJ-SgM" id="Ing-kw-4fE"/> <outlet property="cons_hight" destination="uir-ga-z0g" id="J81-3E-ScT"/> <outlet property="tableView" destination="qay-oH-tG7" id="4oP-yA-wHr"/> <outlet property="view_container" destination="7hd-X4-jnx" id="uLl-Sn-M7n"/> </connections> <point key="canvasLocation" x="81.679389312977094" y="20.422535211267608"/> </view> </objects> <resources> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document>