فهرست منبع

个人中心VIP课

Steven 8 ماه پیش
والد
کامیت
b0240d8283
38فایلهای تغییر یافته به همراه1519 افزوده شده و 413 حذف شده
  1. 66 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/mine_style_edit.imageset/Contents.json
  3. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/mine_style_edit.imageset/mine_style_edit@2x.png
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/mine_style_edit.imageset/mine_style_edit@3x.png
  5. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_program_del.imageset/Contents.json
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_program_del.imageset/course_program_del@2x.png
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_program_del.imageset/course_program_del@3x.png
  8. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_tips_del.imageset/Contents.json
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_tips_del.imageset/course_tips_del@2x.png
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_tips_del.imageset/course_tips_del@3x.png
  11. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_fansGroup_icon.imageset/Contents.json
  12. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_fansGroup_icon.imageset/mine_fansGroup_icon@2x.png
  13. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_fansGroup_icon.imageset/mine_fansGroup_icon@3x.png
  14. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_instrument_logo.imageset/mine_instrument_logo@2x.png
  15. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_instrument_logo.imageset/mine_instrument_logo@3x.png
  16. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_style_icon.imageset/Contents.json
  17. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_style_icon.imageset/mine_style_icon@2x.png
  18. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_style_icon.imageset/mine_style_icon@3x.png
  19. 50 26
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m
  20. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/GradientLine/JXCategoryIndicatorGradientLineView.h
  21. 61 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/GradientLine/JXCategoryIndicatorGradientLineView.m
  22. 2 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.h
  23. 8 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.m
  24. 54 11
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.xib
  25. 7 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.h
  26. 78 78
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.m
  27. 216 291
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.xib
  28. 32 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.h
  29. 97 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.m
  30. 83 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.xib
  31. 28 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MinePageCourseTipsView.h
  32. 85 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MinePageCourseTipsView.m
  33. 125 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MinePageCourseTipsView.xib
  34. 20 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.h
  35. 213 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.m
  36. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVipProgramCell.h
  37. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVipProgramCell.m
  38. 124 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVipProgramCell.xib

+ 66 - 0
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -539,6 +539,12 @@
 		BC42CAAF2BEC9CDA001F076E /* RhythmChooseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC42CAAA2BEC9CDA001F076E /* RhythmChooseView.xib */; };
 		BC42CAB02BEC9CDA001F076E /* RhythmView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC42CAAC2BEC9CDA001F076E /* RhythmView.m */; };
 		BC42CAB12BEC9CDA001F076E /* RhythmView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC42CAAD2BEC9CDA001F076E /* RhythmView.xib */; };
+		BC433E542CE6E4F3002870EC /* JXCategoryIndicatorGradientLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC433E532CE6E4F3002870EC /* JXCategoryIndicatorGradientLineView.m */; };
+		BC433E572CE6EC6E002870EC /* MineCourseSettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC433E562CE6EC6E002870EC /* MineCourseSettingView.m */; };
+		BC433E592CE6EC79002870EC /* MineCourseSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC433E582CE6EC79002870EC /* MineCourseSettingView.xib */; };
+		BC433E5C2CE6F339002870EC /* MinePageVIPCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC433E5B2CE6F339002870EC /* MinePageVIPCourseView.m */; };
+		BC433E612CE6F80E002870EC /* MinePageVipProgramCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC433E602CE6F80E002870EC /* MinePageVipProgramCell.xib */; };
+		BC433E622CE6F80E002870EC /* MinePageVipProgramCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC433E5F2CE6F80E002870EC /* MinePageVipProgramCell.m */; };
 		BC4823D12C4F5F30000E5401 /* UserDetailModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4823D02C4F5F30000E5401 /* UserDetailModel.m */; };
 		BC4823D42C4F8FC0000E5401 /* KSAccompanyDraftViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4823D22C4F8FBF000E5401 /* KSAccompanyDraftViewController.m */; };
 		BC483231282A646A005F534C /* HomeRecentCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC483230282A646A005F534C /* HomeRecentCourseView.m */; };
@@ -1115,6 +1121,8 @@
 		BCFB9B912CE48F8400B66BC0 /* VIPCourseGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFB9B902CE48F8400B66BC0 /* VIPCourseGroupViewController.m */; };
 		BCFB9B942CE48FDB00B66BC0 /* AccompanyCourseGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFB9B932CE48FDB00B66BC0 /* AccompanyCourseGroupViewController.m */; };
 		BCFB9B972CE4903800B66BC0 /* MusicRoomGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFB9B962CE4903800B66BC0 /* MusicRoomGroupViewController.m */; };
+		BCFB9BAB2CE58E8A00B66BC0 /* MinePageCourseTipsView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFB9BAA2CE58E8A00B66BC0 /* MinePageCourseTipsView.m */; };
+		BCFB9BAD2CE58E9900B66BC0 /* MinePageCourseTipsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFB9BAC2CE58E9900B66BC0 /* MinePageCourseTipsView.xib */; };
 		BCFC09DD2C48E4A0009A727F /* UserVip.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFC09DC2C48E4A0009A727F /* UserVip.m */; };
 		BCFE540928168DFF00AD6786 /* KSButtonStatusView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE540828168DFF00AD6786 /* KSButtonStatusView.m */; };
 		BCFE541028178FF600AD6786 /* MyIncomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE540F28178FF600AD6786 /* MyIncomeViewController.m */; };
@@ -2066,6 +2074,16 @@
 		BC42CAAB2BEC9CDA001F076E /* RhythmChooseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RhythmChooseView.h; sourceTree = "<group>"; };
 		BC42CAAC2BEC9CDA001F076E /* RhythmView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RhythmView.m; sourceTree = "<group>"; };
 		BC42CAAD2BEC9CDA001F076E /* RhythmView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RhythmView.xib; sourceTree = "<group>"; };
+		BC433E522CE6E4F3002870EC /* JXCategoryIndicatorGradientLineView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JXCategoryIndicatorGradientLineView.h; sourceTree = "<group>"; };
+		BC433E532CE6E4F3002870EC /* JXCategoryIndicatorGradientLineView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JXCategoryIndicatorGradientLineView.m; sourceTree = "<group>"; };
+		BC433E552CE6EC6E002870EC /* MineCourseSettingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MineCourseSettingView.h; sourceTree = "<group>"; };
+		BC433E562CE6EC6E002870EC /* MineCourseSettingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MineCourseSettingView.m; sourceTree = "<group>"; };
+		BC433E582CE6EC79002870EC /* MineCourseSettingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineCourseSettingView.xib; sourceTree = "<group>"; };
+		BC433E5A2CE6F339002870EC /* MinePageVIPCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageVIPCourseView.h; sourceTree = "<group>"; };
+		BC433E5B2CE6F339002870EC /* MinePageVIPCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageVIPCourseView.m; sourceTree = "<group>"; };
+		BC433E5E2CE6F80E002870EC /* MinePageVipProgramCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageVipProgramCell.h; sourceTree = "<group>"; };
+		BC433E5F2CE6F80E002870EC /* MinePageVipProgramCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageVipProgramCell.m; sourceTree = "<group>"; };
+		BC433E602CE6F80E002870EC /* MinePageVipProgramCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageVipProgramCell.xib; sourceTree = "<group>"; };
 		BC4823CF2C4F5F30000E5401 /* UserDetailModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserDetailModel.h; sourceTree = "<group>"; };
 		BC4823D02C4F5F30000E5401 /* UserDetailModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserDetailModel.m; sourceTree = "<group>"; };
 		BC4823D22C4F8FBF000E5401 /* KSAccompanyDraftViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSAccompanyDraftViewController.m; sourceTree = "<group>"; };
@@ -2977,6 +2995,9 @@
 		BCFB9B932CE48FDB00B66BC0 /* AccompanyCourseGroupViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AccompanyCourseGroupViewController.m; sourceTree = "<group>"; };
 		BCFB9B952CE4903800B66BC0 /* MusicRoomGroupViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MusicRoomGroupViewController.h; sourceTree = "<group>"; };
 		BCFB9B962CE4903800B66BC0 /* MusicRoomGroupViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MusicRoomGroupViewController.m; sourceTree = "<group>"; };
+		BCFB9BA92CE58E8A00B66BC0 /* MinePageCourseTipsView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageCourseTipsView.h; sourceTree = "<group>"; };
+		BCFB9BAA2CE58E8A00B66BC0 /* MinePageCourseTipsView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageCourseTipsView.m; sourceTree = "<group>"; };
+		BCFB9BAC2CE58E9900B66BC0 /* MinePageCourseTipsView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageCourseTipsView.xib; sourceTree = "<group>"; };
 		BCFC09DB2C48E49F009A727F /* UserVip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserVip.h; sourceTree = "<group>"; };
 		BCFC09DC2C48E4A0009A727F /* UserVip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserVip.m; sourceTree = "<group>"; };
 		BCFE540728168DFF00AD6786 /* KSButtonStatusView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSButtonStatusView.h; sourceTree = "<group>"; };
@@ -3240,6 +3261,9 @@
 		275FA55C27F31A7400EB6240 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BC433E5D2CE6F7D8002870EC /* VipCourse */,
+				BC433E512CE6E4E1002870EC /* GradientLine */,
+				BCFB9BA82CE58E6D00B66BC0 /* MinePageTipsView */,
 				BC221FB128C82EF400F99802 /* MinePageSort */,
 				BC221FB028C82BEA00F99802 /* HeadView */,
 				27D83F3A27F3EA5700062476 /* MinePageMienBodyView.h */,
@@ -5453,6 +5477,27 @@
 			path = UserDetail;
 			sourceTree = "<group>";
 		};
+		BC433E512CE6E4E1002870EC /* GradientLine */ = {
+			isa = PBXGroup;
+			children = (
+				BC433E522CE6E4F3002870EC /* JXCategoryIndicatorGradientLineView.h */,
+				BC433E532CE6E4F3002870EC /* JXCategoryIndicatorGradientLineView.m */,
+			);
+			path = GradientLine;
+			sourceTree = "<group>";
+		};
+		BC433E5D2CE6F7D8002870EC /* VipCourse */ = {
+			isa = PBXGroup;
+			children = (
+				BC433E5A2CE6F339002870EC /* MinePageVIPCourseView.h */,
+				BC433E5B2CE6F339002870EC /* MinePageVIPCourseView.m */,
+				BC433E5E2CE6F80E002870EC /* MinePageVipProgramCell.h */,
+				BC433E5F2CE6F80E002870EC /* MinePageVipProgramCell.m */,
+				BC433E602CE6F80E002870EC /* MinePageVipProgramCell.xib */,
+			);
+			path = VipCourse;
+			sourceTree = "<group>";
+		};
 		BC4BCE622823990100522C8B /* AddressList */ = {
 			isa = PBXGroup;
 			children = (
@@ -7286,6 +7331,19 @@
 			path = VIPCourse;
 			sourceTree = "<group>";
 		};
+		BCFB9BA82CE58E6D00B66BC0 /* MinePageTipsView */ = {
+			isa = PBXGroup;
+			children = (
+				BCFB9BA92CE58E8A00B66BC0 /* MinePageCourseTipsView.h */,
+				BCFB9BAA2CE58E8A00B66BC0 /* MinePageCourseTipsView.m */,
+				BCFB9BAC2CE58E9900B66BC0 /* MinePageCourseTipsView.xib */,
+				BC433E552CE6EC6E002870EC /* MineCourseSettingView.h */,
+				BC433E562CE6EC6E002870EC /* MineCourseSettingView.m */,
+				BC433E582CE6EC79002870EC /* MineCourseSettingView.xib */,
+			);
+			path = MinePageTipsView;
+			sourceTree = "<group>";
+		};
 		BCFE540A28178BD100AD6786 /* Income */ = {
 			isa = PBXGroup;
 			children = (
@@ -7539,6 +7597,7 @@
 				BCC408E92AFCE11900C60249 /* MusicPublistAlert.xib in Resources */,
 				BC9EFEB42C0480A500CFA7B1 /* GroupBanBottomView.xib in Resources */,
 				2780C92927E490CA00A95A4F /* VefiBodyView.xib in Resources */,
+				BCFB9BAD2CE58E9900B66BC0 /* MinePageCourseTipsView.xib in Resources */,
 				BCC5840828A9FA8100BAB4CF /* cloud_animation_10.png in Resources */,
 				BCA9CE4427FD947C00D558C6 /* AccompanyArrangeCell.xib in Resources */,
 				BCF61BF128042FA90000ACFE /* InstrumentChooseBottonView.xib in Resources */,
@@ -7561,6 +7620,7 @@
 				BCC583FA28A9FA8100BAB4CF /* cloud_animation_26.png in Resources */,
 				2708565E27EDA83100EC8E72 /* GroupMemberListCell.xib in Resources */,
 				BC9AA0CA2ABC3C7B00CD954D /* KSPhotoChooseView.xib in Resources */,
+				BC433E612CE6F80E002870EC /* MinePageVipProgramCell.xib in Resources */,
 				BCDE359A289BC02200A9A560 /* HomeHotAlbumCell.xib in Resources */,
 				2780A06627E81E5E00447CFD /* MineNavView.xib in Resources */,
 				BC14A62628A212CC0086395C /* HomeHotMusicView.xib in Resources */,
@@ -7603,6 +7663,7 @@
 				BCEA75322819336A00886A86 /* WithdrawBodyView.xib in Resources */,
 				BC71D20A2887FDD40010F14B /* launchAni.json in Resources */,
 				BC0A22A5284751F80065C1AB /* AccompanySongCell.xib in Resources */,
+				BC433E592CE6EC79002870EC /* MineCourseSettingView.xib in Resources */,
 				2723B68E27F1686100E0B90B /* HomeNavView.xib in Resources */,
 				BC71D1F22887FDD40010F14B /* img_16.png in Resources */,
 				BC14E4862AB2F4CE000C4983 /* TenantUnbindBodyView.xib in Resources */,
@@ -7985,6 +8046,7 @@
 				BC56C95529233D0500AF301F /* CoursewareTableDelegate.m in Sources */,
 				BC4BCE6C28239EEB00522C8B /* MyAddressListCell.m in Sources */,
 				BCE73D692ABD705F00AD1F9A /* HomeMusicSheetLayout.m in Sources */,
+				BC433E572CE6EC6E002870EC /* MineCourseSettingView.m in Sources */,
 				BCD6D16228195A17009A773E /* WithdrawApplyViewController.m in Sources */,
 				BC106B8C2A8F4586000759A9 /* TXLiveMessageSeatResponse.m in Sources */,
 				BC7CFFB72817E90700CAEB21 /* KSSegView.m in Sources */,
@@ -8326,6 +8388,7 @@
 				BC38C4302AF900E100ABFCC2 /* KSAudioAnimationView.m in Sources */,
 				275FA1A027E7250700CFEA2E /* KSAccompanyWebViewController.m in Sources */,
 				BC1365CC280D478F00EB03E2 /* NotiferMessageModel.m in Sources */,
+				BC433E5C2CE6F339002870EC /* MinePageVIPCourseView.m in Sources */,
 				2755C07727EC945D007D9070 /* GroupMemberViewController.m in Sources */,
 				2773205227EDB75B008FAECA /* GroupNoticeCell.m in Sources */,
 				BCC0F7072A8CF13D00C4EFA4 /* KSDanInputBarControl.m in Sources */,
@@ -8355,10 +8418,12 @@
 				BC7CFFA92817E3BD00CAEB21 /* IncomeCountTopView.m in Sources */,
 				BC965AE82925D1D700AB90B0 /* ClassroomCoursewarePlayView.m in Sources */,
 				BCA353D82858B18100377661 /* StudentHomeworkList.m in Sources */,
+				BC433E622CE6F80E002870EC /* MinePageVipProgramCell.m in Sources */,
 				BC14E4892AB2FAE0000C4983 /* TenantUnbindDetailViewController.m in Sources */,
 				BCC9F44527F69BD200647449 /* Whiteboard.m in Sources */,
 				BCAD01C02872F54F0002CC40 /* LiveVideoListView.m in Sources */,
 				BC14E48C2AB2FBC7000C4983 /* TenantUnbindDetailBodyView.m in Sources */,
+				BCFB9BAB2CE58E8A00B66BC0 /* MinePageCourseTipsView.m in Sources */,
 				BC0A22B62847523E0065C1AB /* MemberListBodyView.m in Sources */,
 				275FA55F27F31AAF00EB6240 /* MinePageViewController.m in Sources */,
 				BC14E4842AB2F4C8000C4983 /* TenantUnbindBodyView.m in Sources */,
@@ -8457,6 +8522,7 @@
 				BCEA751A2818D59300886A86 /* BankNameModel.m in Sources */,
 				BC38C48F2AFA20AB00ABFCC2 /* KSNewGifRefreshFooter.m in Sources */,
 				BC02BCE428B324C9005CB483 /* LiveApplyControlView.m in Sources */,
+				BC433E542CE6E4F3002870EC /* JXCategoryIndicatorGradientLineView.m in Sources */,
 				BC56C96A2923736200AF301F /* KSHudLoagingManager.m in Sources */,
 				BC8A2CF828476C3000122BBE /* MusicScoreViewController.m in Sources */,
 				BC71DEF72A89F470003F165E /* TXChatAreaView.m in Sources */,

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/mine_style_edit.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "mine_style_edit@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "mine_style_edit@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/mine_style_edit.imageset/mine_style_edit@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Style/mine_style_edit.imageset/mine_style_edit@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_program_del.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "course_program_del@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "course_program_del@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_program_del.imageset/course_program_del@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_program_del.imageset/course_program_del@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_tips_del.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "course_tips_del@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "course_tips_del@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_tips_del.imageset/course_tips_del@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/course_tips_del.imageset/course_tips_del@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_fansGroup_icon.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "mine_fansGroup_icon@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "mine_fansGroup_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_fansGroup_icon.imageset/mine_fansGroup_icon@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_fansGroup_icon.imageset/mine_fansGroup_icon@3x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_instrument_logo.imageset/mine_instrument_logo@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_instrument_logo.imageset/mine_instrument_logo@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_style_icon.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "mine_style_icon@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "mine_style_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_style_icon.imageset/mine_style_icon@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_style_icon.imageset/mine_style_icon@3x.png


+ 50 - 26
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m

@@ -9,7 +9,7 @@
 #import "MinePageHeadView.h"
 #import "JXCategoryView.h"
 #import "JXPagerListRefreshView.h"
-#import "MinePageMienBodyView.h"
+#import "MinePageVIPCourseView.h"
 #import "MinePageCourseView.h"
 #import "MinePageVideoView.h"
 #import "TeacherInfo.h"
@@ -17,6 +17,7 @@
 #import "MinePageTopView.h"
 #import "BadgeIntroduceView.h"
 #import "MyStyleViewController.h"
+#import "JXCategoryIndicatorGradientLineView.h"
 
 #define HEADER_HEIGHT (50)
 
@@ -44,7 +45,7 @@
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     self.ks_prefersNavigationBarHidden = YES;
-    _titles = @[@"个人风采",@"陪练课",@"直播课",@"视频课",@"乐谱"];
+    _titles = @[@"VIP定制课",@"趣纠课",@"直播课",@"视频课",@"乐谱"];
     [self configUI];
     [self countUMEvent];
 }
@@ -73,15 +74,15 @@
     self.categoryView.titleColor = HexRGB(0x666666);
     self.categoryView.titleColorGradientEnabled = YES;
     
-    JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
-    lineView.indicatorColor = THEMECOLOR;
-    lineView.indicatorWidth = 16;
-    lineView.indicatorHeight = 4.0f;
+    JXCategoryIndicatorGradientLineView *lineView = [[JXCategoryIndicatorGradientLineView alloc] init];
+    lineView.indicatorColor = [UIColor clearColor];
+    [lineView configStartColor:HexRGB(0x2DC7AA) startPoint:CGPointMake(0.02, 1) endColor:HexRGBAlpha(0x2DC7AA, 0) endPoint:CGPointMake(1, 1)];
+    lineView.indicatorHeight = 6.0f;
+    lineView.verticalMargin = 15;
     self.categoryView.indicators = @[lineView];
     
     _pagerView = [self preferredPagingView];
     self.pagerView.frame = CGRectMake(0, topHeight, KPortraitWidth, KPortraitHeight - iPhoneXSafeBottomMargin - topHeight);
-//    self.pagerView.automaticallyDisplayListVerticalScrollIndicator = NO;
     self.pagerView.mainTableView.gestureDelegate = self;
     self.pagerView.backgroundColor = [UIColor clearColor];
     self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
@@ -110,6 +111,7 @@
     // 刷新达人认证和音乐人认证状态
     [self refreshAuthStatus];
     [self.headView.bgView sd_setImageWithURL:[NSURL URLWithString:[self.teacherInfo.heardUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:TEACHER_AVATAR]];
+    [self.pagerView reloadData];
 }
 
 - (void)refreshAuthStatus {
@@ -138,8 +140,8 @@
             MinePageCourseView *listView = (MinePageCourseView *)value;
             [listView beginFirstRefresh];
         }
-        else if ([value isKindOfClass:[MinePageMienBodyView class]]) {
-            MinePageMienBodyView *listView = (MinePageMienBodyView *)value;
+        else if ([value isKindOfClass:[MinePageVIPCourseView class]]) {
+            MinePageVIPCourseView *listView = (MinePageVIPCourseView *)value;
             [listView beginFirstRefresh];
         }
         else if ([value isKindOfClass:[kSJXCollectionView class]]) {
@@ -203,7 +205,8 @@
 }
 
 - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
-    return [self.topView getViewHeight];
+    NSUInteger topHeight = (NSUInteger)[self.topView getViewHeight:self.teacherInfo];
+    return topHeight;
 }
 
 - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
@@ -220,8 +223,8 @@
 }
 
 - (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
-    if (index == 0) { // 个人风采
-        MinePageMienBodyView *listView = [[MinePageMienBodyView alloc] init];
+    if (index == 0) { // VIP定制
+        MinePageVIPCourseView *listView = [[MinePageVIPCourseView alloc] init];
         listView.naviController = self.navigationController;
         [self.listViewArray replaceObjectAtIndex:index withObject:listView];
         self.listViewArray[index] = listView;
@@ -229,7 +232,7 @@
         [listView beginFirstRefresh];
         return listView;
     }
-    else if (index == 1) { // 陪练
+    else if (index == 1) { // 趣纠
         MinePageCourseView *listView = [[MinePageCourseView alloc] init];
         listView.naviController = self.navigationController;
         [self.listViewArray replaceObjectAtIndex:index withObject:listView];
@@ -326,7 +329,7 @@
 - (void)pagerView:(JXPagerView *)pagerView mainTableViewDidScroll:(UIScrollView *)scrollView {
     
     NSLog(@"sscroll content offset y %f", scrollView.contentOffset.y);
-    CGFloat height = [self.topView getViewHeight];
+    CGFloat height = [self.topView getViewHeight:self.teacherInfo];
     CGFloat space = scrollView.contentOffset.y;
     if (space > 100) {
         CGFloat rate = (space - 100) / (height - 100);
@@ -334,17 +337,14 @@
         self.headView.topView.backgroundColor = HexRGBAlpha(0xffffff, rate);
         if (rate == 1) {
             [self.headView.backImage setImage:[UIImage imageNamed:@"back_black"]];
-            self.headView.topTitle.textColor = HexRGB(0x333333);
         }
         else {
             [self.headView.backImage setImage:[UIImage imageNamed:@"back_white"]];
-            self.headView.topTitle.textColor = HexRGB(0xffffff);
         }
     }
     else {
         self.headView.topView.backgroundColor = [UIColor clearColor];
         [self.headView.backImage setImage:[UIImage imageNamed:@"back_white"]];
-        self.headView.topTitle.textColor = HexRGB(0xffffff);
     }
 }
 
@@ -354,8 +354,13 @@
     if (!_headView) {
         _headView = [MinePageHeadView shareInstance];
         MJWeakSelf;
-        [_headView backAction:^{
-            [weakSelf backAction];
+        [_headView backAction:^(BOOL isBack) {
+            if (isBack) {
+                [weakSelf backAction];
+            }
+            else {
+                [weakSelf editAction];
+            }
         }];
     }
     return _headView;
@@ -373,18 +378,37 @@
     if (!_topView) {
         _topView = [MinePageTopView shareInstance];
         MJWeakSelf;
-        [_topView badgeDetail:^(BOOL isBadgeIntroduce) {
-            if (isBadgeIntroduce) {
-                [weakSelf showDescAlert];
-            }
-            else {
-                [weakSelf editAction];
-            }
+        [_topView badgeDetail:^(MINEPAGE_TOP topAction) {
+            [weakSelf topAction:topAction];
         }];
     }
     return _topView;
 }
 
+- (void)topAction:(MINEPAGE_TOP)topAction {
+    switch (topAction) {
+        case MINEPAGE_TOP_STYLEVIDEO:
+        {
+            [self showStyleVideo];
+        }
+            break;
+        case MINEPAGE_TOP_FANSGROUP:
+        {
+            [self showFansGroup];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)showStyleVideo {
+    
+}
+
+- (void)showFansGroup {
+    
+}
 - (void)editAction {
     MyStyleViewController *style = [[MyStyleViewController alloc] init];
     [self.navigationController pushViewController:style animated:YES];

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/GradientLine/JXCategoryIndicatorGradientLineView.h

@@ -0,0 +1,18 @@
+//
+//  JXCategoryIndicatorGradientLineView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import "JXCategoryIndicatorLineView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface JXCategoryIndicatorGradientLineView : JXCategoryIndicatorLineView
+
+- (void)configStartColor:(UIColor *)startColor startPoint:(CGPoint)startPoint endColor:(UIColor *)endColor endPoint:(CGPoint)endPoint;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 61 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/GradientLine/JXCategoryIndicatorGradientLineView.m

@@ -0,0 +1,61 @@
+//
+//  JXCategoryIndicatorGradientLineView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import "JXCategoryIndicatorGradientLineView.h"
+
+@interface JXCategoryIndicatorGradientLineView ()
+
+@property (nonatomic, strong) CAGradientLayer *gradientLayer;
+
+@property (nonatomic, strong) UIColor *startColor;
+
+@property (nonatomic, assign) CGPoint startPoint;
+
+@property (nonatomic, strong) UIColor *endColor;
+
+@property (nonatomic, assign) CGPoint endPoint;
+@end
+
+@implementation JXCategoryIndicatorGradientLineView
+
+- (void)configStartColor:(UIColor *)startColor startPoint:(CGPoint)startPoint endColor:(UIColor *)endColor endPoint:(CGPoint)endPoint {
+    self.startColor = startColor;
+    self.startPoint = startPoint;
+    self.endColor = endColor;
+    self.endPoint = endPoint;
+    self.gradientLayer.startPoint = startPoint;
+    self.gradientLayer.endPoint = endPoint;
+    self.gradientLayer.colors = @[(__bridge id)startColor.CGColor, (__bridge id)endColor.CGColor];
+    if (![self.layer.sublayers containsObject:self.gradientLayer]) {
+        [self.layer addSublayer:self.gradientLayer];
+    }
+}
+
+// 在 layoutSubviews 中更新 gradientLayer 的位置和大小
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    self.gradientLayer.frame = self.bounds;
+    self.gradientLayer.cornerRadius = self.bounds.size.height / 2;
+}
+
+- (CAGradientLayer *)gradientLayer {
+    if (!_gradientLayer) {
+        _gradientLayer = [[CAGradientLayer alloc] init];
+        _gradientLayer.locations = @[@(0),@(1)];
+    }
+    return _gradientLayer;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 2 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.h

@@ -7,14 +7,13 @@
 
 #import <UIKit/UIKit.h>
 
-typedef void(^MinePageBack)(void);
+typedef void(^MinePageBack)(BOOL isBack);
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface MinePageHeadView : UIView
-@property (weak, nonatomic) IBOutlet UIImageView *backImage;
 
-@property (weak, nonatomic) IBOutlet UILabel *topTitle;
+@property (weak, nonatomic) IBOutlet UIImageView *backImage;
 
 @property (weak, nonatomic) IBOutlet UIView *topView;
 

+ 8 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.m

@@ -38,12 +38,18 @@
 
 - (IBAction)back:(id)sender {
     if (self.callback) {
-        self.callback();
+        self.callback(YES);
+    }
+}
+
+- (IBAction)editAction:(id)sender {
+    if (self.callback) {
+        self.callback(NO);
     }
 }
 
 - (CGFloat)getViewHeight {
-    return 188 + iPhoneXSafeTopMargin;
+    return kNaviBarHeight + 154;
 }
 
 

+ 54 - 11
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -46,22 +46,65 @@
                                 <action selector="back:" destination="iN0-l3-epB" eventType="touchUpInside" id="4lb-dc-K1q"/>
                             </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="4go-Bw-8sZ">
-                            <rect key="frame" x="170" y="55" width="74" height="22"/>
-                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
-                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <nil key="highlightedColor"/>
-                        </label>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0dw-OD-PbF">
+                            <rect key="frame" x="338" y="53" width="62" height="26"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_style_edit" translatesAutoresizingMaskIntoConstraints="NO" id="4Zd-Dr-riY">
+                                    <rect key="frame" x="6" y="6" width="14" height="14"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="14" id="Cgk-Xr-mGc"/>
+                                        <constraint firstAttribute="height" constant="14" id="P2k-Mn-ouY"/>
+                                    </constraints>
+                                </imageView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="编辑" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Kd-Rc-d8C">
+                                    <rect key="frame" x="26" y="5" width="26" height="16"/>
+                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="13"/>
+                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jZ4-hZ-vd0">
+                                    <rect key="frame" x="0.0" y="0.0" width="62" height="26"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="editAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="p1e-Tx-00M"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
+                            <constraints>
+                                <constraint firstItem="jZ4-hZ-vd0" firstAttribute="top" secondItem="0dw-OD-PbF" secondAttribute="top" id="1j3-ch-PFu"/>
+                                <constraint firstAttribute="trailing" secondItem="jZ4-hZ-vd0" secondAttribute="trailing" id="2Cv-b1-2vL"/>
+                                <constraint firstItem="4Zd-Dr-riY" firstAttribute="leading" secondItem="0dw-OD-PbF" secondAttribute="leading" constant="6" id="8HM-Mq-Ex4"/>
+                                <constraint firstItem="4Zd-Dr-riY" firstAttribute="centerY" secondItem="0dw-OD-PbF" secondAttribute="centerY" id="J3v-cq-ljO"/>
+                                <constraint firstItem="1Kd-Rc-d8C" firstAttribute="leading" secondItem="4Zd-Dr-riY" secondAttribute="trailing" constant="6" id="JZf-W5-ZJT"/>
+                                <constraint firstItem="jZ4-hZ-vd0" firstAttribute="leading" secondItem="0dw-OD-PbF" secondAttribute="leading" id="KUw-W0-WX7"/>
+                                <constraint firstAttribute="bottom" secondItem="jZ4-hZ-vd0" secondAttribute="bottom" id="LlO-0H-Mna"/>
+                                <constraint firstAttribute="height" constant="26" id="Nn3-yC-Trg"/>
+                                <constraint firstItem="1Kd-Rc-d8C" firstAttribute="centerY" secondItem="0dw-OD-PbF" secondAttribute="centerY" id="Umz-C8-FJh"/>
+                                <constraint firstAttribute="trailing" secondItem="1Kd-Rc-d8C" secondAttribute="trailing" constant="10" id="fJj-S9-HSE"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="14"/>
+                                </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                    <real key="value" value="1"/>
+                                </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                    <color key="value" red="1" green="1" blue="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
                     </subviews>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="88" id="1wg-e6-kqA"/>
+                        <constraint firstAttribute="trailing" secondItem="0dw-OD-PbF" secondAttribute="trailing" constant="14" id="42P-6G-RMi"/>
                         <constraint firstAttribute="bottom" secondItem="LL3-u6-PTR" secondAttribute="bottom" id="6KH-1M-vAP"/>
                         <constraint firstItem="LL3-u6-PTR" firstAttribute="leading" secondItem="emY-nQ-Sbn" secondAttribute="leading" id="AmB-tA-N1v"/>
-                        <constraint firstItem="4go-Bw-8sZ" firstAttribute="centerY" secondItem="LL3-u6-PTR" secondAttribute="centerY" id="HUv-vT-SjJ"/>
                         <constraint firstItem="7zL-CV-PVX" firstAttribute="leading" secondItem="emY-nQ-Sbn" secondAttribute="leading" constant="22" id="JXX-id-lc3"/>
                         <constraint firstItem="LL3-u6-PTR" firstAttribute="centerY" secondItem="7zL-CV-PVX" secondAttribute="centerY" id="Umc-bJ-zgR"/>
-                        <constraint firstItem="4go-Bw-8sZ" firstAttribute="centerX" secondItem="emY-nQ-Sbn" secondAttribute="centerX" id="iRs-kb-Pcu"/>
+                        <constraint firstItem="0dw-OD-PbF" firstAttribute="centerY" secondItem="7zL-CV-PVX" secondAttribute="centerY" id="rbd-8a-WPk"/>
                     </constraints>
                 </view>
             </subviews>
@@ -85,7 +128,6 @@
             <connections>
                 <outlet property="backImage" destination="7zL-CV-PVX" id="Rh5-bw-0od"/>
                 <outlet property="bgView" destination="thf-Z9-Jzc" id="bcT-kn-PMh"/>
-                <outlet property="topTitle" destination="4go-Bw-8sZ" id="PK9-Z6-G7j"/>
                 <outlet property="topView" destination="emY-nQ-Sbn" id="Scs-7L-BfX"/>
                 <outlet property="viewHeight" destination="1wg-e6-kqA" id="79o-QW-2Js"/>
             </connections>
@@ -94,5 +136,6 @@
     </objects>
     <resources>
         <image name="back_white" width="12" height="20"/>
+        <image name="mine_style_edit" width="14" height="14"/>
     </resources>
 </document>

+ 7 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.h

@@ -7,9 +7,14 @@
 
 #import <UIKit/UIKit.h>
 
+typedef NS_ENUM(NSInteger, MINEPAGE_TOP) {
+    MINEPAGE_TOP_STYLEVIDEO, // 老师风采视频
+    MINEPAGE_TOP_FANSGROUP,  // 粉丝群
+};
+
 NS_ASSUME_NONNULL_BEGIN
 
-typedef void(^MinePageTopCallback)(BOOL isBadgeIntroduce);
+typedef void(^MinePageTopCallback)(MINEPAGE_TOP topAction);
 
 @interface MinePageTopView : UIView
 
@@ -17,7 +22,7 @@ typedef void(^MinePageTopCallback)(BOOL isBadgeIntroduce);
 
 - (void)configSource:(id)source;
 
-- (CGFloat)getViewHeight;
+- (CGFloat)getViewHeight:(id)source;
 
 - (void)badgeDetail:(MinePageTopCallback)callback;
 

+ 78 - 78
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.m

@@ -8,8 +8,14 @@
 #import "MinePageTopView.h"
 #import "TeacherInfo.h"
 #import "KSStarView.h"
+#import "UIView+KSLayer.h"
 
 @interface MinePageTopView ()
+@property (weak, nonatomic) IBOutlet UIView *cornerView;
+
+@property (weak, nonatomic) IBOutlet UIView *styleColorLayer;
+
+@property (weak, nonatomic) IBOutlet UIView *fansGroupColorLayer;
 
 @property (weak, nonatomic) IBOutlet UIImageView *userAvatar;
 
@@ -23,30 +29,37 @@
 
 @property (weak, nonatomic) IBOutlet UILabel *finishCourse;
 
-@property (weak, nonatomic) IBOutlet UILabel *unfinishCourse;
 
 @property (weak, nonatomic) IBOutlet KSStarView *starView;
 
 @property (weak, nonatomic) IBOutlet UIImageView *viperImage;
-@property (weak, nonatomic) IBOutlet UIImageView *styleImage;
-@property (weak, nonatomic) IBOutlet UIImageView *videoImage;
-@property (weak, nonatomic) IBOutlet UIImageView *liveImage;
-@property (weak, nonatomic) IBOutlet UIImageView *musicImage;
-
-@property (weak, nonatomic) IBOutlet UIImageView *firstImage;
-@property (weak, nonatomic) IBOutlet UIImageView *secondImage;
-
-@property (weak, nonatomic) IBOutlet NSLayoutConstraint *firstImageWidth;
-@property (weak, nonatomic) IBOutlet NSLayoutConstraint *secondImageWidth;
 
 @property (nonatomic, copy) MinePageTopCallback callback;
 
+@property (nonatomic, strong) UIScrollView *tagScroll;
+@property (weak, nonatomic) IBOutlet UILabel *introduceLabel;
+
 @end
 
 
 
 @implementation MinePageTopView
 
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    CAGradientLayer *styleLayer = [UIView createGradientLayerFromColor:HexRGBAlpha(0x5CD6D6, 0.07) startPoint:CGPointMake(1, 1) endColor:HexRGBAlpha(0xffffff, 0.03) endPoint:CGPointMake(0, 0.16) bounds:CGRectMake(0, 0, (KPortraitWidth - 14 * 2 - 11) / 2, 36)];
+    [self.styleColorLayer.layer addSublayer:styleLayer];
+    
+    CAGradientLayer *fansGroupLayer = [UIView createGradientLayerFromColor:HexRGBAlpha(0xD6605C, 0.07) startPoint:CGPointMake(0.97, 0.81) endColor:HexRGBAlpha(0xffffff, 0.04) endPoint:CGPointMake(0, 0) bounds:CGRectMake(0, 0, (KPortraitWidth - 14 * 2 - 11) / 2, 36)];
+    [self.fansGroupColorLayer.layer addSublayer:fansGroupLayer];
+    self.cornerView.layer.cornerRadius = 10.0f;
+    self.cornerView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
+    [self.subjectView addSubview:self.tagScroll];
+    [self.tagScroll mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.subjectView);
+    }];
+}
+
 + (instancetype)shareInstance {
     MinePageTopView *view = [[[NSBundle mainBundle] loadNibNamed:@"MinePageTopView" owner:nil options:nil] firstObject];
     return view;
@@ -65,7 +78,6 @@
         self.starView.rate = infoMessage.starGrade / 5.0f;
         self.fansCount.text = [NSString stringWithFormat:@"%.0f",infoMessage.fansNum];
         self.finishCourse.text = [NSString stringWithFormat:@"%.0f",infoMessage.expTime];
-        self.unfinishCourse.text = [NSString stringWithFormat:@"%.0f",infoMessage.unExpTime];
         
         if (![NSString isEmptyString:infoMessage.heardUrl]) {
             [self.userAvatar sd_setImageWithURL:[NSURL URLWithString:[infoMessage.heardUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:TEACHER_AVATAR]];
@@ -80,7 +92,7 @@
             self.teacherName.text = infoMessage.username;
         }
         if ([NSString isEmptyString:infoMessage.subjectName]) {
-            [self.subjectView removeAllSubViews];
+            [self.tagScroll removeAllSubViews];
         }
         else {
             NSArray *tagArray = [infoMessage.subjectName componentsSeparatedByString:@","];
@@ -88,7 +100,6 @@
             [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
         }
         
-        NSArray *tagArray = [infoMessage.tag componentsSeparatedByString:@","];
         NSString *viperImage = @"";
         NSString *vipType = infoMessage.userVip.vipType;
         
@@ -107,79 +118,60 @@
         
         [self.viperImage setImage:[UIImage imageNamed:viperImage]];
         
-        [self.styleImage setImage:[UIImage imageNamed:@"mineStyle_nomal"]];
-        [self.videoImage setImage:[UIImage imageNamed:@"mineVideo_nomal"]];
-        [self.liveImage setImage:[UIImage imageNamed:@"mineLive_nomal"]];
-        [self.musicImage setImage:[UIImage imageNamed:@"mineMusic_nomal"]];
-        
-        BOOL hasDegreeAuth = infoMessage.degreeFlag;
-        BOOL hasTeacherAuth = infoMessage.teacherFlag;
-        
-        for (NSString *tagString in tagArray) {
-            if ([tagString isEqualToString:@"STYLE"]) {
-                [self.styleImage setImage:[UIImage imageNamed:@"mineStyle_active"]];
-            }
-            else if ([tagString isEqualToString:@"VIDEO"]) {
-                [self.videoImage setImage:[UIImage imageNamed:@"mineVideo_active"]];
-            }
-            else if ([tagString isEqualToString:@"LIVE"]) {
-                [self.liveImage setImage:[UIImage imageNamed:@"mineLive_active"]];
-            }
-            else if ([tagString isEqualToString:@"MUSIC"]) {
-                [self.musicImage setImage:[UIImage imageNamed:@"mineMusic_active"]];
-            }
-        }
-        
-        if (hasDegreeAuth && hasTeacherAuth) {
-            [self.firstImage setImage:[UIImage imageNamed:@"education_icon"]];
-            self.firstImage.hidden = NO;
-            self.firstImageWidth.constant = 39.0f;
-            [self.secondImage setImage:[UIImage imageNamed:@"qualification_icon"]];
-            self.secondImage.hidden = NO;
-            self.secondImageWidth.constant = 39.0f;
-        }
-        else {
-            if (hasDegreeAuth) {
-                [self.firstImage setImage:[UIImage imageNamed:@"education_icon"]];
-                self.firstImage.hidden = NO;
-                self.firstImageWidth.constant = 39.0f;
-                self.secondImage.hidden = YES;
-                self.secondImageWidth.constant = 0.0f;
-            }
-            else if (hasTeacherAuth) {
-                [self.firstImage setImage:[UIImage imageNamed:@"qualification_icon"]];
-                self.firstImage.hidden = NO;
-                self.firstImageWidth.constant = 39.0f;
-                self.secondImage.hidden = YES;
-                self.secondImageWidth.constant = 0.0f;
-            }
-            else {
-                self.firstImage.hidden = YES;
-                self.firstImageWidth.constant = 0.0f;
-                self.secondImage.hidden = YES;
-                self.secondImageWidth.constant = 0.0f;
-            }
+        // 描述
+        NSString *introduce = infoMessage.introduction;
+        if ([NSString isEmptyString:introduce]) {
+            introduce = @"暂无简介";
         }
+        NSMutableParagraphStyle *paragraphStyle = [self getParagraphStyleWithFont:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+        CGFloat baselineOffset = [self getBaseOffline:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+        NSMutableAttributedString *attrs = [[NSMutableAttributedString alloc] initWithString:introduce attributes:@{NSParagraphStyleAttributeName:paragraphStyle, NSBaselineOffsetAttributeName:@(baselineOffset),NSFontAttributeName:[UIFont systemFontOfSize:13.0f]}];
+        self.introduceLabel.attributedText = attrs;
     }
 }
 
+- (CGFloat)getBaseOffline:(UIFont *)font lineHeight:(CGFloat)lineHeight {
+    CGFloat baselineOffset = (lineHeight - font.lineHeight) / 4;
+    return baselineOffset;
+}
 
-- (CGFloat)getViewHeight {
-    return 290.0f;
+- (NSMutableParagraphStyle *)getParagraphStyleWithFont:(UIFont *)font lineHeight:(CGFloat)lineHeigh {
+    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+    paragraphStyle.maximumLineHeight = lineHeigh;
+    paragraphStyle.minimumLineHeight = lineHeigh;
+    return paragraphStyle;
+}
+
+
+
+- (CGFloat)getViewHeight:(id)source {
+    
+    if ([source isKindOfClass:[TeacherInfo class]]) {
+        TeacherInfo *infoMessage = source;
+        NSString *introduce = infoMessage.introduction;
+        if ([NSString isEmptyString:introduce]) {
+            introduce = @"暂无简介";
+        }
+        NSMutableParagraphStyle *paragraphStyle = [self getParagraphStyleWithFont:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+        CGFloat baselineOffset = [self getBaseOffline:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+        CGFloat lableHeight = [introduce boundingRectWithSize:CGSizeMake(KPortraitWidth - 24 * 2, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSParagraphStyleAttributeName:paragraphStyle, NSBaselineOffsetAttributeName:@(baselineOffset),NSFontAttributeName:[UIFont systemFontOfSize:13.0f]} context:nil].size.height + 1;
+        return 131 + 14 + 64 + lableHeight + 18;
+    }
+    return 280.0f;
 }
 
 - (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {
-    [self.subjectView removeAllSubViews];
+    [self.tagScroll removeAllSubViews];
     CGFloat width = maxWidth;
     CGFloat xSpace = 0.0f;
     for (NSInteger i = 0; i < tagArray.count; i++) {
         NSString *tagString = tagArray[i];
-        CGFloat labelWidth = [self getStringWidthInLabel:tagString font:[UIFont systemFontOfSize:11.0f]];
-        CGFloat viewWidth = labelWidth + 8;
+        CGFloat labelWidth = [self getStringWidthInLabel:tagString font:[UIFont systemFontOfSize:10.0f]];
+        CGFloat viewWidth = labelWidth + 16;
         if (xSpace + viewWidth > width) {
             return;
         }
-        CGRect frame = CGRectMake(xSpace, 0, viewWidth, 16.0f);
+        CGRect frame = CGRectMake(xSpace, 0, viewWidth, 20.0f);
         [self createTagLabelViewWithName:tagString frame:frame];
         xSpace += (viewWidth + 6);
     }
@@ -192,19 +184,19 @@
 
 - (void)createTagLabelViewWithName:(NSString *)name frame:(CGRect)frame {
     UIView *bgView = [[UIView alloc] initWithFrame:frame];
-    bgView.backgroundColor = HexRGB(0xEFFBF9);
-    bgView.layer.cornerRadius = 4.0f;
+    bgView.backgroundColor = HexRGBAlpha(0xFFFFFF, 0.2f);
+    bgView.layer.cornerRadius = 10.0f;
     [self.subjectView addSubview:bgView];
     
     UILabel *tagLabel = [[UILabel alloc] init];
     tagLabel.text = name;
-    tagLabel.textColor = HexRGB(0x2DC7AA);
-    tagLabel.font = [UIFont systemFontOfSize:11.0f];
+    tagLabel.textColor = HexRGB(0xFFFFFF);
+    tagLabel.font = [UIFont systemFontOfSize:10.0f];
     tagLabel.textAlignment = NSTextAlignmentCenter;
     [bgView addSubview:tagLabel];
     [tagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.mas_equalTo(bgView.mas_left).offset(4);
-        make.right.mas_equalTo(bgView.mas_right).offset(-4);
+        make.left.mas_equalTo(bgView.mas_left).offset(8);
+        make.right.mas_equalTo(bgView.mas_right).offset(-8);
         make.top.bottom.mas_equalTo(bgView);
     }];
 }
@@ -221,6 +213,14 @@
     }
 }
 
+- (UIScrollView *)tagScroll {
+    if (!_tagScroll) {
+        _tagScroll = [[UIScrollView alloc] initWithFrame:CGRectZero];
+        _tagScroll.showsHorizontalScrollIndicator = YES;
+        _tagScroll.showsVerticalScrollIndicator = YES;
+    }
+    return _tagScroll;
+}
 
 /*
 // Only override drawRect: if you perform custom drawing.

+ 216 - 291
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.xib

@@ -1,24 +1,62 @@
 <?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">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" 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"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
         <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="MinePageTopView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="290"/>
+            <rect key="frame" x="0.0" y="0.0" width="374" height="300"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="w1f-9h-A4M">
-                    <rect key="frame" x="14" y="39" width="386" height="240"/>
+                    <rect key="frame" x="0.0" y="14" width="374" height="286"/>
                     <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_instrument_logo" translatesAutoresizingMaskIntoConstraints="NO" id="IsQ-zh-7a5">
+                            <rect key="frame" x="14" y="94" width="44" height="16"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="44" id="4ib-jt-mOW"/>
+                                <constraint firstAttribute="height" constant="16" id="SFE-Ih-9Bo"/>
+                            </constraints>
+                        </imageView>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fZT-24-HFt">
+                            <rect key="frame" x="68" y="92" width="292" height="20"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="vKC-05-GFT"/>
+                            </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="LhQ-B1-N8g">
+                            <rect key="frame" x="108" y="12" width="0.0" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="ttJ-dx-kxO"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="22"/>
+                            <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" text="粉丝" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hqM-qu-Ygd">
+                            <rect key="frame" x="108" y="48" width="28" height="14"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="14" id="9Qh-NH-weO"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="1" green="1" blue="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="X" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nI7-Zj-cP3">
+                            <rect key="frame" x="142" y="45.5" width="9" height="19"/>
+                            <gestureRecognizers/>
+                            <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="16"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="j04-k1-RIV">
-                            <rect key="frame" x="174" y="96" width="90" height="19"/>
+                            <rect key="frame" x="115" y="14.5" width="90" height="19"/>
                             <subviews>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7YI-eG-JcD" customClass="KSStarView">
                                     <rect key="frame" x="0.0" y="0.0" width="90" height="19"/>
@@ -35,313 +73,213 @@
                                 <constraint firstAttribute="width" constant="90" id="y0S-Fk-5a6"/>
                             </constraints>
                         </view>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="education_icon" translatesAutoresizingMaskIntoConstraints="NO" id="HE2-vS-rZC">
-                            <rect key="frame" x="21" y="57.5" width="39" height="16"/>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zyK-kV-Bos">
+                            <rect key="frame" x="161" y="49" width="1" height="12"/>
+                            <color key="backgroundColor" white="1" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
-                                <constraint firstAttribute="height" constant="16" id="89i-Zb-0oV"/>
-                                <constraint firstAttribute="width" constant="39" id="eqp-Dk-Zah"/>
+                                <constraint firstAttribute="width" constant="1" id="LhZ-CQ-DKT"/>
+                                <constraint firstAttribute="height" constant="12" id="lkr-3c-9pA"/>
                             </constraints>
-                        </imageView>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="qualification_icon" translatesAutoresizingMaskIntoConstraints="NO" id="V1i-h1-rXV">
-                            <rect key="frame" x="66" y="57.5" width="39" height="16"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="16" id="73J-NP-LJJ"/>
-                                <constraint firstAttribute="width" constant="39" id="MJP-a5-PaL"/>
-                            </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="LhQ-B1-N8g">
-                            <rect key="frame" x="11" y="53" width="0.0" height="25"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="25" id="ttJ-dx-kxO"/>
-                            </constraints>
-                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
-                            <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="calibratedRGB"/>
+                        </view>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="已上课时" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VX3-MA-GKi">
+                            <rect key="frame" x="172" y="46.5" width="56" height="17"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="1" green="1" blue="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sxy-XN-92K">
-                            <rect key="frame" x="315" y="11" width="60" height="28"/>
-                            <color key="backgroundColor" red="0.84705882352941175" green="1" blue="0.97254901960784312" alpha="1" colorSpace="calibratedRGB"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="60" id="5Lv-mb-fqw"/>
-                                <constraint firstAttribute="height" constant="28" id="dDW-No-JUn"/>
-                            </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.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="calibratedRGB"/>
-                            </state>
-                            <userDefinedRuntimeAttributes>
-                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="14"/>
-                                </userDefinedRuntimeAttribute>
-                            </userDefinedRuntimeAttributes>
-                            <connections>
-                                <action selector="editAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="2l2-4J-UOE"/>
-                            </connections>
-                        </button>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_instrument_logo" translatesAutoresizingMaskIntoConstraints="NO" id="IsQ-zh-7a5">
-                            <rect key="frame" x="13" y="125" width="68" height="17"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="17" id="HJa-ca-Sql"/>
-                                <constraint firstAttribute="width" constant="68" id="JHn-lI-mz8"/>
-                            </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="vZ2-QD-d8h">
-                            <rect key="frame" x="11" y="98" width="31" height="15"/>
-                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
-                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                        <label opaque="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="X" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WdG-ah-bQ7">
+                            <rect key="frame" x="234" y="45.5" width="9" height="19"/>
+                            <gestureRecognizers/>
+                            <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="16"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <nil key="highlightedColor"/>
                         </label>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nhJ-jg-o1N">
-                            <rect key="frame" x="42" y="93.5" width="76" height="24"/>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Jq-VA-6uM">
+                            <rect key="frame" x="0.0" y="131" width="374" height="155"/>
                             <subviews>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mineStyle_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="lc6-oJ-H90">
-                                    <rect key="frame" x="0.0" y="4" width="16" height="16"/>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="USe-oC-N7T">
+                                    <rect key="frame" x="14" y="14" width="167.5" height="36"/>
+                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                     <constraints>
-                                        <constraint firstAttribute="width" constant="16" id="682-cb-Xnt"/>
-                                        <constraint firstAttribute="height" constant="16" id="PNE-zN-nhS"/>
+                                        <constraint firstAttribute="height" constant="36" id="m9a-ak-WO9"/>
                                     </constraints>
-                                </imageView>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mineVideo_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="YEy-rl-QiY">
-                                    <rect key="frame" x="20" y="4" width="16" height="16"/>
-                                </imageView>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mineLive_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="msK-hu-IGj">
-                                    <rect key="frame" x="40" y="4" width="16" height="16"/>
-                                </imageView>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mineMusic_nomal" translatesAutoresizingMaskIntoConstraints="NO" id="Gtu-Mm-ocB">
-                                    <rect key="frame" x="60" y="4" width="16" height="16"/>
-                                </imageView>
-                            </subviews>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <gestureRecognizers/>
-                            <constraints>
-                                <constraint firstItem="YEy-rl-QiY" firstAttribute="width" secondItem="lc6-oJ-H90" secondAttribute="width" id="0vQ-v4-H35"/>
-                                <constraint firstItem="msK-hu-IGj" firstAttribute="leading" secondItem="YEy-rl-QiY" secondAttribute="trailing" constant="4" id="5FR-xI-N1R"/>
-                                <constraint firstItem="YEy-rl-QiY" firstAttribute="height" secondItem="lc6-oJ-H90" secondAttribute="height" id="5p5-ob-RhJ"/>
-                                <constraint firstItem="YEy-rl-QiY" firstAttribute="centerY" secondItem="lc6-oJ-H90" secondAttribute="centerY" id="6Gh-SR-OKh"/>
-                                <constraint firstItem="Gtu-Mm-ocB" firstAttribute="centerY" secondItem="lc6-oJ-H90" secondAttribute="centerY" id="8Ca-Q0-vWc"/>
-                                <constraint firstItem="msK-hu-IGj" firstAttribute="centerY" secondItem="lc6-oJ-H90" secondAttribute="centerY" id="8Lt-VW-ch0"/>
-                                <constraint firstItem="lc6-oJ-H90" firstAttribute="centerY" secondItem="nhJ-jg-o1N" secondAttribute="centerY" id="9JL-vE-0I0"/>
-                                <constraint firstAttribute="height" constant="24" id="H5T-sZ-VbG"/>
-                                <constraint firstItem="Gtu-Mm-ocB" firstAttribute="leading" secondItem="msK-hu-IGj" secondAttribute="trailing" constant="4" id="HUY-bk-dNV"/>
-                                <constraint firstItem="msK-hu-IGj" firstAttribute="height" secondItem="lc6-oJ-H90" secondAttribute="height" id="RMj-pG-D5b"/>
-                                <constraint firstItem="Gtu-Mm-ocB" firstAttribute="width" secondItem="lc6-oJ-H90" secondAttribute="width" id="TFr-3m-1Yf"/>
-                                <constraint firstItem="YEy-rl-QiY" firstAttribute="leading" secondItem="lc6-oJ-H90" secondAttribute="trailing" constant="4" id="fnW-Of-fnf"/>
-                                <constraint firstItem="Gtu-Mm-ocB" firstAttribute="height" secondItem="lc6-oJ-H90" secondAttribute="height" id="ufV-aq-xhc"/>
-                                <constraint firstItem="lc6-oJ-H90" firstAttribute="leading" secondItem="nhJ-jg-o1N" secondAttribute="leading" id="vb1-w7-FLd"/>
-                                <constraint firstAttribute="trailing" secondItem="Gtu-Mm-ocB" secondAttribute="trailing" id="xw6-vI-D4o"/>
-                                <constraint firstItem="msK-hu-IGj" firstAttribute="width" secondItem="lc6-oJ-H90" secondAttribute="width" id="z08-NF-hRX"/>
-                            </constraints>
-                            <connections>
-                                <outletCollection property="gestureRecognizers" destination="pU3-So-ynT" appends="YES" id="kn3-5a-J1C"/>
-                            </connections>
-                        </view>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="评分:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8kd-Ti-hHu">
-                            <rect key="frame" x="143" y="98" width="31" height="15"/>
-                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
-                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
-                            <nil key="highlightedColor"/>
-                        </label>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fZT-24-HFt">
-                            <rect key="frame" x="91" y="125.5" width="285" height="16"/>
-                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="16" id="vKC-05-GFT"/>
-                            </constraints>
-                        </view>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TF1-4L-ikX">
-                            <rect key="frame" x="0.0" y="150" width="386" height="80"/>
-                            <subviews>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oOv-s2-KI6">
-                                    <rect key="frame" x="0.0" y="0.0" width="128.5" height="80"/>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="6"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="1"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                            <color key="value" red="0.8901960784313725" green="0.93725490196078431" blue="0.92941176470588238" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="F9X-uo-yfP">
+                                    <rect key="frame" x="14" y="14" width="167.5" height="36"/>
                                     <subviews>
-                                        <label opaque="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nI7-Zj-cP3">
-                                            <rect key="frame" x="0.0" y="15" width="128.5" height="26"/>
-                                            <gestureRecognizers/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="26" id="s5v-ce-xWq"/>
-                                            </constraints>
-                                            <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="22"/>
-                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="unU-3i-jae">
-                                            <rect key="frame" x="128" y="28" width="0.5" height="24"/>
-                                            <color key="backgroundColor" red="0.91764705879999997" green="0.91764705879999997" blue="0.91764705879999997" alpha="1" colorSpace="calibratedRGB"/>
-                                            <constraints>
-                                                <constraint firstAttribute="width" constant="0.5" id="7XD-bU-pXc"/>
-                                                <constraint firstAttribute="height" constant="24" id="BOX-qa-f47"/>
-                                            </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="hqM-qu-Ygd">
-                                            <rect key="frame" x="50" y="42" width="29" height="28"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="28" id="9Qh-NH-weO"/>
-                                            </constraints>
-                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_style_icon" translatesAutoresizingMaskIntoConstraints="NO" id="jMH-Lj-rqt">
+                                            <rect key="frame" x="45" y="10" width="16" height="16"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="个人风采" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QgR-yT-JBY">
+                                            <rect key="frame" x="67" y="9.5" width="56" height="17"/>
+                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                             <nil key="highlightedColor"/>
                                         </label>
+                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BC8-rm-1MC">
+                                            <rect key="frame" x="0.0" y="0.0" width="167.5" height="36"/>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                        </button>
                                     </subviews>
                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                    <gestureRecognizers/>
                                     <constraints>
-                                        <constraint firstAttribute="trailing" secondItem="unU-3i-jae" secondAttribute="trailing" id="QWF-fP-WLi"/>
-                                        <constraint firstAttribute="bottom" secondItem="hqM-qu-Ygd" secondAttribute="bottom" constant="10" id="Wxi-Bd-jeR"/>
-                                        <constraint firstAttribute="trailing" secondItem="nI7-Zj-cP3" secondAttribute="trailing" id="YN1-T9-S1S"/>
-                                        <constraint firstItem="hqM-qu-Ygd" firstAttribute="centerX" secondItem="nI7-Zj-cP3" secondAttribute="centerX" id="crZ-yy-Trf"/>
-                                        <constraint firstItem="hqM-qu-Ygd" firstAttribute="top" secondItem="nI7-Zj-cP3" secondAttribute="bottom" constant="1" id="jP7-Do-i5Y"/>
-                                        <constraint firstItem="unU-3i-jae" firstAttribute="centerY" secondItem="oOv-s2-KI6" secondAttribute="centerY" id="jZZ-G6-WGA"/>
-                                        <constraint firstItem="nI7-Zj-cP3" firstAttribute="leading" secondItem="oOv-s2-KI6" secondAttribute="leading" id="nUn-70-jO4"/>
+                                        <constraint firstItem="QgR-yT-JBY" firstAttribute="centerY" secondItem="jMH-Lj-rqt" secondAttribute="centerY" id="8z1-LC-YDB"/>
+                                        <constraint firstAttribute="bottom" secondItem="BC8-rm-1MC" secondAttribute="bottom" id="CtL-ex-M9M"/>
+                                        <constraint firstAttribute="trailing" secondItem="BC8-rm-1MC" secondAttribute="trailing" id="WIg-RW-zHt"/>
+                                        <constraint firstItem="QgR-yT-JBY" firstAttribute="centerX" secondItem="F9X-uo-yfP" secondAttribute="centerX" constant="11" id="l6T-HP-CGk"/>
+                                        <constraint firstItem="QgR-yT-JBY" firstAttribute="leading" secondItem="jMH-Lj-rqt" secondAttribute="trailing" constant="6" id="m44-2O-IF1"/>
+                                        <constraint firstItem="QgR-yT-JBY" firstAttribute="centerY" secondItem="F9X-uo-yfP" secondAttribute="centerY" id="nh4-N1-xfz"/>
+                                        <constraint firstItem="BC8-rm-1MC" firstAttribute="top" secondItem="F9X-uo-yfP" secondAttribute="top" id="qfx-uc-BsC"/>
+                                        <constraint firstItem="BC8-rm-1MC" firstAttribute="leading" secondItem="F9X-uo-yfP" secondAttribute="leading" id="u8O-lW-WCT"/>
                                     </constraints>
                                 </view>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OZO-kw-VjD">
-                                    <rect key="frame" x="128.5" y="0.0" width="129" height="80"/>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Mgy-O1-NXO">
+                                    <rect key="frame" x="192.5" y="14" width="167.5" height="36"/>
+                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="6"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="1"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                            <color key="value" red="1" green="0.92156862745098034" blue="0.89803921568627454" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ywr-qF-6hh">
+                                    <rect key="frame" x="192.5" y="14" width="167.5" height="36"/>
                                     <subviews>
-                                        <label opaque="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WdG-ah-bQ7">
-                                            <rect key="frame" x="0.0" y="15" width="129" height="26"/>
-                                            <gestureRecognizers/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="26" id="kkf-0a-Aft"/>
-                                            </constraints>
-                                            <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="22"/>
-                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" 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="VX3-MA-GKi">
-                                            <rect key="frame" x="35.5" y="42" width="58" height="28"/>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_fansGroup_icon" translatesAutoresizingMaskIntoConstraints="NO" id="AH4-lx-iZW">
+                                            <rect key="frame" x="52" y="10" width="16" height="16"/>
                                             <constraints>
-                                                <constraint firstAttribute="height" constant="28" id="u2s-Pi-uLD"/>
+                                                <constraint firstAttribute="height" constant="16" id="BBa-1t-yDa"/>
+                                                <constraint firstAttribute="width" constant="16" id="DAk-KV-HtS"/>
                                             </constraints>
-                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="粉丝群" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AtA-Nh-bM8">
+                                            <rect key="frame" x="74" y="9.5" width="42" height="17"/>
+                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                             <nil key="highlightedColor"/>
                                         </label>
-                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nSM-G3-hi1">
-                                            <rect key="frame" x="128.5" y="28" width="0.5" height="24"/>
-                                            <color key="backgroundColor" red="0.91764705879999997" green="0.91764705879999997" blue="0.91764705879999997" alpha="1" colorSpace="calibratedRGB"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="24" id="DZa-I7-4xF"/>
-                                                <constraint firstAttribute="width" constant="0.5" id="y0R-Z3-A8o"/>
-                                            </constraints>
-                                        </view>
+                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8yh-P7-C7q">
+                                            <rect key="frame" x="0.0" y="0.0" width="167.5" height="36"/>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                        </button>
                                     </subviews>
                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                    <gestureRecognizers/>
                                     <constraints>
-                                        <constraint firstItem="VX3-MA-GKi" firstAttribute="centerX" secondItem="WdG-ah-bQ7" secondAttribute="centerX" id="3jC-oK-DNr"/>
-                                        <constraint firstItem="WdG-ah-bQ7" firstAttribute="leading" secondItem="OZO-kw-VjD" secondAttribute="leading" id="6wb-J8-pUs"/>
-                                        <constraint firstItem="nSM-G3-hi1" firstAttribute="centerY" secondItem="OZO-kw-VjD" secondAttribute="centerY" id="FqU-6J-83b"/>
-                                        <constraint firstAttribute="bottom" secondItem="VX3-MA-GKi" secondAttribute="bottom" constant="10" id="JDi-w0-EuP"/>
-                                        <constraint firstItem="VX3-MA-GKi" firstAttribute="top" secondItem="WdG-ah-bQ7" secondAttribute="bottom" constant="1" id="aEL-hu-hkC"/>
-                                        <constraint firstAttribute="trailing" secondItem="nSM-G3-hi1" secondAttribute="trailing" id="jF3-dA-N64"/>
-                                        <constraint firstAttribute="trailing" secondItem="WdG-ah-bQ7" secondAttribute="trailing" id="xFT-6S-ffQ"/>
+                                        <constraint firstItem="8yh-P7-C7q" firstAttribute="top" secondItem="Ywr-qF-6hh" secondAttribute="top" id="6Pj-a4-Zqb"/>
+                                        <constraint firstItem="AtA-Nh-bM8" firstAttribute="centerX" secondItem="Ywr-qF-6hh" secondAttribute="centerX" constant="11" id="9SG-YX-ZdA"/>
+                                        <constraint firstAttribute="bottom" secondItem="8yh-P7-C7q" secondAttribute="bottom" id="Ee5-fb-xLL"/>
+                                        <constraint firstItem="8yh-P7-C7q" firstAttribute="leading" secondItem="Ywr-qF-6hh" secondAttribute="leading" id="FtP-IE-IZe"/>
+                                        <constraint firstItem="AtA-Nh-bM8" firstAttribute="leading" secondItem="AH4-lx-iZW" secondAttribute="trailing" constant="6" id="Id3-mw-LzZ"/>
+                                        <constraint firstItem="AtA-Nh-bM8" firstAttribute="centerY" secondItem="Ywr-qF-6hh" secondAttribute="centerY" id="O9E-K9-h8g"/>
+                                        <constraint firstItem="AtA-Nh-bM8" firstAttribute="centerY" secondItem="AH4-lx-iZW" secondAttribute="centerY" id="V0e-Bk-Pb0"/>
+                                        <constraint firstAttribute="trailing" secondItem="8yh-P7-C7q" secondAttribute="trailing" id="YVq-Mq-7qk"/>
                                     </constraints>
                                 </view>
-                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5db-il-7Qs">
-                                    <rect key="frame" x="257.5" y="0.0" width="128.5" height="80"/>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jcb-v4-GpB">
+                                    <rect key="frame" x="12" y="64" width="350" height="91"/>
                                     <subviews>
-                                        <label opaque="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c7p-zT-BpU">
-                                            <rect key="frame" x="0.0" y="15" width="128.5" height="26"/>
-                                            <gestureRecognizers/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="26" id="wsD-cR-9aB"/>
-                                            </constraints>
-                                            <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="22"/>
-                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" 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="UAL-0p-7uP">
-                                            <rect key="frame" x="35" y="42" width="58" height="28"/>
-                                            <constraints>
-                                                <constraint firstAttribute="height" constant="28" id="hWC-Vo-Yra"/>
-                                            </constraints>
-                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PZD-oz-8cA">
+                                            <rect key="frame" x="12" y="9" width="326" height="0.0"/>
+                                            <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                            <color key="textColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                             <nil key="highlightedColor"/>
                                         </label>
                                     </subviews>
-                                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                    <gestureRecognizers/>
+                                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                     <constraints>
-                                        <constraint firstAttribute="trailing" secondItem="c7p-zT-BpU" secondAttribute="trailing" id="6la-uc-lik"/>
-                                        <constraint firstItem="UAL-0p-7uP" firstAttribute="centerX" secondItem="c7p-zT-BpU" secondAttribute="centerX" id="Hsp-YF-73w"/>
-                                        <constraint firstItem="UAL-0p-7uP" firstAttribute="top" secondItem="c7p-zT-BpU" secondAttribute="bottom" constant="1" id="P5P-so-8Wb"/>
-                                        <constraint firstAttribute="bottom" secondItem="UAL-0p-7uP" secondAttribute="bottom" constant="10" id="noJ-rW-0fk"/>
-                                        <constraint firstItem="c7p-zT-BpU" firstAttribute="leading" secondItem="5db-il-7Qs" secondAttribute="leading" id="vdI-yM-S6M"/>
+                                        <constraint firstItem="PZD-oz-8cA" firstAttribute="top" secondItem="jcb-v4-GpB" secondAttribute="top" constant="9" id="8Nh-Bf-joO"/>
+                                        <constraint firstItem="PZD-oz-8cA" firstAttribute="leading" secondItem="jcb-v4-GpB" secondAttribute="leading" constant="12" id="HZC-FJ-Ecn"/>
+                                        <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="PZD-oz-8cA" secondAttribute="bottom" constant="9" id="dEZ-FN-GAB"/>
+                                        <constraint firstAttribute="trailing" secondItem="PZD-oz-8cA" secondAttribute="trailing" constant="12" id="hKw-YT-kle"/>
                                     </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="6"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
                                 </view>
                             </subviews>
-                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <color key="backgroundColor" red="0.97254901960784312" green="0.97647058823529409" blue="0.9882352941176471" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <constraints>
-                                <constraint firstItem="oOv-s2-KI6" firstAttribute="top" secondItem="TF1-4L-ikX" secondAttribute="top" id="6gE-Ck-dhs"/>
-                                <constraint firstItem="OZO-kw-VjD" firstAttribute="width" secondItem="oOv-s2-KI6" secondAttribute="width" id="6pU-i5-DPJ"/>
-                                <constraint firstItem="OZO-kw-VjD" firstAttribute="leading" secondItem="oOv-s2-KI6" secondAttribute="trailing" id="9A0-5i-qjf"/>
-                                <constraint firstAttribute="height" constant="80" id="ETh-Us-0pw"/>
-                                <constraint firstAttribute="bottom" secondItem="oOv-s2-KI6" secondAttribute="bottom" id="Ghw-x4-b9U"/>
-                                <constraint firstItem="5db-il-7Qs" firstAttribute="top" secondItem="TF1-4L-ikX" secondAttribute="top" id="MRg-MS-gKj"/>
-                                <constraint firstItem="5db-il-7Qs" firstAttribute="width" secondItem="oOv-s2-KI6" secondAttribute="width" id="Nok-Nz-8wn"/>
-                                <constraint firstAttribute="bottom" secondItem="OZO-kw-VjD" secondAttribute="bottom" id="Phe-iu-fVX"/>
-                                <constraint firstAttribute="trailing" secondItem="5db-il-7Qs" secondAttribute="trailing" id="X7J-mD-uqh"/>
-                                <constraint firstItem="oOv-s2-KI6" firstAttribute="leading" secondItem="TF1-4L-ikX" secondAttribute="leading" id="az5-nB-Uc3"/>
-                                <constraint firstItem="OZO-kw-VjD" firstAttribute="top" secondItem="TF1-4L-ikX" secondAttribute="top" id="gSB-gt-2E0"/>
-                                <constraint firstAttribute="bottom" secondItem="5db-il-7Qs" secondAttribute="bottom" id="rm7-SL-1ll"/>
-                                <constraint firstItem="5db-il-7Qs" firstAttribute="leading" secondItem="OZO-kw-VjD" secondAttribute="trailing" id="tj5-DJ-lvP"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="top" secondItem="Ywr-qF-6hh" secondAttribute="top" id="1Tj-Md-dHZ"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="bottom" secondItem="Ywr-qF-6hh" secondAttribute="bottom" id="5I6-WO-mS9"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="width" secondItem="USe-oC-N7T" secondAttribute="width" id="8Kj-kB-aeh"/>
+                                <constraint firstItem="jcb-v4-GpB" firstAttribute="top" secondItem="USe-oC-N7T" secondAttribute="bottom" constant="14" id="Drc-Ud-G2b"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="trailing" secondItem="Ywr-qF-6hh" secondAttribute="trailing" id="EAW-gt-f0x"/>
+                                <constraint firstAttribute="trailing" secondItem="Mgy-O1-NXO" secondAttribute="trailing" constant="14" id="Gp0-k9-bGp"/>
+                                <constraint firstItem="USe-oC-N7T" firstAttribute="top" secondItem="4Jq-VA-6uM" secondAttribute="top" constant="14" id="IZa-U0-668"/>
+                                <constraint firstItem="F9X-uo-yfP" firstAttribute="leading" secondItem="USe-oC-N7T" secondAttribute="leading" id="Mqi-mh-nJS"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="leading" secondItem="USe-oC-N7T" secondAttribute="trailing" constant="11" id="N2R-7m-B89"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="height" secondItem="USe-oC-N7T" secondAttribute="height" id="NOO-Sq-1fl"/>
+                                <constraint firstAttribute="trailing" secondItem="jcb-v4-GpB" secondAttribute="trailing" constant="12" id="eNu-lZ-Wvc"/>
+                                <constraint firstItem="USe-oC-N7T" firstAttribute="leading" secondItem="4Jq-VA-6uM" secondAttribute="leading" constant="14" id="fIw-cp-gv6"/>
+                                <constraint firstItem="jcb-v4-GpB" firstAttribute="leading" secondItem="4Jq-VA-6uM" secondAttribute="leading" constant="12" id="fVd-AP-Wug"/>
+                                <constraint firstItem="F9X-uo-yfP" firstAttribute="trailing" secondItem="USe-oC-N7T" secondAttribute="trailing" id="jRG-eV-kTa"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="top" secondItem="USe-oC-N7T" secondAttribute="top" id="kuL-z0-6QP"/>
+                                <constraint firstAttribute="bottom" secondItem="jcb-v4-GpB" secondAttribute="bottom" id="mby-aa-WnI"/>
+                                <constraint firstItem="F9X-uo-yfP" firstAttribute="bottom" secondItem="USe-oC-N7T" secondAttribute="bottom" id="sRB-Qm-bTN"/>
+                                <constraint firstItem="F9X-uo-yfP" firstAttribute="top" secondItem="USe-oC-N7T" secondAttribute="top" id="vWd-wz-FO4"/>
+                                <constraint firstItem="Mgy-O1-NXO" firstAttribute="leading" secondItem="Ywr-qF-6hh" secondAttribute="leading" id="vnn-Xc-3M2"/>
                             </constraints>
-                            <userDefinedRuntimeAttributes>
-                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="8"/>
-                                </userDefinedRuntimeAttribute>
-                            </userDefinedRuntimeAttributes>
                         </view>
                     </subviews>
-                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
-                        <constraint firstItem="IsQ-zh-7a5" firstAttribute="top" secondItem="vZ2-QD-d8h" secondAttribute="bottom" constant="12" id="1Te-4O-WNT"/>
-                        <constraint firstItem="HE2-vS-rZC" firstAttribute="leading" secondItem="LhQ-B1-N8g" secondAttribute="trailing" constant="10" id="38B-1g-BuQ"/>
-                        <constraint firstAttribute="height" constant="240" id="5i8-wV-axq"/>
-                        <constraint firstItem="8kd-Ti-hHu" firstAttribute="leading" secondItem="nhJ-jg-o1N" secondAttribute="trailing" constant="25" id="6sP-gm-gel"/>
-                        <constraint firstItem="V1i-h1-rXV" firstAttribute="centerY" secondItem="LhQ-B1-N8g" secondAttribute="centerY" id="8vD-t2-O4h"/>
-                        <constraint firstItem="HE2-vS-rZC" firstAttribute="centerY" secondItem="LhQ-B1-N8g" secondAttribute="centerY" id="Bmz-Yl-VO8"/>
-                        <constraint firstItem="8kd-Ti-hHu" firstAttribute="centerY" secondItem="nhJ-jg-o1N" secondAttribute="centerY" id="JxI-Yd-tqh"/>
-                        <constraint firstItem="j04-k1-RIV" firstAttribute="leading" secondItem="8kd-Ti-hHu" secondAttribute="trailing" id="MV0-Na-HhL"/>
-                        <constraint firstItem="vZ2-QD-d8h" firstAttribute="top" secondItem="LhQ-B1-N8g" secondAttribute="bottom" constant="20" id="MWA-aQ-3YI"/>
-                        <constraint firstAttribute="trailing" secondItem="sxy-XN-92K" secondAttribute="trailing" constant="11" id="OrZ-Lk-L6Y"/>
-                        <constraint firstItem="LhQ-B1-N8g" firstAttribute="top" secondItem="w1f-9h-A4M" secondAttribute="top" constant="53" id="P4z-D4-aHE"/>
-                        <constraint firstItem="sxy-XN-92K" firstAttribute="top" secondItem="w1f-9h-A4M" secondAttribute="top" constant="11" id="XOi-Hq-ObU"/>
-                        <constraint firstItem="IsQ-zh-7a5" firstAttribute="leading" secondItem="w1f-9h-A4M" secondAttribute="leading" constant="13" id="Zjk-J6-Ooh"/>
-                        <constraint firstItem="vZ2-QD-d8h" firstAttribute="leading" secondItem="LhQ-B1-N8g" secondAttribute="leading" id="aaA-Il-VoX"/>
+                        <constraint firstItem="LhQ-B1-N8g" firstAttribute="leading" secondItem="w1f-9h-A4M" secondAttribute="leading" constant="108" id="03X-tx-suR"/>
+                        <constraint firstItem="j04-k1-RIV" firstAttribute="leading" secondItem="LhQ-B1-N8g" secondAttribute="trailing" constant="7" id="1TQ-qi-Jau"/>
+                        <constraint firstAttribute="bottom" secondItem="4Jq-VA-6uM" secondAttribute="bottom" id="2Ss-ex-J0r"/>
+                        <constraint firstItem="LhQ-B1-N8g" firstAttribute="top" secondItem="w1f-9h-A4M" secondAttribute="top" constant="12" id="63f-vf-yDn"/>
+                        <constraint firstItem="nI7-Zj-cP3" firstAttribute="centerY" secondItem="hqM-qu-Ygd" secondAttribute="centerY" id="8hC-Xc-fOO"/>
+                        <constraint firstItem="hqM-qu-Ygd" firstAttribute="leading" secondItem="LhQ-B1-N8g" secondAttribute="leading" id="Eiq-yY-Nq8"/>
+                        <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="j04-k1-RIV" secondAttribute="trailing" constant="12" id="N7u-AQ-ipf"/>
+                        <constraint firstItem="VX3-MA-GKi" firstAttribute="leading" secondItem="zyK-kV-Bos" secondAttribute="trailing" constant="10" id="OqS-jK-KdZ"/>
+                        <constraint firstItem="j04-k1-RIV" firstAttribute="centerY" secondItem="LhQ-B1-N8g" secondAttribute="centerY" id="avK-em-c0j"/>
                         <constraint firstItem="fZT-24-HFt" firstAttribute="leading" secondItem="IsQ-zh-7a5" secondAttribute="trailing" constant="10" id="bG8-zK-KPw"/>
-                        <constraint firstAttribute="trailing" secondItem="fZT-24-HFt" secondAttribute="trailing" constant="10" id="dnC-wd-VPw"/>
-                        <constraint firstAttribute="trailing" secondItem="TF1-4L-ikX" secondAttribute="trailing" id="eD0-oX-57B"/>
-                        <constraint firstItem="nhJ-jg-o1N" firstAttribute="centerY" secondItem="vZ2-QD-d8h" secondAttribute="centerY" id="j5e-io-jGz"/>
-                        <constraint firstItem="j04-k1-RIV" firstAttribute="centerY" secondItem="8kd-Ti-hHu" secondAttribute="centerY" id="jgO-wy-gnh"/>
-                        <constraint firstItem="V1i-h1-rXV" firstAttribute="leading" secondItem="HE2-vS-rZC" secondAttribute="trailing" constant="6" id="knV-NT-Inw"/>
-                        <constraint firstItem="nhJ-jg-o1N" firstAttribute="leading" secondItem="vZ2-QD-d8h" secondAttribute="trailing" id="neP-ib-65J"/>
-                        <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="V1i-h1-rXV" secondAttribute="trailing" constant="10" id="oz3-Il-T3b"/>
-                        <constraint firstItem="LhQ-B1-N8g" firstAttribute="leading" secondItem="w1f-9h-A4M" secondAttribute="leading" constant="11" id="pR6-dO-j4A"/>
-                        <constraint firstItem="TF1-4L-ikX" firstAttribute="leading" secondItem="w1f-9h-A4M" secondAttribute="leading" id="s0P-uh-Ooh"/>
-                        <constraint firstAttribute="bottom" secondItem="TF1-4L-ikX" secondAttribute="bottom" constant="10" id="sGE-xG-Lut"/>
+                        <constraint firstItem="4Jq-VA-6uM" firstAttribute="leading" secondItem="w1f-9h-A4M" secondAttribute="leading" id="fQs-zy-Nr3"/>
+                        <constraint firstItem="zyK-kV-Bos" firstAttribute="leading" secondItem="nI7-Zj-cP3" secondAttribute="trailing" constant="10" id="i1B-Sp-MqY"/>
+                        <constraint firstItem="IsQ-zh-7a5" firstAttribute="leading" secondItem="w1f-9h-A4M" secondAttribute="leading" constant="14" id="iAB-7h-FYZ"/>
+                        <constraint firstItem="zyK-kV-Bos" firstAttribute="centerY" secondItem="nI7-Zj-cP3" secondAttribute="centerY" id="idK-Q0-mmF"/>
+                        <constraint firstItem="4Jq-VA-6uM" firstAttribute="top" secondItem="IsQ-zh-7a5" secondAttribute="bottom" constant="21" id="j5X-zB-IBS"/>
+                        <constraint firstItem="VX3-MA-GKi" firstAttribute="centerY" secondItem="hqM-qu-Ygd" secondAttribute="centerY" id="jag-uE-4yX"/>
+                        <constraint firstItem="WdG-ah-bQ7" firstAttribute="leading" secondItem="VX3-MA-GKi" secondAttribute="trailing" constant="6" id="k3l-g7-lSj"/>
+                        <constraint firstAttribute="trailing" secondItem="fZT-24-HFt" secondAttribute="trailing" constant="14" id="nrr-SS-sDs"/>
+                        <constraint firstItem="hqM-qu-Ygd" firstAttribute="top" secondItem="LhQ-B1-N8g" secondAttribute="bottom" constant="12" id="oPG-dd-RpG"/>
+                        <constraint firstItem="WdG-ah-bQ7" firstAttribute="centerY" secondItem="VX3-MA-GKi" secondAttribute="centerY" id="rv9-PP-bm7"/>
+                        <constraint firstItem="nI7-Zj-cP3" firstAttribute="leading" secondItem="hqM-qu-Ygd" secondAttribute="trailing" constant="6" id="trz-Ye-BAl"/>
+                        <constraint firstAttribute="trailing" secondItem="4Jq-VA-6uM" secondAttribute="trailing" id="ui5-tB-BOc"/>
                         <constraint firstItem="fZT-24-HFt" firstAttribute="centerY" secondItem="IsQ-zh-7a5" secondAttribute="centerY" id="xhZ-uo-LnE"/>
+                        <constraint firstItem="IsQ-zh-7a5" firstAttribute="top" secondItem="LhQ-B1-N8g" secondAttribute="bottom" constant="58" id="z7B-d9-lFB"/>
                     </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="10"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
                 </view>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="teacher_avatar" translatesAutoresizingMaskIntoConstraints="NO" id="3JZ-4N-xLY">
-                    <rect key="frame" x="26" y="0.0" width="78" height="78"/>
+                    <rect key="frame" x="15" y="14" width="74" height="74"/>
                     <constraints>
-                        <constraint firstAttribute="width" constant="78" id="BQF-U0-Q5F"/>
-                        <constraint firstAttribute="height" constant="78" id="YUb-bw-MgE"/>
+                        <constraint firstAttribute="width" constant="74" id="BQF-U0-Q5F"/>
+                        <constraint firstAttribute="height" constant="74" id="YUb-bw-MgE"/>
                     </constraints>
                     <userDefinedRuntimeAttributes>
                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="39"/>
+                            <real key="value" value="37"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
-                            <real key="value" value="2"/>
+                            <real key="value" value="1"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
                             <color key="value" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -349,62 +287,49 @@
                     </userDefinedRuntimeAttributes>
                 </imageView>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="O4w-5f-Puh">
-                    <rect key="frame" x="74" y="60" width="43" height="18"/>
+                    <rect key="frame" x="63" y="70" width="43" height="18"/>
                     <constraints>
                         <constraint firstAttribute="width" secondItem="O4w-5f-Puh" secondAttribute="height" multiplier="48:20" id="joZ-TS-Pci"/>
                         <constraint firstAttribute="height" constant="18" id="ogj-H9-eEZ"/>
                     </constraints>
                 </imageView>
             </subviews>
-            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
-                <constraint firstItem="w1f-9h-A4M" firstAttribute="top" secondItem="3JZ-4N-xLY" secondAttribute="top" constant="39" id="DWL-gY-dzx"/>
-                <constraint firstItem="w1f-9h-A4M" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="14" id="KJi-WY-Wlp"/>
-                <constraint firstItem="w1f-9h-A4M" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="39" id="Kbj-BA-WD8"/>
-                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="w1f-9h-A4M" secondAttribute="trailing" constant="14" id="Oop-Hc-pS9"/>
+                <constraint firstAttribute="trailing" secondItem="w1f-9h-A4M" secondAttribute="trailing" id="Gvg-U6-qPP"/>
+                <constraint firstItem="3JZ-4N-xLY" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="15" id="MZx-Qc-MWK"/>
+                <constraint firstAttribute="bottom" secondItem="w1f-9h-A4M" secondAttribute="bottom" id="Pbi-JX-SHW"/>
                 <constraint firstItem="O4w-5f-Puh" firstAttribute="bottom" secondItem="3JZ-4N-xLY" secondAttribute="bottom" id="RQO-qJ-vPd"/>
+                <constraint firstItem="w1f-9h-A4M" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="14" id="gzs-B7-pgT"/>
                 <constraint firstItem="O4w-5f-Puh" firstAttribute="leading" secondItem="3JZ-4N-xLY" secondAttribute="leading" constant="48" id="v6m-RP-GQ1"/>
-                <constraint firstItem="w1f-9h-A4M" firstAttribute="leading" secondItem="3JZ-4N-xLY" secondAttribute="leading" constant="-12" id="zGP-9T-haE"/>
+                <constraint firstItem="3JZ-4N-xLY" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="14" id="vdE-Q5-B3a"/>
+                <constraint firstItem="w1f-9h-A4M" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="yPA-kW-x0y"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
+                <outlet property="cornerView" destination="4Jq-VA-6uM" id="XNU-Bf-MN0"/>
                 <outlet property="fansCount" destination="nI7-Zj-cP3" id="ph8-6G-8dN"/>
+                <outlet property="fansGroupColorLayer" destination="Mgy-O1-NXO" id="znY-oG-i7Y"/>
                 <outlet property="finishCourse" destination="WdG-ah-bQ7" id="kTh-1z-CZK"/>
-                <outlet property="firstImage" destination="HE2-vS-rZC" id="U2w-6R-hc6"/>
-                <outlet property="firstImageWidth" destination="eqp-Dk-Zah" id="8gT-kc-SY4"/>
-                <outlet property="liveImage" destination="msK-hu-IGj" id="2dx-Is-foA"/>
-                <outlet property="musicImage" destination="Gtu-Mm-ocB" id="Zj7-ji-aky"/>
-                <outlet property="secondImage" destination="V1i-h1-rXV" id="Rz7-en-SkA"/>
-                <outlet property="secondImageWidth" destination="MJP-a5-PaL" id="qH7-NH-jH6"/>
+                <outlet property="introduceLabel" destination="PZD-oz-8cA" id="EJj-a3-yl6"/>
                 <outlet property="starBgView" destination="j04-k1-RIV" id="76r-zk-VWm"/>
                 <outlet property="starView" destination="7YI-eG-JcD" id="P33-L0-TAr"/>
-                <outlet property="styleImage" destination="lc6-oJ-H90" id="MMV-VQ-XYM"/>
+                <outlet property="styleColorLayer" destination="USe-oC-N7T" id="kL9-ou-IXw"/>
                 <outlet property="subjectView" destination="fZT-24-HFt" id="A3q-LS-oWX"/>
                 <outlet property="teacherName" destination="LhQ-B1-N8g" id="2lX-lZ-dbL"/>
-                <outlet property="unfinishCourse" destination="c7p-zT-BpU" id="g9L-Mb-5B6"/>
                 <outlet property="userAvatar" destination="3JZ-4N-xLY" id="bQ4-YD-XNr"/>
-                <outlet property="videoImage" destination="YEy-rl-QiY" id="uMF-Ia-6D3"/>
                 <outlet property="viperImage" destination="O4w-5f-Puh" id="deL-wn-pHv"/>
             </connections>
-            <point key="canvasLocation" x="128.98550724637681" y="51.227678571428569"/>
+            <point key="canvasLocation" x="100.00000000000001" y="55.580357142857139"/>
         </view>
-        <tapGestureRecognizer id="pU3-So-ynT">
-            <connections>
-                <action selector="topCallback:" destination="iN0-l3-epB" id="XVm-Zu-KlM"/>
-            </connections>
-        </tapGestureRecognizer>
+        <tapGestureRecognizer id="pU3-So-ynT"/>
     </objects>
     <resources>
-        <image name="education_icon" width="39" height="16"/>
-        <image name="mineLive_nomal" width="24" height="23"/>
-        <image name="mineMusic_nomal" width="24" height="23"/>
-        <image name="mineStyle_nomal" width="23" height="23"/>
-        <image name="mineVideo_nomal" width="23" height="23"/>
-        <image name="mine_instrument_logo" width="68" height="17"/>
-        <image name="qualification_icon" width="39" height="16"/>
+        <image name="mine_fansGroup_icon" width="16" height="16"/>
+        <image name="mine_instrument_logo" width="44" height="16"/>
+        <image name="mine_style_icon" width="16" height="16"/>
         <image name="teacher_avatar" width="150" height="150"/>
     </resources>
 </document>

+ 32 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.h

@@ -0,0 +1,32 @@
+//
+//  MineCourseSettingView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, COURSE_TYPE) {
+    COURSE_TYPE_VIP,
+    COURSE_TYPE_ACCOMPANY,
+    COURSE_TYPE_LIVE,
+    COURSE_TYPE_VDIEO,
+    COURSE_TYPE_MUSIC,
+};
+
+typedef void(^CourseSettingCallback)(void);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MineCourseSettingView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)configWithCourseType:(COURSE_TYPE)type callback:(CourseSettingCallback)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 97 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.m

@@ -0,0 +1,97 @@
+//
+//  MineCourseSettingView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import "MineCourseSettingView.h"
+#import "UIView+KSLayer.h"
+
+@interface MineCourseSettingView ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *imageView;
+
+@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
+
+@property (nonatomic, copy) CourseSettingCallback callback;
+
+@end
+
+@implementation MineCourseSettingView
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    CAGradientLayer *color = [UIView createGradientLayerFromColor:HexRGB(0x2DC7AA) startPoint:CGPointMake(0.57, 1) endColor:HexRGB(0x51E1D0) endPoint:CGPointMake(0.57, 0) bounds:CGRectMake(0, 0, KPortraitWidth - 14 * 2, 36)];
+}
+
++ (instancetype)shareInstance {
+    MineCourseSettingView *view = [[[NSBundle mainBundle] loadNibNamed:@"MineCourseSettingView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configWithCourseType:(COURSE_TYPE)type callback:(CourseSettingCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    [self evaluateUI:type];
+}
+
+- (IBAction)settingAction:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+- (void)evaluateUI:(COURSE_TYPE)type {
+    NSString *imgName = @"";
+    NSString *descTitle = @"";
+    switch (type) {
+        case COURSE_TYPE_VIP:
+        {
+            imgName = @"";
+            descTitle = @"";
+        }
+            break;
+        case COURSE_TYPE_ACCOMPANY:
+        {
+            imgName = @"";
+            descTitle = @"";
+        }
+            break;
+        case COURSE_TYPE_LIVE:
+        {
+            imgName = @"";
+            descTitle = @"";
+        }
+            break;
+        case COURSE_TYPE_VDIEO:
+        {
+            imgName = @"";
+            descTitle = @"";
+        }
+            break;
+        case COURSE_TYPE_MUSIC:
+        {
+            imgName = @"";
+            descTitle = @"";
+        }
+            break;
+        default:
+            break;
+    }
+    [self.imageView setImage:[UIImage imageNamed:imgName]];
+    self.nameLabel.text = descTitle;
+}
+
++ (CGFloat)getViewHeight {
+    return 36.0f;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 83 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.xib

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <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="MineCourseSettingView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="51"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="puu-AO-T3t">
+                    <rect key="frame" x="14" y="0.0" width="365" height="51"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="6"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0ry-Lj-6tB">
+                    <rect key="frame" x="14" y="0.0" width="365" height="51"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="8qf-NJ-Ua6">
+                            <rect key="frame" x="132.33333333333334" y="15.666666666666664" width="20" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="20" id="tyb-a1-mdh"/>
+                                <constraint firstAttribute="height" constant="20" id="u4q-4P-WUn"/>
+                            </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="kXS-Ls-VGF">
+                            <rect key="frame" x="156.33333333333334" y="16.666666666666668" width="74.666666666666657" height="18.000000000000004"/>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
+                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pkG-qe-0oy">
+                            <rect key="frame" x="0.0" y="0.0" width="365" height="51"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="settingAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="WQV-0t-GTL"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="pkG-qe-0oy" firstAttribute="top" secondItem="0ry-Lj-6tB" secondAttribute="top" id="3Ma-tx-cut"/>
+                        <constraint firstItem="kXS-Ls-VGF" firstAttribute="leading" secondItem="8qf-NJ-Ua6" secondAttribute="trailing" constant="4" id="A9J-vd-q7E"/>
+                        <constraint firstAttribute="trailing" secondItem="pkG-qe-0oy" secondAttribute="trailing" id="Cbp-uD-Kgl"/>
+                        <constraint firstItem="8qf-NJ-Ua6" firstAttribute="centerY" secondItem="0ry-Lj-6tB" secondAttribute="centerY" id="HKC-pU-QqO"/>
+                        <constraint firstItem="kXS-Ls-VGF" firstAttribute="centerX" secondItem="0ry-Lj-6tB" secondAttribute="centerX" constant="11" id="Hch-pk-VrZ"/>
+                        <constraint firstAttribute="bottom" secondItem="pkG-qe-0oy" secondAttribute="bottom" id="KBq-Dv-pJ3"/>
+                        <constraint firstItem="pkG-qe-0oy" firstAttribute="leading" secondItem="0ry-Lj-6tB" secondAttribute="leading" id="MKk-t4-dY1"/>
+                        <constraint firstItem="kXS-Ls-VGF" firstAttribute="centerY" secondItem="0ry-Lj-6tB" secondAttribute="centerY" id="q4d-Kg-j7F"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="0ry-Lj-6tB" firstAttribute="leading" secondItem="puu-AO-T3t" secondAttribute="leading" id="4T5-Jt-HpN"/>
+                <constraint firstAttribute="trailing" secondItem="puu-AO-T3t" secondAttribute="trailing" constant="14" id="Dno-sc-vGF"/>
+                <constraint firstItem="0ry-Lj-6tB" firstAttribute="top" secondItem="puu-AO-T3t" secondAttribute="top" id="GSH-ec-tKK"/>
+                <constraint firstItem="0ry-Lj-6tB" firstAttribute="trailing" secondItem="puu-AO-T3t" secondAttribute="trailing" id="LMA-D9-q6V"/>
+                <constraint firstItem="0ry-Lj-6tB" firstAttribute="bottom" secondItem="puu-AO-T3t" secondAttribute="bottom" id="Skq-VH-vBq"/>
+                <constraint firstAttribute="bottom" secondItem="puu-AO-T3t" secondAttribute="bottom" id="dWD-Qc-8Fh"/>
+                <constraint firstItem="puu-AO-T3t" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="gFe-fa-cqz"/>
+                <constraint firstItem="puu-AO-T3t" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="k5H-Pw-a5r"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="imageView" destination="8qf-NJ-Ua6" id="5ig-Sr-HjT"/>
+                <outlet property="nameLabel" destination="kXS-Ls-VGF" id="MQB-HL-9NM"/>
+            </connections>
+            <point key="canvasLocation" x="64.885496183206101" y="-25"/>
+        </view>
+    </objects>
+</document>

+ 28 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MinePageCourseTipsView.h

@@ -0,0 +1,28 @@
+//
+//  MinePageCourseTipsView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/14.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, COURSE_TIPS_ACTION) {
+    COURSE_TIPS_ACTION_REMOVE,           // 移除提醒
+    COURSE_TIPS_ACTION_STOPREMIND,       // 不再提醒
+};
+typedef void(^CourseTipsCallback)(COURSE_TIPS_ACTION action);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageCourseTipsView : UIView
+
++ (instancetype)shareIntance;
+
+- (void)configWithTypeImage:(NSString *)typeImage headTitle:(NSString *)headTitle descMsg:(NSString *)descMsg callback:(CourseTipsCallback)callback;
+
+- (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 85 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MinePageCourseTipsView.m

@@ -0,0 +1,85 @@
+//
+//  MinePageCourseTipsView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/14.
+//
+
+#import "MinePageCourseTipsView.h"
+
+@interface MinePageCourseTipsView ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *typeImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *headTitleLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *descLabel;
+
+@property (nonatomic, copy) CourseTipsCallback callback;
+
+@property (nonatomic, strong) NSString *descMessage;
+
+@end
+
+@implementation MinePageCourseTipsView
+
+
++ (instancetype)shareIntance {
+    MinePageCourseTipsView *view = [[[NSBundle mainBundle] loadNibNamed:@"MinePageCourseTipsView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configWithTypeImage:(NSString *)typeImage headTitle:(NSString *)headTitle descMsg:(NSString *)descMsg callback:(CourseTipsCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    [self.typeImage setImage:[UIImage imageNamed:typeImage]];
+    self.headTitleLabel.text = headTitle;
+    
+    self.descMessage = descMsg;
+    // 换行显示内容
+    NSMutableParagraphStyle *paragraphStyle = [self getParagraphStyleWithFont:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+    CGFloat baselineOffset = [self getBaseOffline:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+    NSMutableAttributedString *attrs = [[NSMutableAttributedString alloc] initWithString:descMsg attributes:@{NSParagraphStyleAttributeName:paragraphStyle, NSBaselineOffsetAttributeName:@(baselineOffset),NSFontAttributeName:[UIFont systemFontOfSize:13.0f]}];
+    self.descLabel.attributedText = attrs;
+}
+
+- (IBAction)removeTipsView:(id)sender {
+    if (self.callback) {
+        self.callback(COURSE_TIPS_ACTION_REMOVE);
+    }
+}
+
+- (IBAction)stopRemind:(id)sender {
+    if (self.callback) {
+        self.callback(COURSE_TIPS_ACTION_STOPREMIND);
+    }
+}
+
+- (CGFloat)getBaseOffline:(UIFont *)font lineHeight:(CGFloat)lineHeight {
+    CGFloat baselineOffset = (lineHeight - font.lineHeight) / 4;
+    return baselineOffset;
+}
+
+- (NSMutableParagraphStyle *)getParagraphStyleWithFont:(UIFont *)font lineHeight:(CGFloat)lineHeigh {
+    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+    paragraphStyle.maximumLineHeight = lineHeigh;
+    paragraphStyle.minimumLineHeight = lineHeigh;
+    return paragraphStyle;
+}
+
+- (CGFloat)getViewHeight {
+    NSMutableParagraphStyle *paragraphStyle = [self getParagraphStyleWithFont:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+    CGFloat baselineOffset = [self getBaseOffline:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
+    CGFloat labelHeight = [self.descMessage boundingRectWithSize:CGSizeMake(KPortraitWidth - 14 * 2 - 12 * 2, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSParagraphStyleAttributeName:paragraphStyle, NSBaselineOffsetAttributeName:@(baselineOffset),NSFontAttributeName:[UIFont systemFontOfSize:13.0f]} context:nil].size.height + 1;
+    return labelHeight + 40 + 49;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 125 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MinePageCourseTipsView.xib

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <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="MinePageCourseTipsView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="206"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ghq-sd-7Ae">
+                    <rect key="frame" x="14" y="0.0" width="365" height="206"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NeF-a8-IRP">
+                            <rect key="frame" x="10" y="167" width="345" height="1"/>
+                            <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="NQD-vh-1jd"/>
+                            </constraints>
+                        </view>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bLS-om-ATf">
+                            <rect key="frame" x="142.66666666666666" y="168" width="80" height="38"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="80" id="syR-qq-Uo7"/>
+                            </constraints>
+                            <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.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </state>
+                            <connections>
+                                <action selector="stopRemind:" destination="iN0-l3-epB" eventType="touchUpInside" id="cKc-U3-Vnu"/>
+                            </connections>
+                        </button>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="c9f-6q-2WA">
+                            <rect key="frame" x="10" y="14" width="18" height="16"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="什么是VIP定制课程?" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Q0-yd-dNR">
+                            <rect key="frame" x="36" y="12" width="139.33333333333334" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="18" id="4yV-lq-kg0"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VIP定制课程是客制化的1v1线上课程。老师根据您的学习需求和希望达到的成果定制教学内容。为了提高您的上课体验,约课前请与老师充分沟通,达成一致后课根据老师的空闲时间约定上课时间。" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eFF-DY-ZFh">
+                            <rect key="frame" x="12" y="40" width="341" height="117"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                            <color key="textColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_tips_del" translatesAutoresizingMaskIntoConstraints="NO" id="M9C-sm-8Gf">
+                            <rect key="frame" x="338" y="15" width="14" height="14"/>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Jx4-ce-Wpo">
+                            <rect key="frame" x="325" y="0.0" width="40" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="40" id="d4k-Nx-33B"/>
+                                <constraint firstAttribute="height" constant="40" id="mY5-ZO-n8H"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="removeTipsView:" destination="iN0-l3-epB" eventType="touchUpInside" id="Xn0-FK-8px"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="M9C-sm-8Gf" secondAttribute="trailing" constant="13" id="5Yq-MW-Cdx"/>
+                        <constraint firstItem="4Q0-yd-dNR" firstAttribute="leading" secondItem="Ghq-sd-7Ae" secondAttribute="leading" constant="36" id="DIN-T8-KWq"/>
+                        <constraint firstItem="Jx4-ce-Wpo" firstAttribute="top" secondItem="Ghq-sd-7Ae" secondAttribute="top" id="EQr-TG-8JR"/>
+                        <constraint firstItem="M9C-sm-8Gf" firstAttribute="top" secondItem="Ghq-sd-7Ae" secondAttribute="top" constant="15" id="FLb-W9-ISy"/>
+                        <constraint firstAttribute="bottom" secondItem="bLS-om-ATf" secondAttribute="bottom" id="HcA-6X-gdz"/>
+                        <constraint firstItem="eFF-DY-ZFh" firstAttribute="top" secondItem="4Q0-yd-dNR" secondAttribute="bottom" constant="10" id="IE9-Bm-7uy"/>
+                        <constraint firstItem="NeF-a8-IRP" firstAttribute="top" secondItem="eFF-DY-ZFh" secondAttribute="bottom" constant="10" id="NkE-jh-KXZ"/>
+                        <constraint firstAttribute="trailing" secondItem="NeF-a8-IRP" secondAttribute="trailing" constant="10" id="YCy-uS-ihJ"/>
+                        <constraint firstItem="eFF-DY-ZFh" firstAttribute="leading" secondItem="Ghq-sd-7Ae" secondAttribute="leading" constant="12" id="ebJ-Jd-xkY"/>
+                        <constraint firstAttribute="trailing" secondItem="eFF-DY-ZFh" secondAttribute="trailing" constant="12" id="h87-4l-ehf"/>
+                        <constraint firstItem="4Q0-yd-dNR" firstAttribute="top" secondItem="Ghq-sd-7Ae" secondAttribute="top" constant="12" id="iBQ-v3-CEa"/>
+                        <constraint firstItem="NeF-a8-IRP" firstAttribute="leading" secondItem="Ghq-sd-7Ae" secondAttribute="leading" constant="10" id="m9C-zp-pxt"/>
+                        <constraint firstAttribute="trailing" secondItem="Jx4-ce-Wpo" secondAttribute="trailing" id="ml6-Aq-UZV"/>
+                        <constraint firstItem="bLS-om-ATf" firstAttribute="centerX" secondItem="Ghq-sd-7Ae" secondAttribute="centerX" id="qmr-qq-Ffe"/>
+                        <constraint firstItem="bLS-om-ATf" firstAttribute="top" secondItem="NeF-a8-IRP" secondAttribute="bottom" id="umD-Vz-nDB"/>
+                        <constraint firstAttribute="bottom" secondItem="NeF-a8-IRP" secondAttribute="bottom" constant="38" id="v3m-Wc-j81"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="8"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="Ghq-sd-7Ae" secondAttribute="trailing" constant="14" id="CLA-gm-zMa"/>
+                <constraint firstItem="Ghq-sd-7Ae" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="ETF-tF-GvB"/>
+                <constraint firstItem="Ghq-sd-7Ae" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="KsE-ae-S0f"/>
+                <constraint firstAttribute="bottom" secondItem="Ghq-sd-7Ae" secondAttribute="bottom" id="yyT-Co-Ngg"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="descLabel" destination="eFF-DY-ZFh" id="vU0-c9-nLw"/>
+                <outlet property="headTitleLabel" destination="4Q0-yd-dNR" id="lnp-rw-zNt"/>
+                <outlet property="typeImage" destination="c9f-6q-2WA" id="NX6-8q-FWP"/>
+            </connections>
+            <point key="canvasLocation" x="-40.458015267175568" y="466.19718309859155"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="course_tips_del" width="14" height="14"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 20 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.h

@@ -0,0 +1,20 @@
+//
+//  MinePageVIPCourseView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import "KSJXBodyView.h"
+#import "StateView.h"
+#import "Reachability.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageVIPCourseView : KSJXBodyView
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 213 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.m

@@ -0,0 +1,213 @@
+//
+//  MinePageVIPCourseView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import "MinePageVIPCourseView.h"
+#import "MinePageCourseTipsView.h"
+#import "MineCourseSettingView.h"
+
+
+@interface MinePageVIPCourseView ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, assign) BOOL isLoadMore;
+@property (nonatomic, assign) NSInteger rows;
+@property (nonatomic, assign) NSInteger pages;
+
+@property (nonatomic, strong) NSMutableArray *dataArray;
+
+@property (nonatomic, strong) StateView *promptView;
+@property (nonatomic, strong) UIView *promptPlaceView;
+
+@property (nonatomic, assign) BOOL networkAvaiable; // 网络是否可用
+
+@property (nonatomic, strong) NSString *headView;
+
+@property (nonatomic, strong) MinePageCourseTipsView *tipsView;
+
+@end
+
+@implementation MinePageVIPCourseView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStylePlain];
+        self.tableView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.showsVerticalScrollIndicator = NO;
+        
+        self.tableView.dataSource = self;
+        self.tableView.delegate = self;
+        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [self addSubview:self.tableView];
+        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        bottomView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.tableFooterView = bottomView;
+        
+        MJWeakSelf;
+        self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+            [weakSelf resetParamenter];
+            [weakSelf requestData];
+        }];
+        self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
+            if (weakSelf.isLoadMore) {
+                weakSelf.pages += 1;
+                [weakSelf requestData];
+            }
+            else {
+                [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
+            }
+        }];
+    }
+    return self;
+}
+
+- (void)refreshAndRequestData {
+    [self resetParamenter];
+    [self requestData];
+}
+
+- (void)resetParamenter {
+    self.isLoadMore = YES;
+    self.pages = 1;
+    self.rows = 10;
+    
+    self.dataArray = [NSMutableArray array];
+    [self.tableView.mj_footer resetNoMoreData];
+    [self setPromptString:@"暂无内容" imageName:@"empty_course" inView:self.tableView];
+    [self.tableView reloadData];
+}
+
+- (void)endRefresh {
+    @weakObj(self);
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        @strongObj(self);
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+    });
+}
+
+- (void)requestData {
+    
+}
+
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 88.0f;;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return nil;
+}
+
+#pragma mark ----- lazying
+
+- (MinePageCourseTipsView *)tipsView {
+    if (!_tipsView) {
+        _tipsView = [MinePageCourseTipsView shareIntance];
+        MJWeakSelf;
+        [_tipsView configWithTypeImage:@"" headTitle:@"什么是趣纠课?" descMsg:@"趣纠课是老师在您的练习过程中提供的个性化指导服务,旨在纠正错误并帮助您更好地理解和掌握所学内容。上课形式为1v1线上课程。" callback:^(COURSE_TIPS_ACTION action) {
+            [weakSelf courseTipsAction:action];
+        }];
+    }
+    return _tipsView;
+}
+
+- (void)courseTipsAction:(COURSE_TIPS_ACTION)action {
+    switch (action) {
+        case COURSE_TIPS_ACTION_REMOVE:
+        {
+            
+        }
+            break;
+        case COURSE_TIPS_ACTION_STOPREMIND:
+        {
+            
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+/**
+ 设置没有数据时的显示
+ 
+ @param promptString 提示语
+ @param imgName 图片名称
+ @param view 显示在什么地方
+ */
+- (void)setPromptString:(NSString *)promptString imageName:(NSString *)imgName inView:(UIView *)view {
+    if (self.promptView != nil) {
+        [self.promptView removeFromSuperview];
+    }
+    else {
+        self.promptView = [[StateView alloc]init];
+        self.promptView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight - 300);
+    }
+    _promptPlaceView = view;
+    //当请求不到数据时 ,自定义提示view 将会出现;
+    self.promptView.imageName = imgName;
+    self.promptView.alpha = 0.0f;
+    [self.promptView setText:promptString];
+    [view addSubview:self.promptView];
+}
+
+// 结束刷新后调用方法
+- (void)changePromptLabelStateWithArray:(NSMutableArray *)array {
+    NSInteger count;
+    if (array.count) {
+        count = array.count;
+    } else {
+        count = 0;
+    }
+    
+    [UIView animateWithDuration:0.1 animations:^{
+        [[self promptView] setAlpha:count ? 0.0f :1.0f ] ;
+    }] ;
+    
+}
+
+- (BOOL)networkAvaiable {
+    return [self checkNetworkAvaiable];
+}
+
+- (BOOL)checkNetworkAvaiable {
+    BOOL isExistenceNetwork = YES;
+    Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
+    switch ([reach currentReachabilityStatus]) {
+        case NotReachable:
+            isExistenceNetwork = NO;
+            //NSLog(@"notReachable");
+            break;
+        case ReachableViaWiFi:
+            isExistenceNetwork = YES;
+            //NSLog(@"WIFI");
+            break;
+        case ReachableViaWWAN:
+            isExistenceNetwork = YES;
+            //NSLog(@"3G");
+            break;
+    }
+    return isExistenceNetwork;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVipProgramCell.h

@@ -0,0 +1,16 @@
+//
+//  MinePageVipProgramCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageVipProgramCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVipProgramCell.m

@@ -0,0 +1,26 @@
+//
+//  MinePageVipProgramCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/15.
+//
+
+#import "MinePageVipProgramCell.h"
+
+@implementation MinePageVipProgramCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+
+
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 124 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVipProgramCell.xib

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <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="88" id="KGk-i7-Jjw" customClass="MinePageVipProgramCell">
+            <rect key="frame" x="0.0" y="0.0" width="320" height="88"/>
+            <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="320" height="88"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nbw-m5-dtr">
+                        <rect key="frame" x="14" y="0.0" width="292" height="76"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="lj2-cE-uvp">
+                                <rect key="frame" x="12" y="12" width="52" height="52"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="lj2-cE-uvp" secondAttribute="height" id="W1n-Cs-zAF"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="6"/>
+                                    </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="geC-8C-ZFK">
+                                <rect key="frame" x="74" y="12" width="173" height="21"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="21" id="Eku-Bp-WDg"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
+                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iRv-tB-juu">
+                                <rect key="frame" x="268" y="0.0" width="24" height="24"/>
+                                <subviews>
+                                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_program_del" translatesAutoresizingMaskIntoConstraints="NO" id="VVO-W2-MPD">
+                                        <rect key="frame" x="4" y="4" width="16" height="16"/>
+                                    </imageView>
+                                </subviews>
+                                <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="bottom" secondItem="VVO-W2-MPD" secondAttribute="bottom" constant="4" id="1gj-LX-1we"/>
+                                    <constraint firstAttribute="width" constant="24" id="cIP-V3-X0l"/>
+                                    <constraint firstItem="VVO-W2-MPD" firstAttribute="top" secondItem="iRv-tB-juu" secondAttribute="top" constant="4" id="pT8-bV-Opu"/>
+                                    <constraint firstItem="VVO-W2-MPD" firstAttribute="leading" secondItem="iRv-tB-juu" secondAttribute="leading" constant="4" id="tIQ-Vl-GPy"/>
+                                    <constraint firstAttribute="height" constant="24" id="u9b-QW-wIc"/>
+                                    <constraint firstAttribute="trailing" secondItem="VVO-W2-MPD" secondAttribute="trailing" constant="4" id="xV8-vj-13i"/>
+                                </constraints>
+                            </view>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xlA-Bv-gE1">
+                                <rect key="frame" x="257" y="0.0" width="35" height="35"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="35" id="BB1-dB-R0K"/>
+                                    <constraint firstAttribute="width" constant="35" id="ZbS-4S-niS"/>
+                                </constraints>
+                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            </button>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥ 100.00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nwI-CN-eRd">
+                                <rect key="frame" x="74" y="40" width="48" height="24"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="24" id="sS5-HV-SNL"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="14"/>
+                                <color key="textColor" red="1" green="0.40784313725490196" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="/25分钟" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hwq-i8-T3E">
+                                <rect key="frame" x="122" y="40" width="51" height="24"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="24" id="jYu-SH-8zG"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstItem="xlA-Bv-gE1" firstAttribute="top" secondItem="nbw-m5-dtr" secondAttribute="top" id="4n8-7m-5gV"/>
+                            <constraint firstAttribute="trailing" secondItem="iRv-tB-juu" secondAttribute="trailing" id="64j-Bm-e1o"/>
+                            <constraint firstItem="hwq-i8-T3E" firstAttribute="leading" secondItem="nwI-CN-eRd" secondAttribute="trailing" id="6oz-3O-wAP"/>
+                            <constraint firstItem="lj2-cE-uvp" firstAttribute="top" secondItem="nbw-m5-dtr" secondAttribute="top" constant="12" id="DvU-3B-NEZ"/>
+                            <constraint firstItem="nwI-CN-eRd" firstAttribute="leading" secondItem="lj2-cE-uvp" secondAttribute="trailing" constant="10" id="EUu-1k-sE0"/>
+                            <constraint firstAttribute="bottom" secondItem="lj2-cE-uvp" secondAttribute="bottom" constant="12" id="OXh-nV-zy6"/>
+                            <constraint firstItem="geC-8C-ZFK" firstAttribute="leading" secondItem="lj2-cE-uvp" secondAttribute="trailing" constant="10" id="SxJ-Tu-OMm"/>
+                            <constraint firstItem="geC-8C-ZFK" firstAttribute="top" secondItem="nbw-m5-dtr" secondAttribute="top" constant="12" id="T6V-JH-FqF"/>
+                            <constraint firstItem="nwI-CN-eRd" firstAttribute="bottom" secondItem="lj2-cE-uvp" secondAttribute="bottom" id="Zil-gU-vgE"/>
+                            <constraint firstAttribute="trailing" secondItem="xlA-Bv-gE1" secondAttribute="trailing" id="cSF-tF-WgL"/>
+                            <constraint firstItem="hwq-i8-T3E" firstAttribute="centerY" secondItem="nwI-CN-eRd" secondAttribute="centerY" id="ggm-sN-YM4"/>
+                            <constraint firstItem="iRv-tB-juu" firstAttribute="top" secondItem="nbw-m5-dtr" secondAttribute="top" id="mV3-7W-afY"/>
+                            <constraint firstItem="xlA-Bv-gE1" firstAttribute="leading" secondItem="geC-8C-ZFK" secondAttribute="trailing" constant="10" id="sRn-TK-wte"/>
+                            <constraint firstItem="lj2-cE-uvp" firstAttribute="leading" secondItem="nbw-m5-dtr" secondAttribute="leading" constant="12" id="zGP-CC-Y1R"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="6"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="nbw-m5-dtr" secondAttribute="trailing" constant="14" id="Aqh-KK-zMe"/>
+                    <constraint firstItem="nbw-m5-dtr" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="NbR-TX-ZGl"/>
+                    <constraint firstItem="nbw-m5-dtr" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="TGj-3J-OIE"/>
+                    <constraint firstAttribute="bottom" secondItem="nbw-m5-dtr" secondAttribute="bottom" constant="12" id="fqJ-5l-3HZ"/>
+                </constraints>
+            </tableViewCellContentView>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <point key="canvasLocation" x="120.61068702290076" y="42.253521126760567"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="course_program_del" width="16" height="16"/>
+    </resources>
+</document>