Steven 4 ヶ月 前
コミット
2b62f8d14c
55 ファイル変更1876 行追加339 行削除
  1. 142 54
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. 5 5
      KulexiuForStudent/KulexiuForStudent/AppDelegate.m
  3. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/arrange_course_bg.imageset/Contents.json
  4. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/arrange_course_bg.imageset/arrange_course_bg@2x.png
  5. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/arrange_course_bg.imageset/arrange_course_bg@3x.png
  6. 6 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/Contents.json
  7. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/square_search.imageset/Contents.json
  8. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/square_search.imageset/square_search@2x.png
  9. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/square_search.imageset/square_search@3x.png
  10. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_selected.imageset/Contents.json
  11. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_selected.imageset/tab_musicSquare_selected@2x.png
  12. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_selected.imageset/tab_musicSquare_selected@3x.png
  13. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_unselected.imageset/Contents.json
  14. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_unselected.imageset/tab_musicSquare_unselected@2x.png
  15. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_unselected.imageset/tab_musicSquare_unselected@3x.png
  16. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/program_tips.imageset/Contents.json
  17. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/program_tips.imageset/program_tips@2x.png
  18. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/program_tips.imageset/program_tips@3x.png
  19. 0 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarAnimation/tabbar2.json
  20. 0 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarAnimation/tabbar3.json
  21. 0 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarAnimation/tabbar4.json
  22. 5 5
      KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarController/KSTabBarViewController.m
  23. 31 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/Controller/HomeArrangeCourseController.h
  24. 295 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/Controller/HomeArrangeCourseController.m
  25. 18 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeAccompanyCourseView.h
  26. 25 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeAccompanyCourseView.m
  27. 18 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeLiveCourseView.h
  28. 25 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeLiveCourseView.m
  29. 24 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeNavView.h
  30. 53 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeNavView.m
  31. 90 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeNavView.xib
  32. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeSortView.h
  33. 20 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeSortView.m
  34. 40 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeSortView.xib
  35. 18 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVIPCourseView.h
  36. 25 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVIPCourseView.m
  37. 18 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVideoCourseView.h
  38. 25 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVideoCourseView.m
  39. 9 4
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  40. 0 33
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNavView.h
  41. 0 52
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNavView.m
  42. 0 133
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNavView.xib
  43. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNewMusic/HomeNewMusicView.m
  44. 13 13
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNewMusic/HomeNewMusicView.xib
  45. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.m
  46. 13 13
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.xib
  47. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.m
  48. 11 11
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.xib
  49. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.m
  50. 12 12
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.xib
  51. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/Controller/MusicSquareViewController.h
  52. 611 0
      KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/Controller/MusicSquareViewController.m
  53. 24 0
      KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/View/MusicSquareNavView.h
  54. 49 0
      KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/View/MusicSquareNavView.m
  55. 105 0
      KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/View/MusicSquareNavView.xib

+ 142 - 54
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -340,6 +340,15 @@
 		BC2932FD2AAEF4AB0024D98E /* InsititutionMineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2932FC2AAEF4AB0024D98E /* InsititutionMineViewController.m */; };
 		BC2933002AAEFC810024D98E /* INSSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2932FF2AAEFC810024D98E /* INSSettingViewController.m */; };
 		BC29AD332BFAFF3200D44848 /* KSLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC29AD312BFAFF3200D44848 /* KSLogManager.m */; };
+		BC2C1BA92CEB4FC300EDEB97 /* HomeArrangeCourseController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2C1BA82CEB4FC300EDEB97 /* HomeArrangeCourseController.m */; };
+		BC2C1BAC2CEB505600EDEB97 /* HomeArrangeNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2C1BAB2CEB505600EDEB97 /* HomeArrangeNavView.m */; };
+		BC2C1BAE2CEB505B00EDEB97 /* HomeArrangeNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC2C1BAD2CEB505B00EDEB97 /* HomeArrangeNavView.xib */; };
+		BC2C1BB12CEB555500EDEB97 /* HomeArrangeVIPCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2C1BB02CEB555500EDEB97 /* HomeArrangeVIPCourseView.m */; };
+		BC2C1BB42CEB556100EDEB97 /* HomeArrangeAccompanyCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2C1BB32CEB556100EDEB97 /* HomeArrangeAccompanyCourseView.m */; };
+		BC2C1BB72CEB556E00EDEB97 /* HomeArrangeLiveCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2C1BB62CEB556E00EDEB97 /* HomeArrangeLiveCourseView.m */; };
+		BC2C1BBA2CEB557700EDEB97 /* HomeArrangeVideoCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2C1BB92CEB557700EDEB97 /* HomeArrangeVideoCourseView.m */; };
+		BC2C1BBD2CEB579B00EDEB97 /* HomeArrangeSortView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2C1BBC2CEB579B00EDEB97 /* HomeArrangeSortView.m */; };
+		BC2C1BBF2CEB57A400EDEB97 /* HomeArrangeSortView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC2C1BBE2CEB57A400EDEB97 /* HomeArrangeSortView.xib */; };
 		BC2DFF4B28BDFE740056105A /* HomeTeacherLiveModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2DFF4A28BDFE730056105A /* HomeTeacherLiveModel.m */; };
 		BC2DFF4E28BE068D0056105A /* TeacherStyleFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2DFF4D28BE068D0056105A /* TeacherStyleFlowLayout.m */; };
 		BC2DFF5728BE143A0056105A /* HomeTempLiveCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2DFF5528BE143A0056105A /* HomeTempLiveCell.m */; };
@@ -383,6 +392,9 @@
 		BC3300182BBAB623003D4921 /* CoursewareDownloadManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3300122BBAB623003D4921 /* CoursewareDownloadManager.m */; };
 		BC3300192BBAB623003D4921 /* KnowledgePointListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3300142BBAB623003D4921 /* KnowledgePointListModel.m */; };
 		BC33001A2BBAB623003D4921 /* MaterialList.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3300162BBAB623003D4921 /* MaterialList.m */; };
+		BC3332732CEC235600649FF9 /* MusicSquareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3332722CEC235600649FF9 /* MusicSquareViewController.m */; };
+		BC3332762CEC259F00649FF9 /* MusicSquareNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3332752CEC259F00649FF9 /* MusicSquareNavView.m */; };
+		BC3332782CEC25A900649FF9 /* MusicSquareNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC3332772CEC25A900649FF9 /* MusicSquareNavView.xib */; };
 		BC36A5082AB406A5002FEFB1 /* GroupOwnerTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC36A5072AB406A5002FEFB1 /* GroupOwnerTagView.m */; };
 		BC36A50A2AB406AB002FEFB1 /* GroupOwnerTagView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC36A5092AB406AB002FEFB1 /* GroupOwnerTagView.xib */; };
 		BC38C3E82AF893B400ABFCC2 /* KSPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC38C3D52AF893B300ABFCC2 /* KSPlayerView.m */; };
@@ -547,10 +559,10 @@
 		BC71D27A288804CD0010F14B /* img_35.png in Resources */ = {isa = PBXBuildFile; fileRef = BC71D242288804CD0010F14B /* img_35.png */; };
 		BC71D27B288804CD0010F14B /* img_21.png in Resources */ = {isa = PBXBuildFile; fileRef = BC71D243288804CD0010F14B /* img_21.png */; };
 		BC71D27F288807680010F14B /* AnimationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = BC71D27E288807680010F14B /* AnimationHelper.m */; };
-		BC71D2852888083B0010F14B /* tabbar4.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2802888083A0010F14B /* tabbar4.json */; };
+		BC71D2852888083B0010F14B /* tabbar2.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2802888083A0010F14B /* tabbar2.json */; };
 		BC71D2862888083B0010F14B /* tabbar1.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2812888083B0010F14B /* tabbar1.json */; };
-		BC71D2872888083B0010F14B /* tabbar3.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2822888083B0010F14B /* tabbar3.json */; };
-		BC71D2882888083B0010F14B /* tabbar2.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2832888083B0010F14B /* tabbar2.json */; };
+		BC71D2872888083B0010F14B /* tabbar4.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2822888083B0010F14B /* tabbar4.json */; };
+		BC71D2882888083B0010F14B /* tabbar3.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2832888083B0010F14B /* tabbar3.json */; };
 		BC71D2892888083B0010F14B /* tabbar5.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D2842888083B0010F14B /* tabbar5.json */; };
 		BC736A92288036E8004A9B0A /* MyVideoSearchView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC736A90288036E8004A9B0A /* MyVideoSearchView.m */; };
 		BC736A93288036E8004A9B0A /* MyVideoSearchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC736A91288036E8004A9B0A /* MyVideoSearchView.xib */; };
@@ -694,8 +706,6 @@
 		BCB9FA46286EDCD7005D766B /* KSTipsAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB9FA43286EDCD7005D766B /* KSTipsAlert.m */; };
 		BCB9FA47286EDCD7005D766B /* KSTipsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCB9FA45286EDCD7005D766B /* KSTipsAlert.xib */; };
 		BCB9FA4A286EDE1A005D766B /* BaseAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB9FA49286EDE19005D766B /* BaseAlertView.m */; };
-		BCBFDF3728110C660052AFE5 /* HomeNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCBFDF3628110C660052AFE5 /* HomeNavView.m */; };
-		BCBFDF3928110C6F0052AFE5 /* HomeNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCBFDF3828110C6F0052AFE5 /* HomeNavView.xib */; };
 		BCBFDF41281157340052AFE5 /* HomeButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCBFDF40281157340052AFE5 /* HomeButtonView.m */; };
 		BCBFDF432811573D0052AFE5 /* HomeButtonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCBFDF422811573D0052AFE5 /* HomeButtonView.xib */; };
 		BCBFDF46281159990052AFE5 /* HomeHotAlbumView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCBFDF45281159990052AFE5 /* HomeHotAlbumView.m */; };
@@ -1578,6 +1588,22 @@
 		BC2932FF2AAEFC810024D98E /* INSSettingViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = INSSettingViewController.m; sourceTree = "<group>"; };
 		BC29AD302BFAFF3200D44848 /* KSLogManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSLogManager.h; sourceTree = "<group>"; };
 		BC29AD312BFAFF3200D44848 /* KSLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLogManager.m; sourceTree = "<group>"; };
+		BC2C1BA72CEB4FC300EDEB97 /* HomeArrangeCourseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeArrangeCourseController.h; sourceTree = "<group>"; };
+		BC2C1BA82CEB4FC300EDEB97 /* HomeArrangeCourseController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeArrangeCourseController.m; sourceTree = "<group>"; };
+		BC2C1BAA2CEB505600EDEB97 /* HomeArrangeNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeArrangeNavView.h; sourceTree = "<group>"; };
+		BC2C1BAB2CEB505600EDEB97 /* HomeArrangeNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeArrangeNavView.m; sourceTree = "<group>"; };
+		BC2C1BAD2CEB505B00EDEB97 /* HomeArrangeNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeArrangeNavView.xib; sourceTree = "<group>"; };
+		BC2C1BAF2CEB555500EDEB97 /* HomeArrangeVIPCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeArrangeVIPCourseView.h; sourceTree = "<group>"; };
+		BC2C1BB02CEB555500EDEB97 /* HomeArrangeVIPCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeArrangeVIPCourseView.m; sourceTree = "<group>"; };
+		BC2C1BB22CEB556100EDEB97 /* HomeArrangeAccompanyCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeArrangeAccompanyCourseView.h; sourceTree = "<group>"; };
+		BC2C1BB32CEB556100EDEB97 /* HomeArrangeAccompanyCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeArrangeAccompanyCourseView.m; sourceTree = "<group>"; };
+		BC2C1BB52CEB556E00EDEB97 /* HomeArrangeLiveCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeArrangeLiveCourseView.h; sourceTree = "<group>"; };
+		BC2C1BB62CEB556E00EDEB97 /* HomeArrangeLiveCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeArrangeLiveCourseView.m; sourceTree = "<group>"; };
+		BC2C1BB82CEB557700EDEB97 /* HomeArrangeVideoCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeArrangeVideoCourseView.h; sourceTree = "<group>"; };
+		BC2C1BB92CEB557700EDEB97 /* HomeArrangeVideoCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeArrangeVideoCourseView.m; sourceTree = "<group>"; };
+		BC2C1BBB2CEB579B00EDEB97 /* HomeArrangeSortView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeArrangeSortView.h; sourceTree = "<group>"; };
+		BC2C1BBC2CEB579B00EDEB97 /* HomeArrangeSortView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeArrangeSortView.m; sourceTree = "<group>"; };
+		BC2C1BBE2CEB57A400EDEB97 /* HomeArrangeSortView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeArrangeSortView.xib; sourceTree = "<group>"; };
 		BC2DFF4928BDFE730056105A /* HomeTeacherLiveModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeTeacherLiveModel.h; sourceTree = "<group>"; };
 		BC2DFF4A28BDFE730056105A /* HomeTeacherLiveModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeTeacherLiveModel.m; sourceTree = "<group>"; };
 		BC2DFF4C28BE068D0056105A /* TeacherStyleFlowLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TeacherStyleFlowLayout.h; sourceTree = "<group>"; };
@@ -1651,6 +1677,11 @@
 		BC3300142BBAB623003D4921 /* KnowledgePointListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KnowledgePointListModel.m; sourceTree = "<group>"; };
 		BC3300152BBAB623003D4921 /* MaterialList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaterialList.h; sourceTree = "<group>"; };
 		BC3300162BBAB623003D4921 /* MaterialList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MaterialList.m; sourceTree = "<group>"; };
+		BC3332712CEC235600649FF9 /* MusicSquareViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MusicSquareViewController.h; sourceTree = "<group>"; };
+		BC3332722CEC235600649FF9 /* MusicSquareViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MusicSquareViewController.m; sourceTree = "<group>"; };
+		BC3332742CEC259F00649FF9 /* MusicSquareNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MusicSquareNavView.h; sourceTree = "<group>"; };
+		BC3332752CEC259F00649FF9 /* MusicSquareNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MusicSquareNavView.m; sourceTree = "<group>"; };
+		BC3332772CEC25A900649FF9 /* MusicSquareNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MusicSquareNavView.xib; sourceTree = "<group>"; };
 		BC36A5062AB406A5002FEFB1 /* GroupOwnerTagView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GroupOwnerTagView.h; sourceTree = "<group>"; };
 		BC36A5072AB406A5002FEFB1 /* GroupOwnerTagView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GroupOwnerTagView.m; sourceTree = "<group>"; };
 		BC36A5092AB406AB002FEFB1 /* GroupOwnerTagView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GroupOwnerTagView.xib; sourceTree = "<group>"; };
@@ -1881,10 +1912,10 @@
 		BC71D243288804CD0010F14B /* img_21.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_21.png; sourceTree = "<group>"; };
 		BC71D27D288807680010F14B /* AnimationHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AnimationHelper.h; sourceTree = "<group>"; };
 		BC71D27E288807680010F14B /* AnimationHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AnimationHelper.m; sourceTree = "<group>"; };
-		BC71D2802888083A0010F14B /* tabbar4.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar4.json; sourceTree = "<group>"; };
+		BC71D2802888083A0010F14B /* tabbar2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar2.json; sourceTree = "<group>"; };
 		BC71D2812888083B0010F14B /* tabbar1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar1.json; sourceTree = "<group>"; };
-		BC71D2822888083B0010F14B /* tabbar3.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar3.json; sourceTree = "<group>"; };
-		BC71D2832888083B0010F14B /* tabbar2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar2.json; sourceTree = "<group>"; };
+		BC71D2822888083B0010F14B /* tabbar4.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar4.json; sourceTree = "<group>"; };
+		BC71D2832888083B0010F14B /* tabbar3.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar3.json; sourceTree = "<group>"; };
 		BC71D2842888083B0010F14B /* tabbar5.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tabbar5.json; sourceTree = "<group>"; };
 		BC736A8F288036E8004A9B0A /* MyVideoSearchView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyVideoSearchView.h; sourceTree = "<group>"; };
 		BC736A90288036E8004A9B0A /* MyVideoSearchView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyVideoSearchView.m; sourceTree = "<group>"; };
@@ -2110,9 +2141,6 @@
 		BCB9FA45286EDCD7005D766B /* KSTipsAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KSTipsAlert.xib; sourceTree = "<group>"; };
 		BCB9FA48286EDE19005D766B /* BaseAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseAlertView.h; sourceTree = "<group>"; };
 		BCB9FA49286EDE19005D766B /* BaseAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseAlertView.m; sourceTree = "<group>"; };
-		BCBFDF3528110C660052AFE5 /* HomeNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeNavView.h; sourceTree = "<group>"; };
-		BCBFDF3628110C660052AFE5 /* HomeNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeNavView.m; sourceTree = "<group>"; };
-		BCBFDF3828110C6F0052AFE5 /* HomeNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeNavView.xib; sourceTree = "<group>"; };
 		BCBFDF3F281157340052AFE5 /* HomeButtonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeButtonView.h; sourceTree = "<group>"; };
 		BCBFDF40281157340052AFE5 /* HomeButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeButtonView.m; sourceTree = "<group>"; };
 		BCBFDF422811573D0052AFE5 /* HomeButtonView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeButtonView.xib; sourceTree = "<group>"; };
@@ -2810,6 +2838,7 @@
 				BC71D1342887CD470010F14B /* AnimationLaunch */,
 				BCB6340A27F6D29500ACFDCF /* Live */,
 				275FA1F127E7356A00CFEA2E /* Home */,
+				BC3332702CEC233F00649FF9 /* MusicSquare */,
 				275FA1F727E7356A00CFEA2E /* Course */,
 				275FA1FD27E7356B00CFEA2E /* Chat */,
 				275FA20327E7356B00CFEA2E /* Mine */,
@@ -2822,6 +2851,7 @@
 		275FA1F127E7356A00CFEA2E /* Home */ = {
 			isa = PBXGroup;
 			children = (
+				BC2C1BA62CEB4FA800EDEB97 /* ArrangeCourse */,
 				BC40BA0F28124D0C00DEC0D1 /* NoticeCenter */,
 				275FA1F227E7356A00CFEA2E /* Controller */,
 				275FA1F527E7356A00CFEA2E /* Model */,
@@ -2890,9 +2920,6 @@
 				BC8C2C7B28265D8D00FBA5D5 /* KSNewsAlert.h */,
 				BC8C2C7C28265D8D00FBA5D5 /* KSNewsAlert.m */,
 				BC8C2C7D28265D8E00FBA5D5 /* KSNewsAlert.xib */,
-				BCBFDF3528110C660052AFE5 /* HomeNavView.h */,
-				BCBFDF3628110C660052AFE5 /* HomeNavView.m */,
-				BCBFDF3828110C6F0052AFE5 /* HomeNavView.xib */,
 				BCBFDF4928115C6F0052AFE5 /* HomeHotCourseView.h */,
 				BCBFDF4A28115C6F0052AFE5 /* HomeHotCourseView.m */,
 				BCBFDF4C28115C7A0052AFE5 /* HomeHotCourseView.xib */,
@@ -4036,7 +4063,6 @@
 			children = (
 				BC2932E52AAEC19B0024D98E /* NavController */,
 				BC2932E42AAEC19B0024D98E /* TabbarController */,
-				BC2932DC2AAEC15D0024D98E /* Chat */,
 				BC2932E02AAEC15E0024D98E /* Home */,
 				BC2932D82AAEC15D0024D98E /* Mine */,
 			);
@@ -4101,37 +4127,6 @@
 			path = View;
 			sourceTree = "<group>";
 		};
-		BC2932DC2AAEC15D0024D98E /* Chat */ = {
-			isa = PBXGroup;
-			children = (
-				BC2932DD2AAEC15D0024D98E /* Controller */,
-				BC2932DE2AAEC15D0024D98E /* Model */,
-				BC2932DF2AAEC15D0024D98E /* View */,
-			);
-			path = Chat;
-			sourceTree = "<group>";
-		};
-		BC2932DD2AAEC15D0024D98E /* Controller */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			path = Controller;
-			sourceTree = "<group>";
-		};
-		BC2932DE2AAEC15D0024D98E /* Model */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			path = Model;
-			sourceTree = "<group>";
-		};
-		BC2932DF2AAEC15D0024D98E /* View */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			path = View;
-			sourceTree = "<group>";
-		};
 		BC2932E02AAEC15E0024D98E /* Home */ = {
 			isa = PBXGroup;
 			children = (
@@ -4226,6 +4221,53 @@
 			path = LogManager;
 			sourceTree = "<group>";
 		};
+		BC2C1BA32CEB4FA800EDEB97 /* Controller */ = {
+			isa = PBXGroup;
+			children = (
+				BC2C1BA72CEB4FC300EDEB97 /* HomeArrangeCourseController.h */,
+				BC2C1BA82CEB4FC300EDEB97 /* HomeArrangeCourseController.m */,
+			);
+			path = Controller;
+			sourceTree = "<group>";
+		};
+		BC2C1BA42CEB4FA800EDEB97 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		BC2C1BA52CEB4FA800EDEB97 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				BC2C1BAA2CEB505600EDEB97 /* HomeArrangeNavView.h */,
+				BC2C1BAB2CEB505600EDEB97 /* HomeArrangeNavView.m */,
+				BC2C1BAD2CEB505B00EDEB97 /* HomeArrangeNavView.xib */,
+				BC2C1BBB2CEB579B00EDEB97 /* HomeArrangeSortView.h */,
+				BC2C1BBC2CEB579B00EDEB97 /* HomeArrangeSortView.m */,
+				BC2C1BBE2CEB57A400EDEB97 /* HomeArrangeSortView.xib */,
+				BC2C1BAF2CEB555500EDEB97 /* HomeArrangeVIPCourseView.h */,
+				BC2C1BB02CEB555500EDEB97 /* HomeArrangeVIPCourseView.m */,
+				BC2C1BB22CEB556100EDEB97 /* HomeArrangeAccompanyCourseView.h */,
+				BC2C1BB32CEB556100EDEB97 /* HomeArrangeAccompanyCourseView.m */,
+				BC2C1BB52CEB556E00EDEB97 /* HomeArrangeLiveCourseView.h */,
+				BC2C1BB62CEB556E00EDEB97 /* HomeArrangeLiveCourseView.m */,
+				BC2C1BB82CEB557700EDEB97 /* HomeArrangeVideoCourseView.h */,
+				BC2C1BB92CEB557700EDEB97 /* HomeArrangeVideoCourseView.m */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
+		BC2C1BA62CEB4FA800EDEB97 /* ArrangeCourse */ = {
+			isa = PBXGroup;
+			children = (
+				BC2C1BA32CEB4FA800EDEB97 /* Controller */,
+				BC2C1BA42CEB4FA800EDEB97 /* Model */,
+				BC2C1BA52CEB4FA800EDEB97 /* View */,
+			);
+			path = ArrangeCourse;
+			sourceTree = "<group>";
+		};
 		BC2DFF5928C097D00056105A /* AnimationSource */ = {
 			isa = PBXGroup;
 			children = (
@@ -4392,6 +4434,42 @@
 			path = CoursewareDownload;
 			sourceTree = "<group>";
 		};
+		BC33326D2CEC233F00649FF9 /* Controller */ = {
+			isa = PBXGroup;
+			children = (
+				BC3332712CEC235600649FF9 /* MusicSquareViewController.h */,
+				BC3332722CEC235600649FF9 /* MusicSquareViewController.m */,
+			);
+			path = Controller;
+			sourceTree = "<group>";
+		};
+		BC33326E2CEC233F00649FF9 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		BC33326F2CEC233F00649FF9 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				BC3332742CEC259F00649FF9 /* MusicSquareNavView.h */,
+				BC3332752CEC259F00649FF9 /* MusicSquareNavView.m */,
+				BC3332772CEC25A900649FF9 /* MusicSquareNavView.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
+		BC3332702CEC233F00649FF9 /* MusicSquare */ = {
+			isa = PBXGroup;
+			children = (
+				BC33326D2CEC233F00649FF9 /* Controller */,
+				BC33326E2CEC233F00649FF9 /* Model */,
+				BC33326F2CEC233F00649FF9 /* View */,
+			);
+			path = MusicSquare;
+			sourceTree = "<group>";
+		};
 		BC38C3CC2AF892FB00ABFCC2 /* MediaMerge */ = {
 			isa = PBXGroup;
 			children = (
@@ -5048,9 +5126,9 @@
 				BC71D27D288807680010F14B /* AnimationHelper.h */,
 				BC71D27E288807680010F14B /* AnimationHelper.m */,
 				BC71D2812888083B0010F14B /* tabbar1.json */,
-				BC71D2832888083B0010F14B /* tabbar2.json */,
-				BC71D2822888083B0010F14B /* tabbar3.json */,
-				BC71D2802888083A0010F14B /* tabbar4.json */,
+				BC71D2832888083B0010F14B /* tabbar3.json */,
+				BC71D2822888083B0010F14B /* tabbar4.json */,
+				BC71D2802888083A0010F14B /* tabbar2.json */,
 				BC71D2842888083B0010F14B /* tabbar5.json */,
 			);
 			path = TabbarAnimation;
@@ -6215,6 +6293,7 @@
 				BCCE95DE2AB0490D00AB6385 /* TenantHomeSubjectListCell.xib in Resources */,
 				BCC583CB28A9EC6400BAB4CF /* cloud_animation_7.png in Resources */,
 				BC71D1052881A2420010F14B /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
+				BC2C1BBF2CEB57A400EDEB97 /* HomeArrangeSortView.xib in Resources */,
 				BC802DBF28BC8E350079E350 /* HomeHotLiveCourseView.xib in Resources */,
 				BC38C45C2AFA095D00ABFCC2 /* MineWorksNavView.xib in Resources */,
 				BC71D15D2887F9DB0010F14B /* launchAni.json in Resources */,
@@ -6228,7 +6307,7 @@
 				BCC583BE28A9EC6400BAB4CF /* cloud_animation_24.png in Resources */,
 				BCCDB4352AB1C040003C8E5F /* TenantTicketAlert.xib in Resources */,
 				BC71D0FF2881A2420010F14B /* README.txt in Resources */,
-				BC71D2852888083B0010F14B /* tabbar4.json in Resources */,
+				BC71D2852888083B0010F14B /* tabbar2.json in Resources */,
 				BCC583CD28A9EC6400BAB4CF /* cloud_animation_4.png in Resources */,
 				2779355727E324A70010E277 /* KSPremissionAlert.xib in Resources */,
 				2723B5C327F157B100E0B90B /* ChatNavView.xib in Resources */,
@@ -6307,7 +6386,7 @@
 				BC71D1022881A2420010F14B /* WeiboSDK.bundle in Resources */,
 				BC7F7B772C92DD9500265AE1 /* KSDeleteAccountTipsAlert.xib in Resources */,
 				BC106C342A9338A7000759A9 /* TXLiveLoadingView.xib in Resources */,
-				BC71D2872888083B0010F14B /* tabbar3.json in Resources */,
+				BC71D2872888083B0010F14B /* tabbar4.json in Resources */,
 				BCC583C028A9EC6400BAB4CF /* cloud_animation_15.png in Resources */,
 				BC119280280FB10900A716F7 /* AccompanyRemarkCell.xib in Resources */,
 				BCC409012AFCE6B500C60249 /* MusicPublicContentView.xib in Resources */,
@@ -6419,6 +6498,7 @@
 				BC71D26D288804CD0010F14B /* img_18.png in Resources */,
 				BC42CAA42BEC8272001F076E /* RhythmView.xib in Resources */,
 				BC9AA0B72ABC1C2A00CD954D /* GroupQuitAlert.xib in Resources */,
+				BC3332782CEC25A900649FF9 /* MusicSquareNavView.xib in Resources */,
 				BCB6348127F6D29600ACFDCF /* LiveSeatApplyCell.xib in Resources */,
 				BC38C4602AFA095D00ABFCC2 /* MineWorksBottomView.xib in Resources */,
 				2723B62D27F157D500E0B90B /* GroupApplyMemberCell.xib in Resources */,
@@ -6448,7 +6528,6 @@
 				BC27A076280FF61300F91E27 /* AccompanyDetailBottomView.xib in Resources */,
 				BCBFDF4D28115C7A0052AFE5 /* HomeHotCourseView.xib in Resources */,
 				BC71D2892888083B0010F14B /* tabbar5.json in Resources */,
-				BCBFDF3928110C6F0052AFE5 /* HomeNavView.xib in Resources */,
 				BC89AC0B2AB0841400B077AF /* TenantRecommendMusicView.xib in Resources */,
 				27F9033C27E87FE100C08A19 /* MineBodyView.xib in Resources */,
 				BCC0F6A82A8CDD3F00C4EFA4 /* SealClass.strings in Resources */,
@@ -6487,6 +6566,7 @@
 				BCCE95F42AB05F3D00AB6385 /* TenantHotAlbumCell.xib in Resources */,
 				BC8B641728F3B5B300A08D16 /* KSAwardAlertView.xib in Resources */,
 				BC71D265288804CD0010F14B /* img_55.png in Resources */,
+				BC2C1BAE2CEB505B00EDEB97 /* HomeArrangeNavView.xib in Resources */,
 				BC89AC1F2AB08FF500B077AF /* TenantMusicCellView.xib in Resources */,
 				BC71D0FA2881A2420010F14B /* UMSocialSDKResources.bundle in Resources */,
 				BC38C4992AFA4B9C00ABFCC2 /* KSProgressLoadingView.xib in Resources */,
@@ -6529,7 +6609,7 @@
 				BC71D2862888083B0010F14B /* tabbar1.json in Resources */,
 				BCC5839228A9E8AF00BAB4CF /* AccompanyLoadingView.xib in Resources */,
 				BCB9FA37286D7C38005D766B /* GuideListView.xib in Resources */,
-				BC71D2882888083B0010F14B /* tabbar2.json in Resources */,
+				BC71D2882888083B0010F14B /* tabbar3.json in Resources */,
 				BCC409052AFCE6B500C60249 /* MusicPublistAlert.xib in Resources */,
 				BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */,
 				BC71D26F288804CD0010F14B /* img_24.png in Resources */,
@@ -6793,6 +6873,7 @@
 				BCCC36202AAF0EDF000D60CA /* SettingBottomView.m in Sources */,
 				2723B66427F15CFC00E0B90B /* VeriCheckView.m in Sources */,
 				2779354C27E324A70010E277 /* KSGifRefreshHeader.m in Sources */,
+				BC2C1BAC2CEB505600EDEB97 /* HomeArrangeNavView.m in Sources */,
 				BC11925E280FA89A00A716F7 /* HomeworkBodyView.m in Sources */,
 				275FA1EB27E7351900CFEA2E /* KSBaseWKWebViewController.m in Sources */,
 				BCC409072AFCE6B500C60249 /* MusicPublicContentView.m in Sources */,
@@ -6850,6 +6931,7 @@
 				BCECE2522B3D670500C0D555 /* FeedbackSortView.m in Sources */,
 				277935BF27E324A90010E277 /* FSCalendarHeaderView.m in Sources */,
 				275FA1AE27E734C600CFEA2E /* KSImageAlert.m in Sources */,
+				BC3332762CEC259F00649FF9 /* MusicSquareNavView.m in Sources */,
 				BC2888582A80F7BF0064B773 /* KSLoginManager.m in Sources */,
 				BCC0F60D2A8CD86C00C4EFA4 /* TXDeviceControlNotiferMsg.m in Sources */,
 				275FA1DE27E7351900CFEA2E /* KSLocalWebViewController.m in Sources */,
@@ -6934,6 +7016,7 @@
 				BC2932EB2AAEC2530024D98E /* InstitutionNavController.m in Sources */,
 				BC756CBC28FE7D5600AA9ECB /* UserDetailBodyView.m in Sources */,
 				BCB6346D27F6D29600ACFDCF /* KSEnterLiveroomManager.m in Sources */,
+				BC2C1BA92CEB4FC300EDEB97 /* HomeArrangeCourseController.m in Sources */,
 				BCC0F6692A8CD8F500C4EFA4 /* KSDanInputView.m in Sources */,
 				2723B5BD27F157B100E0B90B /* KSChatListSearchView.m in Sources */,
 				BCCC361A2AAF0D77000D60CA /* INSSettingBodyView.m in Sources */,
@@ -7016,6 +7099,7 @@
 				BC27A06F280FF56C00F91E27 /* AccompanyStudentEvaCell.m in Sources */,
 				BC0212FB27FC61D30040569F /* KSSegmentControl.m in Sources */,
 				BC31BF192B21925700F7D538 /* KSGaugeSectorView.m in Sources */,
+				BC2C1BBA2CEB557700EDEB97 /* HomeArrangeVideoCourseView.m in Sources */,
 				BC119223280ED6F500A716F7 /* AccompanyLessonModel.m in Sources */,
 				BCCC36272AAF4346000D60CA /* KSTenantHomeViewController.m in Sources */,
 				BC38C3EA2AF893B400ABFCC2 /* KSVideoPlayerView.m in Sources */,
@@ -7029,6 +7113,7 @@
 				BC106BFE2A933829000759A9 /* TXMicStatusSync.m in Sources */,
 				BC11925B280FA85300A716F7 /* HomeworkSortView.m in Sources */,
 				BCB5B30E2ABC1711005BF25D /* KSPhotoChooseView.m in Sources */,
+				BC3332732CEC235600649FF9 /* MusicSquareViewController.m in Sources */,
 				BCC0F6572A8CD8F500C4EFA4 /* TxClassroomChatOtherCell.m in Sources */,
 				BCC0F6652A8CD8F500C4EFA4 /* TXDanChatCell.m in Sources */,
 				BC542E5828409EC900633781 /* InstrumentChooseCell.m in Sources */,
@@ -7060,7 +7145,7 @@
 				BC106C082A933829000759A9 /* TXLiveMessageEnter.m in Sources */,
 				BC31BF252B21925700F7D538 /* WMGaugeViewStyle3D.m in Sources */,
 				BCECE2452B3D670500C0D555 /* FeedbackListViewController.m in Sources */,
-				BCBFDF3728110C660052AFE5 /* HomeNavView.m in Sources */,
+				BC2C1BB12CEB555500EDEB97 /* HomeArrangeVIPCourseView.m in Sources */,
 				BC76630E2827E48800C91A1D /* NotiferMessageModel.m in Sources */,
 				BCFE5406281545C600AD6786 /* HomeAlbumModel.m in Sources */,
 				BC106C352A9338A7000759A9 /* TXUISeatMember.m in Sources */,
@@ -7092,6 +7177,7 @@
 				BC28887D2A8102890064B773 /* KSGroupConversationController.m in Sources */,
 				277935C027E324A90010E277 /* FSCalendarTransitionCoordinator.m in Sources */,
 				BC802DA328BC5F8D0079E350 /* HomeHotMusicCellView.m in Sources */,
+				BC2C1BB72CEB556E00EDEB97 /* HomeArrangeLiveCourseView.m in Sources */,
 				BC38C3E92AF893B400ABFCC2 /* KSMediaMergeView.m in Sources */,
 				BC38C45F2AFA095D00ABFCC2 /* MineWorksBottomView.m in Sources */,
 				BC38C45A2AFA095D00ABFCC2 /* MineWorksNavView.m in Sources */,
@@ -7147,6 +7233,7 @@
 				275FA23427E7356B00CFEA2E /* UserInfo.m in Sources */,
 				27F9033A27E87FD500C08A19 /* MineBodyView.m in Sources */,
 				275FA1EC27E7351900CFEA2E /* BaseViewController.m in Sources */,
+				BC2C1BB42CEB556100EDEB97 /* HomeArrangeAccompanyCourseView.m in Sources */,
 				BC11922B280ED8E800A716F7 /* CourseNavView.m in Sources */,
 				BCC0F6632A8CD8F500C4EFA4 /* TXTimeView.m in Sources */,
 				BCECE2472B3D670500C0D555 /* FeedbackListModel.m in Sources */,
@@ -7156,6 +7243,7 @@
 				BC31BF222B21925700F7D538 /* ToneTuningBodyView.m in Sources */,
 				275FA23127E7356B00CFEA2E /* FirstSettingViewController.m in Sources */,
 				BC2932FD2AAEF4AB0024D98E /* InsititutionMineViewController.m in Sources */,
+				BC2C1BBD2CEB579B00EDEB97 /* HomeArrangeSortView.m in Sources */,
 				BCC0F6D12A8CE13A00C4EFA4 /* KSTipsView.m in Sources */,
 				BC11922A280ED8E800A716F7 /* LTSCalendarBottomView.m in Sources */,
 				BCFE54002814E1BE00AD6786 /* HomeVideoGroupModel.m in Sources */,

+ 5 - 5
KulexiuForStudent/KulexiuForStudent/AppDelegate.m

@@ -539,8 +539,8 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
         }
     }
     else {
-        // 跳转到第二个页面
-        [self.tabBarController tabBarSelectedWithIndex:2];
+        // IM消息 区分机构还是普通
+        [self.tabBarController tabBarSelectedWithIndex:3];
     }
 }
 
@@ -805,7 +805,7 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
                 [navCtrl pushViewController:ctrl animated:YES];
             }
             else if ([pageType isEqualToString:@"buyPractice"] || [pageType isEqualToString:@"courseRemind"]) { // 课表
-                [self.tabBarController tabBarSelectedWithIndex:1];
+                [self.tabBarController tabBarSelectedWithIndex:2];
                 CustomNavViewController *navCtrl = self.tabBarController.selectedViewController;
                 [navCtrl popToRootViewControllerAnimated:YES];
             }
@@ -932,7 +932,7 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
 
 - (void)noteIMNewsCount:(NSInteger)count {
     if ([self.tabBarController isKindOfClass:[KSTabBarViewController class]]) {
-        [self.tabBarController noteNewsWithIndex:2 count:count];
+        [self.tabBarController noteNewsWithIndex:3 count:count];
     }
     else {
         [self.tabBarController noteNewsWithIndex:1 count:count];
@@ -941,7 +941,7 @@ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
 
 - (void)clearIMNewsCount {
     if ([self.tabBarController isKindOfClass:[KSTabBarViewController class]]) {
-        [self.tabBarController clearNewsWithIndex:2];
+        [self.tabBarController clearNewsWithIndex:3];
     }
     else {
         [self.tabBarController clearNewsWithIndex:1];

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/arrange_course_bg.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/arrange_course_bg.imageset/arrange_course_bg@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/arrange_course_bg.imageset/arrange_course_bg@3x.png


+ 6 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/square_search.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/square_search.imageset/square_search@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/MusicSquare/square_search.imageset/square_search@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_selected.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_selected.imageset/tab_musicSquare_selected@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_selected.imageset/tab_musicSquare_selected@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_unselected.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_unselected.imageset/tab_musicSquare_unselected@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Tabbar/tab_musicSquare_unselected.imageset/tab_musicSquare_unselected@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/program_tips.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/program_tips.imageset/program_tips@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/program_tips.imageset/program_tips@3x.png


ファイルの差分が大きいため隠しています
+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarAnimation/tabbar2.json


ファイルの差分が大きいため隠しています
+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarAnimation/tabbar3.json


ファイルの差分が大きいため隠しています
+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarAnimation/tabbar4.json


+ 5 - 5
KulexiuForStudent/KulexiuForStudent/Common/Base/TabbarController/KSTabBarViewController.m

@@ -44,10 +44,10 @@
             self.traitOverrides.horizontalSizeClass = UIUserInterfaceSizeClassCompact; //TAB BAR ON BOTTOM
         }
     }
-    NSArray *controllerArray = @[@"HomeViewController",@"CourseViewController",@"ChatViewController",@"ShopMallViewController",@"MineViewController"];
-    NSArray *titleArray = @[@"首页",@"课表",@"聊天",@"商城",@"我的"];
-    NSArray *imageArray = @[@"tab_home_unselected",@"tab_course_unselected",@"tab_chat_unselected",@"tab_mall_unselected",@"tab_mine_unselected"];
-    NSArray *selectedImgArray = @[@"tab_home_selected",@"tab_course_selected",@"tab_chat_selected",@"tab_mall_selected",@"tab_mine_selected"];
+    NSArray *controllerArray = @[@"HomeViewController",@"MusicSquareViewController",@"CourseViewController",@"ChatViewController",@"MineViewController"];
+    NSArray *titleArray = @[@"首页",@"音乐厅",@"课表",@"聊天",@"我的"];
+    NSArray *imageArray = @[@"tab_home_unselected",@"tab_musicSquare_unselected",@"tab_course_unselected",@"tab_chat_unselected",@"tab_mine_unselected"];
+    NSArray *selectedImgArray = @[@"tab_home_selected",@"tab_musicSquare_selected",@"tab_course_selected",@"tab_chat_selected",@"tab_mine_selected"];
     NSMutableArray *ctrlArray = [NSMutableArray array];
     for (NSInteger i = 0; i < controllerArray.count; i++) {
         CustomNavViewController *navCtrl = [self createNavControllerWithClassName:controllerArray[i] title:titleArray[i] imageName:imageArray[i] selectedImageName:selectedImgArray[i]];
@@ -94,7 +94,7 @@
 
 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
     BOOL isDoubleClick = [self checkIsDoubleClick:viewController];
-    if ([viewController isEqual:[tabBarController.viewControllers objectAtIndex:2]] && isDoubleClick) {
+    if ([viewController isEqual:[tabBarController.viewControllers objectAtIndex:3]] && isDoubleClick) {
         [[NSNotificationCenter defaultCenter] postNotificationName:CHATVIEW_REFRESH object:nil];
     }
     

+ 31 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/Controller/HomeArrangeCourseController.h

@@ -0,0 +1,31 @@
+//
+//  HomeArrangeCourseController.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "KSBaseViewController.h"
+#import "JXCategoryView.h"
+#import "JXPagerView.h"
+
+typedef NS_ENUM(NSInteger, DISPLAY_INDEX) {
+    DISPLAY_INDEX_VIP = 0,    // VIP定制
+    DISPLAY_INDEX_FIRST,      // 陪练课
+    DISPLAY_INDEX_LIVE,       // 直播课
+    DISPLAY_INDEX_VIEO,       // 视频课
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeArrangeCourseController : KSBaseViewController
+
+@property (nonatomic, strong) JXPagerView *pagerView;
+@property (nonatomic, strong, readonly) JXCategoryTitleView *categoryView;
+@property (nonatomic, strong) NSArray <NSString *> *titles;
+
+- (void)displayWithIndex:(DISPLAY_INDEX)displayIndex;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 295 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/Controller/HomeArrangeCourseController.m

@@ -0,0 +1,295 @@
+//
+//  HomeArrangeCourseController.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "HomeArrangeCourseController.h"
+#import "KSBaseWKWebViewController.h"
+#import "JXCategoryView.h"
+#import "JXPagerListRefreshView.h"
+#import "HomeArrangeNavView.h"
+
+#import "HomeArrangeVIPCourseView.h"
+#import "HomeArrangeAccompanyCourseView.h"
+#import "HomeArrangeLiveCourseView.h"
+#import "HomeArrangeVideoCourseView.h"
+
+#define HEADER_HEIGHT (50)
+
+@interface HomeArrangeCourseController ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate>
+
+@property (nonatomic, strong) HomeArrangeNavView *navView;
+
+@property (nonatomic, strong) NSMutableArray *listViewArray;
+
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
+@property (nonatomic, assign) DISPLAY_INDEX displayIndex;
+
+@end
+
+@implementation HomeArrangeCourseController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.ks_prefersNavigationBarHidden = YES;
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    UIImage *bgImage = [UIImage imageNamed:@"arrange_course_bg"];
+    NSInteger height = (NSInteger)(bgImage.size.height / bgImage.size.width * KPortraitWidth);
+    UIImageView *imageView = [[UIImageView alloc] initWithImage:bgImage];
+    imageView.frame = CGRectMake(0, 0, KPortraitWidth, height);
+    [self.view addSubview:imageView];
+    
+    self.titles = @[@"VIP定制课",@"趣纠课",@"直播课",@"视频课"];
+    [self.view addSubview:self.navView];
+    CGFloat navHeight = [HomeArrangeNavView getViewHeight];
+    [self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.view);
+        make.height.mas_equalTo(navHeight);
+    }];
+    
+    [self configCategoryView:navHeight];
+}
+
+- (void)configCategoryView:(NSInteger)topHeight {
+    _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, topHeight, KPortraitWidth, HEADER_HEIGHT)];
+    self.categoryView.titles = self.titles;
+    self.categoryView.delegate = self;
+    self.categoryView.titleFont = [UIFont systemFontOfSize:16.0f];
+    self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:16.0f weight:UIFontWeightSemibold];
+    self.categoryView.titleSelectedColor = HexRGB(0x131415);
+    self.categoryView.titleColor = HexRGBAlpha(0x000000, 0.5f);
+    self.categoryView.titleColorGradientEnabled = YES;
+    
+    JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
+    lineView.indicatorHeight = 4.0f;
+    lineView.indicatorColor = THEMECOLOR;
+    lineView.indicatorWidth = 16;
+    self.categoryView.indicators = @[lineView];
+    
+    _pagerView = [self preferredPagingView];
+    self.pagerView.frame = CGRectMake(0, topHeight, KPortraitWidth, KPortraitHeight - topHeight);
+    self.pagerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
+    self.pagerView.listContainerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.mainTableView.gestureDelegate = self;
+    self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
+    self.pagerView.listContainerView.listCellBackgroundColor = [UIColor clearColor];
+    [self.view addSubview:self.pagerView];
+    if (self.displayIndex != 0) {
+        [self.categoryView setDefaultSelectedIndex:self.displayIndex];
+    }
+}
+
+- (void)displayWithIndex:(DISPLAY_INDEX)displayIndex {
+    self.displayIndex = displayIndex;
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+    // [self requestSubjectList];
+}
+
+- (void)requestSubjectList {
+    [KSNetworkingManager querySubjectItemRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            NSArray *dataArray = [NSMutableArray array];
+            dataArray = [dic ks_arrayValueForKey:@"data"];
+            NSMutableArray *subjectArray = [NSMutableArray array];
+            for (NSDictionary *parm in dataArray) {
+                NSMutableDictionary *subjectSource = [NSMutableDictionary dictionary];
+                [subjectSource setValue:[parm ks_stringValueForKey:@"id"] forKey:@"subjectId"];
+                [subjectSource setValue:[parm ks_stringValueForKey:@"name"] forKey:@"subjectName"];
+                [subjectArray addObject:subjectSource];
+            }
+            self.subjectList = [subjectArray mutableCopy];
+            [self refreshSubjectMessage];
+        }
+        else{
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)refreshSubjectMessage {
+    for (NSInteger index = 0; index < self.listViewArray.count; index++) {
+        id view = self.listViewArray[index];
+//        if ([view isKindOfClass:[MyLessonBodyView class]]) {
+//            MyLessonBodyView *courseView = (MyLessonBodyView *)view;
+//            courseView.subjectList = [self.subjectList mutableCopy];
+//        }
+//        else if ([view isKindOfClass:[MyVideoCourseBodyView class]]) {
+//            MyVideoCourseBodyView *videoCourseView = (MyVideoCourseBodyView *)view;
+//            videoCourseView.subjectList = [self.subjectList mutableCopy];
+//        }
+//        else if ([view isKindOfClass:[MyMusicRoomBodyView class]]) {
+//            MyMusicRoomBodyView *musicView = (MyMusicRoomBodyView *)view;
+//            musicView.subjectList = [self.subjectList mutableCopy];
+//        }
+    }
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
+}
+
+- (JXPagerView *)preferredPagingView {
+    return [[JXPagerListRefreshView alloc] initWithDelegate:self];
+}
+
+#pragma mark - JXPagerViewDelegate
+
+- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
+    return [UIView new];
+}
+
+- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
+    return CGFLOAT_MIN;
+}
+
+- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return HEADER_HEIGHT;
+}
+
+- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return self.categoryView;
+}
+
+- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
+    //和categoryView的item数量一致
+    return self.titles.count;
+}
+
+- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
+    if (index == 0) {
+        HomeArrangeVIPCourseView *listView = [[HomeArrangeVIPCourseView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.subjectList) {
+            listView.subjectList = [self.subjectList mutableCopy];
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else if (index == 1) {
+        HomeArrangeAccompanyCourseView *listView = [[HomeArrangeAccompanyCourseView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.subjectList) {
+            listView.subjectList = [self.subjectList mutableCopy];
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else if (index == 2) {
+        HomeArrangeLiveCourseView *listView = [[HomeArrangeLiveCourseView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.subjectList) {
+            listView.subjectList = [self.subjectList mutableCopy];
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else {
+        HomeArrangeVideoCourseView *listView = [[HomeArrangeVideoCourseView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.subjectList) {
+            listView.subjectList = [self.subjectList mutableCopy];
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
+}
+
+#pragma mark - JXCategoryViewDelegate
+- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
+    self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
+    if (self.listViewArray.count > index) {
+        id value = self.listViewArray[index];
+        if ([value isKindOfClass:[KSJXBodyView class]]) {
+            KSJXBodyView *listView = (KSJXBodyView *)value;
+            [listView beginFirstRefresh];
+        }
+        else if ([value isKindOfClass:[kSJXCollectionView class]]) {
+            kSJXCollectionView *listView = (kSJXCollectionView *)value;
+            [listView beginFirstRefresh];
+        }
+    }
+}
+
+
+#pragma mark - JXPagerMainTableViewGestureDelegate
+
+- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
+    //禁止categoryView左右滑动的时候,上下和左右都可以滚动
+    if (otherGestureRecognizer == self.categoryView.collectionView.panGestureRecognizer) {
+        return NO;
+    }
+    return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
+}
+
+
+- (NSMutableArray *)listViewArray {
+    if (!_listViewArray) {
+        _listViewArray = [NSMutableArray arrayWithArray:@[@"",@"",@"",@""]];
+    }
+    return _listViewArray;
+}
+
+#pragma mark ----- lazying
+- (HomeArrangeNavView *)navView {
+    if (!_navView) {
+        _navView = [HomeArrangeNavView sharedInstance];
+        MJWeakSelf;
+        [_navView navAction:^(BOOL isBack) {
+            [weakSelf navViewAction:isBack];
+        }];
+    }
+    return _navView;
+}
+
+- (void)navViewAction:(BOOL)isBack {
+    if (isBack) {
+        [self backAction];
+    }
+    else {
+        [self showTipsAlert];
+    }
+}
+
+- (void)showTipsAlert {
+    
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeAccompanyCourseView.h

@@ -0,0 +1,18 @@
+//
+//  HomeArrangeAccompanyCourseView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "KSJXBodyView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeArrangeAccompanyCourseView : KSJXBodyView
+
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeAccompanyCourseView.m

@@ -0,0 +1,25 @@
+//
+//  HomeArrangeAccompanyCourseView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "HomeArrangeAccompanyCourseView.h"
+#import "HomeArrangeSortView.h"
+
+@interface HomeArrangeAccompanyCourseView ()
+
+@end
+
+@implementation HomeArrangeAccompanyCourseView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeLiveCourseView.h

@@ -0,0 +1,18 @@
+//
+//  HomeArrangeLiveCourseView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "kSJXCollectionView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeArrangeLiveCourseView : kSJXCollectionView
+
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeLiveCourseView.m

@@ -0,0 +1,25 @@
+//
+//  HomeArrangeLiveCourseView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "HomeArrangeLiveCourseView.h"
+#import "HomeArrangeSortView.h"
+
+@interface HomeArrangeLiveCourseView ()
+
+@end
+
+@implementation HomeArrangeLiveCourseView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 24 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeNavView.h

@@ -0,0 +1,24 @@
+//
+//  HomeArrangeNavView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^ArrangeNavCallback)(BOOL isBack);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeArrangeNavView : UIView
+
++ (instancetype)sharedInstance;
+
+- (void)navAction:(ArrangeNavCallback)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 53 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeNavView.m

@@ -0,0 +1,53 @@
+//
+//  HomeArrangeNavView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "HomeArrangeNavView.h"
+
+@interface HomeArrangeNavView ()
+
+@property (nonatomic, copy) ArrangeNavCallback callback;
+
+@end
+
+@implementation HomeArrangeNavView
+
+
++ (instancetype)sharedInstance {
+    HomeArrangeNavView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeArrangeNavView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)navAction:(ArrangeNavCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)backAction:(id)sender {
+    if (self.callback) {
+        self.callback(YES);
+    }
+}
+
+- (IBAction)showTips:(id)sender {
+    if (self.callback) {
+        self.callback(NO);
+    }
+}
+
++ (CGFloat)getViewHeight {
+    return kNaviBarHeight;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 90 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeNavView.xib

@@ -0,0 +1,90 @@
+<?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="HomeArrangeNavView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="81"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Pwp-iE-ser">
+                    <rect key="frame" x="0.0" y="37" width="393" height="44"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="back_black" translatesAutoresizingMaskIntoConstraints="NO" id="WZG-OH-6D7">
+                            <rect key="frame" x="14" y="12" width="12" height="20"/>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8Kn-BG-GDr">
+                            <rect key="frame" x="0.0" y="0.0" width="44" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="44" id="BV5-xp-gLq"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="backAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="SwL-1R-6Jk"/>
+                            </connections>
+                        </button>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="program_tips" translatesAutoresizingMaskIntoConstraints="NO" id="VqX-k4-IdB">
+                            <rect key="frame" x="361" y="13" width="18" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="18" id="E3f-Aq-S5r"/>
+                                <constraint firstAttribute="height" constant="18" id="qw7-3D-obn"/>
+                            </constraints>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fmL-Hf-OFx">
+                            <rect key="frame" x="349" y="0.0" width="44" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="44" id="joq-7c-Rzu"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="showTips:" destination="iN0-l3-epB" eventType="touchUpInside" id="jVo-ps-GNi"/>
+                            </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="rtH-jI-ge1">
+                            <rect key="frame" x="178.66666666666666" y="11" width="36" height="22"/>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
+                            <color key="textColor" red="0.074509803921568626" green="0.078431372549019607" blue="0.082352941176470587" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="VqX-k4-IdB" secondAttribute="trailing" constant="14" id="7bk-43-07L"/>
+                        <constraint firstAttribute="height" constant="44" id="KFK-Q6-FMQ"/>
+                        <constraint firstItem="WZG-OH-6D7" firstAttribute="centerY" secondItem="Pwp-iE-ser" secondAttribute="centerY" id="KVw-E9-T5d"/>
+                        <constraint firstAttribute="bottom" secondItem="fmL-Hf-OFx" secondAttribute="bottom" id="Ksg-QE-V7U"/>
+                        <constraint firstItem="rtH-jI-ge1" firstAttribute="centerX" secondItem="Pwp-iE-ser" secondAttribute="centerX" id="RpO-jy-yJ6"/>
+                        <constraint firstItem="WZG-OH-6D7" firstAttribute="leading" secondItem="Pwp-iE-ser" secondAttribute="leading" constant="14" id="TU9-BS-EaR"/>
+                        <constraint firstItem="rtH-jI-ge1" firstAttribute="centerY" secondItem="Pwp-iE-ser" secondAttribute="centerY" id="bgp-wS-bXV"/>
+                        <constraint firstAttribute="trailing" secondItem="fmL-Hf-OFx" secondAttribute="trailing" id="l4O-92-9af"/>
+                        <constraint firstItem="fmL-Hf-OFx" firstAttribute="top" secondItem="Pwp-iE-ser" secondAttribute="top" id="ngc-HK-TXh"/>
+                        <constraint firstItem="VqX-k4-IdB" firstAttribute="centerY" secondItem="Pwp-iE-ser" secondAttribute="centerY" id="njp-4A-3dk"/>
+                        <constraint firstAttribute="bottom" secondItem="8Kn-BG-GDr" secondAttribute="bottom" id="oq4-w6-aWh"/>
+                        <constraint firstItem="8Kn-BG-GDr" firstAttribute="top" secondItem="Pwp-iE-ser" secondAttribute="top" id="tng-SI-zmE"/>
+                        <constraint firstItem="8Kn-BG-GDr" firstAttribute="leading" secondItem="Pwp-iE-ser" secondAttribute="leading" id="yew-lN-9np"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="Pwp-iE-ser" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="6PK-Ja-5QG"/>
+                <constraint firstAttribute="bottom" secondItem="Pwp-iE-ser" secondAttribute="bottom" id="7g0-2c-cAb"/>
+                <constraint firstAttribute="trailing" secondItem="Pwp-iE-ser" secondAttribute="trailing" id="nET-fF-152"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="43.511450381679388" y="-201.7605633802817"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="back_black" width="12" height="20"/>
+        <image name="program_tips" width="20" height="20"/>
+    </resources>
+</document>

+ 16 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeSortView.h

@@ -0,0 +1,16 @@
+//
+//  HomeArrangeSortView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeArrangeSortView : UIView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeSortView.m

@@ -0,0 +1,20 @@
+//
+//  HomeArrangeSortView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "HomeArrangeSortView.h"
+
+@implementation HomeArrangeSortView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 40 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeSortView.xib

@@ -0,0 +1,40 @@
+<?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" useSafeAreas="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="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeArrangeSortView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="65"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="长笛" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0zy-dI-QZa">
+                    <rect key="frame" x="14" y="24" width="28" height="17"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.074509803921568626" green="0.078431372549019607" blue="0.082352941176470587" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="L2t-eK-pev">
+                    <rect key="frame" x="50" y="24" width="20" height="17"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                </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="0zy-dI-QZa" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="14" id="SSn-ts-bZY"/>
+                <constraint firstItem="0zy-dI-QZa" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="ffZ-nR-dXU"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="25.190839694656489" y="-117.95774647887325"/>
+        </view>
+    </objects>
+</document>

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVIPCourseView.h

@@ -0,0 +1,18 @@
+//
+//  HomeArrangeVIPCourseView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "KSJXBodyView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeArrangeVIPCourseView : KSJXBodyView
+
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVIPCourseView.m

@@ -0,0 +1,25 @@
+//
+//  HomeArrangeVIPCourseView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "HomeArrangeVIPCourseView.h"
+#import "HomeArrangeSortView.h"
+
+@interface HomeArrangeVIPCourseView ()
+
+@end
+
+@implementation HomeArrangeVIPCourseView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVideoCourseView.h

@@ -0,0 +1,18 @@
+//
+//  HomeArrangeVideoCourseView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "KSJXBodyView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeArrangeVideoCourseView : KSJXBodyView
+
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/ArrangeCourse/View/HomeArrangeVideoCourseView.m

@@ -0,0 +1,25 @@
+//
+//  HomeArrangeVideoCourseView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "HomeArrangeVideoCourseView.h"
+#import "HomeArrangeSortView.h"
+
+@interface HomeArrangeVideoCourseView ()
+
+@end
+
+@implementation HomeArrangeVideoCourseView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 9 - 4
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m

@@ -72,6 +72,7 @@
 
 #import "HomeDragButton.h"
 #import "HomeMusicSheetLayout.h"
+#import "HomeArrangeCourseController.h"
 
 #define COLLECTION_WIDTH ((NSInteger)(IS_IPAD ? KPortraitWidth * 0.7 : KPortraitWidth * 0.83))
 #define COLLECTION_HEIGHT (320)
@@ -265,7 +266,7 @@
     self.albumViewHeight = [HomeHotAlbumView getViewHeight];
     [self.albumView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.headView);
-        make.top.mas_equalTo(self.courseView.mas_bottom);
+        make.top.mas_equalTo(self.courseView.mas_bottom).offset(20);
         make.height.mas_equalTo(self.albumViewHeight);
     }];
     
@@ -274,7 +275,7 @@
     self.recommendMusicViewHeight = [HomeRecommendMusicView getViewHeight];
     [self.recommendMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.headView);
-        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.top.mas_equalTo(self.albumView.mas_bottom).offset(20);
         make.height.mas_equalTo(self.recommendMusicViewHeight);
     }];
     
@@ -283,7 +284,7 @@
     self.newestMusicViewHeight = [HomeNewMusicView getViewHeight];
     [self.newestMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.headView);
-        make.top.mas_equalTo(self.recommendMusicView.mas_bottom);
+        make.top.mas_equalTo(self.recommendMusicView.mas_bottom).offset(20);
         make.height.mas_equalTo(self.newestMusicViewHeight);
     }];
     
@@ -292,7 +293,7 @@
     self.musicViewHeight = [HomeHotMusicView getViewHeight];
     [self.hotMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.headView);
-        make.top.mas_equalTo(self.newestMusicView.mas_bottom);
+        make.top.mas_equalTo(self.newestMusicView.mas_bottom).offset(20);
         make.height.mas_equalTo(self.musicViewHeight);
     }];
     
@@ -1083,6 +1084,10 @@
 }
 
 - (void)HomeTopButtonAction:(UIButton *)sender {
+    HomeArrangeCourseController *ctrl = [[HomeArrangeCourseController alloc] init];
+    [self.navigationController pushViewController:ctrl animated:YES];
+    return;
+    
     NSInteger index = sender.tag - 3000;
     if ([self checkIsLoginToLoginView:YES]) {
         HomeMessageModel *model = self.buttonArray[index];

+ 0 - 33
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNavView.h

@@ -1,33 +0,0 @@
-//
-//  HomeNavView.h
-//  KulexiuForStudent
-//
-//  Created by 王智 on 2022/4/21.
-//
-
-#import <UIKit/UIKit.h>
-
-typedef NS_ENUM(NSInteger, NAVACTION) {
-    NAVACTION_USERCENTER,  // 用户
-    NAVACTION_MESSAGE,     // 消息
-    NAVACTION_SCAN,        // 扫一扫
-};
-
-typedef void(^HomeNavCallback)(NAVACTION action);
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HomeNavView : UIView
-@property (weak, nonatomic) IBOutlet UIImageView *userAvatal;
-
-@property (weak, nonatomic) IBOutlet UILabel *userName;
-
-@property (weak, nonatomic) IBOutlet UIView *dotView;
-
-+ (instancetype)shareInstance;
-
-- (void)homeNavAction:(HomeNavCallback)callback;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 52
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNavView.m

@@ -1,52 +0,0 @@
-//
-//  HomeNavView.m
-//  KulexiuForStudent
-//
-//  Created by 王智 on 2022/4/21.
-//
-
-#import "HomeNavView.h"
-
-@interface HomeNavView ()
-
-@property (nonatomic, copy) HomeNavCallback calback;
-@end
-
-@implementation HomeNavView
-
-+ (instancetype)shareInstance {
-    HomeNavView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeNavView" owner:nil options:nil] firstObject];
-    return view;
-}
-- (void)homeNavAction:(HomeNavCallback)callback {
-    if (callback) {
-        self.calback = callback;
-    }
-}
-
-- (IBAction)toUseCenter:(id)sender {
-    if (self.calback) {
-        self.calback(NAVACTION_USERCENTER);
-    }
-}
-
-- (IBAction)toMessaegCenter:(id)sender {
-    if (self.calback) {
-        self.calback(NAVACTION_MESSAGE);
-    }
-}
-- (IBAction)scanAction:(id)sender {
-    if (self.calback) {
-        self.calback(NAVACTION_SCAN);
-    }
-}
-
-/*
-// Only override drawRect: if you perform custom drawing.
-// An empty implementation adversely affects performance during animation.
-- (void)drawRect:(CGRect)rect {
-    // Drawing code
-}
-*/
-
-@end

+ 0 - 133
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNavView.xib

@@ -1,133 +0,0 @@
-<?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" colorMatched="YES">
-    <device id="retina6_1" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
-        <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="HomeNavView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="91"/>
-            <autoresizingMask key="autoresizingMask"/>
-            <subviews>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xYy-Ue-YZl">
-                    <rect key="frame" x="359" y="46" width="40" height="40"/>
-                    <constraints>
-                        <constraint firstAttribute="width" constant="40" id="PLA-jk-MlL"/>
-                        <constraint firstAttribute="height" constant="40" id="xdo-m9-D5d"/>
-                    </constraints>
-                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                    <state key="normal" image="home_message"/>
-                    <connections>
-                        <action selector="toMessaegCenter:" destination="iN0-l3-epB" eventType="touchUpInside" id="mav-ya-fe5"/>
-                    </connections>
-                </button>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="omR-9c-WQ1">
-                    <rect key="frame" x="385" y="54" width="8" height="8"/>
-                    <subviews>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fXb-H8-rKA">
-                            <rect key="frame" x="1" y="1" width="6" height="6"/>
-                            <color key="backgroundColor" red="0.97254901959999995" green="0.31372549020000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
-                            <userDefinedRuntimeAttributes>
-                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="3"/>
-                                </userDefinedRuntimeAttribute>
-                            </userDefinedRuntimeAttributes>
-                        </view>
-                    </subviews>
-                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                    <constraints>
-                        <constraint firstItem="fXb-H8-rKA" firstAttribute="top" secondItem="omR-9c-WQ1" secondAttribute="top" constant="1" id="Rri-JH-a1r"/>
-                        <constraint firstAttribute="bottom" secondItem="fXb-H8-rKA" secondAttribute="bottom" constant="1" id="Xc3-a1-JMG"/>
-                        <constraint firstItem="fXb-H8-rKA" firstAttribute="leading" secondItem="omR-9c-WQ1" secondAttribute="leading" constant="1" id="kRN-Q5-ooR"/>
-                        <constraint firstAttribute="height" constant="8" id="q21-oT-Hxm"/>
-                        <constraint firstAttribute="trailing" secondItem="fXb-H8-rKA" secondAttribute="trailing" constant="1" id="qeO-5Q-aa6"/>
-                        <constraint firstAttribute="width" constant="8" id="wKI-LW-qki"/>
-                    </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="4"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
-                </view>
-                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="student_avatar" translatesAutoresizingMaskIntoConstraints="NO" id="q8T-4X-XH1">
-                    <rect key="frame" x="14" y="50" width="32" height="32"/>
-                    <constraints>
-                        <constraint firstAttribute="width" constant="32" id="mbm-wS-w83"/>
-                        <constraint firstAttribute="height" constant="32" id="xbf-qL-OAg"/>
-                    </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="16"/>
-                        </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="V09-v5-ugm">
-                    <rect key="frame" x="51" y="55" width="120" height="22"/>
-                    <constraints>
-                        <constraint firstAttribute="width" constant="120" id="G4K-LS-ntu"/>
-                        <constraint firstAttribute="height" constant="22" id="pIg-61-zmA"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                    <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="calibratedRGB"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9Ch-4E-l3g">
-                    <rect key="frame" x="8" y="44" width="44" height="44"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="44" id="4ej-m6-zms"/>
-                        <constraint firstAttribute="width" constant="44" id="KTy-4x-P2Z"/>
-                    </constraints>
-                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                    <connections>
-                        <action selector="toUseCenter:" destination="iN0-l3-epB" eventType="touchUpInside" id="x9k-on-BOB"/>
-                    </connections>
-                </button>
-                <button hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ixd-fe-NI5">
-                    <rect key="frame" x="314" y="46" width="40" height="40"/>
-                    <constraints>
-                        <constraint firstAttribute="width" constant="40" id="Ttb-Ur-o54"/>
-                        <constraint firstAttribute="height" constant="40" id="qe5-dD-blQ"/>
-                    </constraints>
-                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                    <state key="normal" image="home_scan"/>
-                    <connections>
-                        <action selector="scanAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="T5f-o0-Vvc"/>
-                    </connections>
-                </button>
-            </subviews>
-            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-            <constraints>
-                <constraint firstItem="omR-9c-WQ1" firstAttribute="top" secondItem="xYy-Ue-YZl" secondAttribute="top" constant="8" id="3LP-Cf-UOB"/>
-                <constraint firstAttribute="bottom" secondItem="xYy-Ue-YZl" secondAttribute="bottom" constant="5" id="GLZ-UC-GBm"/>
-                <constraint firstItem="V09-v5-ugm" firstAttribute="leading" secondItem="q8T-4X-XH1" secondAttribute="trailing" constant="5" id="HMR-Zb-eYg"/>
-                <constraint firstItem="xYy-Ue-YZl" firstAttribute="leading" secondItem="Ixd-fe-NI5" secondAttribute="trailing" constant="5" id="L9X-fi-71j"/>
-                <constraint firstAttribute="trailing" secondItem="omR-9c-WQ1" secondAttribute="trailing" constant="21" id="MxY-he-eWw"/>
-                <constraint firstAttribute="trailing" secondItem="xYy-Ue-YZl" secondAttribute="trailing" constant="15" id="NQ0-wf-rrB"/>
-                <constraint firstItem="9Ch-4E-l3g" firstAttribute="centerY" secondItem="q8T-4X-XH1" secondAttribute="centerY" id="TWf-lZ-rE9"/>
-                <constraint firstItem="q8T-4X-XH1" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="WOM-ee-yRZ"/>
-                <constraint firstItem="V09-v5-ugm" firstAttribute="centerY" secondItem="q8T-4X-XH1" secondAttribute="centerY" id="jWy-Il-BUG"/>
-                <constraint firstItem="xYy-Ue-YZl" firstAttribute="centerY" secondItem="Ixd-fe-NI5" secondAttribute="centerY" id="mCC-Ct-2in"/>
-                <constraint firstItem="xYy-Ue-YZl" firstAttribute="centerY" secondItem="q8T-4X-XH1" secondAttribute="centerY" id="n1m-Dh-PuS"/>
-                <constraint firstItem="q8T-4X-XH1" firstAttribute="centerX" secondItem="9Ch-4E-l3g" secondAttribute="centerX" id="pFZ-KT-emk"/>
-            </constraints>
-            <nil key="simulatedTopBarMetrics"/>
-            <nil key="simulatedBottomBarMetrics"/>
-            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
-            <connections>
-                <outlet property="dotView" destination="omR-9c-WQ1" id="2qw-zC-ZLk"/>
-                <outlet property="userAvatal" destination="q8T-4X-XH1" id="LXY-NH-EbM"/>
-                <outlet property="userName" destination="V09-v5-ugm" id="auG-YH-mbl"/>
-            </connections>
-            <point key="canvasLocation" x="131.8840579710145" y="-110.15625"/>
-        </view>
-    </objects>
-    <resources>
-        <image name="home_message" width="23" height="23"/>
-        <image name="home_scan" width="22" height="22"/>
-        <image name="student_avatar" width="150" height="150"/>
-    </resources>
-</document>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNewMusic/HomeNewMusicView.m

@@ -33,7 +33,7 @@
 }
 
 + (CGFloat)getViewHeight {
-    return 384.0f;
+    return 364.0f;
 }
 
 /*

+ 13 - 13
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNewMusic/HomeNewMusicView.xib

@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" 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_0" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <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="HomeNewMusicView">
-            <rect key="frame" x="0.0" y="0.0" width="390" height="388"/>
+            <rect key="frame" x="0.0" y="0.0" width="390" height="364"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fy2-nu-LBW">
-                    <rect key="frame" x="331" y="32" width="45" height="18"/>
+                    <rect key="frame" x="332" y="13" width="44" height="18"/>
                     <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="0.10000000000000001" colorSpace="calibratedRGB"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="18" id="ydg-Ix-Mz0"/>
@@ -26,16 +26,16 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="最新曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6CW-e0-al3">
-                    <rect key="frame" x="24" y="30" width="73.666666666666671" height="22"/>
+                    <rect key="frame" x="24" y="10" width="71.666666666666671" height="24"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="22" id="ykn-Z7-imu"/>
+                        <constraint firstAttribute="height" constant="24" id="ykn-Z7-imu"/>
                     </constraints>
                     <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                     <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="csk-1t-0jz">
-                    <rect key="frame" x="337" y="26" width="34" height="30"/>
+                    <rect key="frame" x="338" y="7" width="33" height="30"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="30" id="M3e-Eg-6I0"/>
                     </constraints>
@@ -48,27 +48,27 @@
                     </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="2pb-rc-jX4">
-                    <rect key="frame" x="337" y="33.666666666666664" width="25" height="14.666666666666664"/>
+                    <rect key="frame" x="338" y="14.666666666666668" width="24" height="14.666666666666668"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more_green" translatesAutoresizingMaskIntoConstraints="NO" id="lcO-IB-Crt">
-                    <rect key="frame" x="365" y="37" width="6" height="8"/>
+                    <rect key="frame" x="365" y="18" width="6" height="8"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="6" id="Hcf-3X-Mrv"/>
                         <constraint firstAttribute="height" constant="8" id="SAN-px-udA"/>
                     </constraints>
                 </imageView>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="Gnt-En-BW7">
-                    <rect key="frame" x="14" y="32" width="4" height="18"/>
+                    <rect key="frame" x="14" y="13" width="4" height="18"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="18" id="B5g-ev-PbH"/>
                         <constraint firstAttribute="width" constant="4" id="Jx9-Q2-wT3"/>
                     </constraints>
                 </imageView>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="csN-Ie-7a8">
-                    <rect key="frame" x="0.0" y="68" width="390" height="320"/>
+                    <rect key="frame" x="0.0" y="46" width="390" height="320"/>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="320" id="MyF-Wi-MeL"/>
@@ -80,14 +80,14 @@
                 <constraint firstItem="fy2-nu-LBW" firstAttribute="centerY" secondItem="2pb-rc-jX4" secondAttribute="centerY" id="AWf-kl-zgq"/>
                 <constraint firstItem="6CW-e0-al3" firstAttribute="centerY" secondItem="Gnt-En-BW7" secondAttribute="centerY" id="BaT-WH-9yM"/>
                 <constraint firstAttribute="trailing" secondItem="fy2-nu-LBW" secondAttribute="trailing" constant="14" id="C4h-mj-8Jc"/>
+                <constraint firstItem="csN-Ie-7a8" firstAttribute="top" secondItem="6CW-e0-al3" secondAttribute="bottom" constant="12" id="FDw-m0-Fwe"/>
                 <constraint firstItem="lcO-IB-Crt" firstAttribute="trailing" secondItem="csk-1t-0jz" secondAttribute="trailing" id="FJn-ed-iAe"/>
                 <constraint firstItem="lcO-IB-Crt" firstAttribute="trailing" secondItem="fy2-nu-LBW" secondAttribute="trailing" constant="-5" id="H4r-bu-SAz"/>
                 <constraint firstItem="csN-Ie-7a8" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="K1Y-fg-RQv"/>
                 <constraint firstItem="Gnt-En-BW7" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="Mgl-Vu-HI9"/>
                 <constraint firstItem="lcO-IB-Crt" firstAttribute="leading" secondItem="2pb-rc-jX4" secondAttribute="trailing" constant="3" id="PVy-22-561"/>
-                <constraint firstItem="csN-Ie-7a8" firstAttribute="top" secondItem="csk-1t-0jz" secondAttribute="bottom" constant="12" id="Puf-fP-R0z"/>
                 <constraint firstAttribute="trailing" secondItem="csN-Ie-7a8" secondAttribute="trailing" id="WCb-7V-4Xm"/>
-                <constraint firstItem="6CW-e0-al3" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="a2j-vq-f2z"/>
+                <constraint firstItem="6CW-e0-al3" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="a2j-vq-f2z"/>
                 <constraint firstItem="2pb-rc-jX4" firstAttribute="centerY" secondItem="6CW-e0-al3" secondAttribute="centerY" id="b6v-h7-2c0"/>
                 <constraint firstItem="2pb-rc-jX4" firstAttribute="leading" secondItem="csk-1t-0jz" secondAttribute="leading" id="dx0-PV-TnS"/>
                 <constraint firstItem="6CW-e0-al3" firstAttribute="leading" secondItem="Gnt-En-BW7" secondAttribute="trailing" constant="6" id="fI8-yL-qTO"/>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.m

@@ -33,7 +33,7 @@
 }
 
 + (CGFloat)getViewHeight {
-    return 384.0f;
+    return 364.0f;
 }
 
 

+ 13 - 13
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.xib

@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" 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_0" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <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="HomeRecommendMusicView">
-            <rect key="frame" x="0.0" y="0.0" width="390" height="388"/>
+            <rect key="frame" x="0.0" y="0.0" width="390" height="364"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gSD-Yz-KRC">
-                    <rect key="frame" x="331" y="32" width="45" height="18"/>
+                    <rect key="frame" x="332" y="13" width="44" height="18"/>
                     <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="0.10000000000000001" colorSpace="calibratedRGB"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="18" id="kBH-qS-EqY"/>
@@ -26,16 +26,16 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="推荐曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Gb-9V-Vs2">
-                    <rect key="frame" x="24" y="30" width="73.666666666666671" height="22"/>
+                    <rect key="frame" x="24" y="10" width="71.666666666666671" height="24"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="22" id="j7f-c1-B4o"/>
+                        <constraint firstAttribute="height" constant="24" id="j7f-c1-B4o"/>
                     </constraints>
                     <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                     <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0Ql-Fk-cYb">
-                    <rect key="frame" x="337" y="26" width="34" height="30"/>
+                    <rect key="frame" x="338" y="7" width="33" height="30"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="30" id="t0v-AC-yCX"/>
                     </constraints>
@@ -48,27 +48,27 @@
                     </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="Mli-0b-3pS">
-                    <rect key="frame" x="337" y="33.666666666666664" width="25" height="14.666666666666664"/>
+                    <rect key="frame" x="338" y="14.666666666666668" width="24" height="14.666666666666668"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more_green" translatesAutoresizingMaskIntoConstraints="NO" id="IEk-2m-N7I">
-                    <rect key="frame" x="365" y="37" width="6" height="8"/>
+                    <rect key="frame" x="365" y="18" width="6" height="8"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="6" id="byI-Z3-gT0"/>
                         <constraint firstAttribute="height" constant="8" id="qoy-h5-4Bu"/>
                     </constraints>
                 </imageView>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="Te8-hi-wDF">
-                    <rect key="frame" x="14" y="32" width="4" height="18"/>
+                    <rect key="frame" x="14" y="13" width="4" height="18"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="18" id="0nb-Nj-2lG"/>
                         <constraint firstAttribute="width" constant="4" id="g6O-Mb-yas"/>
                     </constraints>
                 </imageView>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sOs-N5-Dh3">
-                    <rect key="frame" x="0.0" y="68" width="390" height="320"/>
+                    <rect key="frame" x="0.0" y="46" width="390" height="320"/>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="320" id="J92-zM-Vmh"/>
@@ -86,14 +86,14 @@
                 <constraint firstItem="4Gb-9V-Vs2" firstAttribute="leading" secondItem="Te8-hi-wDF" secondAttribute="trailing" constant="6" id="EPn-Mj-O3D"/>
                 <constraint firstAttribute="trailing" secondItem="gSD-Yz-KRC" secondAttribute="trailing" constant="14" id="JMj-P1-q8L"/>
                 <constraint firstItem="4Gb-9V-Vs2" firstAttribute="centerY" secondItem="Te8-hi-wDF" secondAttribute="centerY" id="Pj3-mD-xum"/>
-                <constraint firstItem="4Gb-9V-Vs2" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="Pt2-sD-VP8"/>
+                <constraint firstItem="4Gb-9V-Vs2" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="Pt2-sD-VP8"/>
                 <constraint firstItem="IEk-2m-N7I" firstAttribute="centerY" secondItem="4Gb-9V-Vs2" secondAttribute="centerY" id="TpR-es-wzb"/>
                 <constraint firstItem="Mli-0b-3pS" firstAttribute="leading" secondItem="gSD-Yz-KRC" secondAttribute="leading" constant="6" id="VFz-yi-c52"/>
                 <constraint firstItem="sOs-N5-Dh3" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Yn3-lz-qgY"/>
                 <constraint firstAttribute="trailing" secondItem="sOs-N5-Dh3" secondAttribute="trailing" id="ZKj-Zg-Isk"/>
+                <constraint firstItem="sOs-N5-Dh3" firstAttribute="top" secondItem="4Gb-9V-Vs2" secondAttribute="bottom" constant="12" id="cMo-gp-RyO"/>
                 <constraint firstItem="IEk-2m-N7I" firstAttribute="trailing" secondItem="0Ql-Fk-cYb" secondAttribute="trailing" id="crv-Dd-v7v"/>
                 <constraint firstItem="0Ql-Fk-cYb" firstAttribute="centerY" secondItem="4Gb-9V-Vs2" secondAttribute="centerY" id="goy-VI-GLl"/>
-                <constraint firstItem="sOs-N5-Dh3" firstAttribute="top" secondItem="0Ql-Fk-cYb" secondAttribute="bottom" constant="12" id="ljt-Ui-TI9"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.m

@@ -34,7 +34,7 @@
 
 
 + (CGFloat)getViewHeight {
-    return 188.0f;
+    return 168.0f;
 }
 
 /*

+ 11 - 11
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.xib

@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" 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="21207"/>
+        <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="HomeHotAlbumView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="188"/>
+            <rect key="frame" x="0.0" y="0.0" width="414" height="168"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="i48-Hd-WKl">
-                    <rect key="frame" x="355" y="32" width="45" height="18"/>
+                    <rect key="frame" x="356" y="12" width="44" height="18"/>
                     <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="0.10000000000000001" colorSpace="calibratedRGB"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="18" id="J1Q-HM-3AQ"/>
@@ -26,13 +26,13 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="更多" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zgK-R6-zz8">
-                    <rect key="frame" x="361" y="34" width="25" height="14.5"/>
+                    <rect key="frame" x="362" y="14" width="24" height="14.5"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
                     <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="u9G-3b-Wgt">
-                    <rect key="frame" x="29" y="30" width="73.5" height="22"/>
+                    <rect key="frame" x="29" y="10" width="71.5" height="22"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="22" id="mNH-cs-reJ"/>
                     </constraints>
@@ -41,21 +41,21 @@
                     <nil key="highlightedColor"/>
                 </label>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more_green" translatesAutoresizingMaskIntoConstraints="NO" id="OkW-qe-3Kq">
-                    <rect key="frame" x="389" y="37" width="6" height="8"/>
+                    <rect key="frame" x="389" y="17" width="6" height="8"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="6" id="PEX-ax-k36"/>
                         <constraint firstAttribute="height" constant="8" id="QOU-bK-jTl"/>
                     </constraints>
                 </imageView>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bvf-n0-Khb">
-                    <rect key="frame" x="0.0" y="54" width="414" height="134"/>
+                    <rect key="frame" x="0.0" y="34" width="414" height="134"/>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="134" id="hLT-Oy-zVJ"/>
                     </constraints>
                 </view>
                 <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kIU-g4-ctC">
-                    <rect key="frame" x="361" y="26" width="34" height="30"/>
+                    <rect key="frame" x="362" y="6" width="33" height="30"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="30" id="l3w-24-Jol"/>
                     </constraints>
@@ -68,7 +68,7 @@
                     </connections>
                 </button>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="yKI-ip-Z1l">
-                    <rect key="frame" x="19" y="32" width="4" height="18"/>
+                    <rect key="frame" x="19" y="12" width="4" height="18"/>
                     <constraints>
                         <constraint firstAttribute="width" constant="4" id="0n6-S5-hNN"/>
                         <constraint firstAttribute="height" constant="18" id="DZG-as-IKL"/>
@@ -86,8 +86,8 @@
                 <constraint firstItem="bvf-n0-Khb" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="a0y-wq-MEu"/>
                 <constraint firstItem="u9G-3b-Wgt" firstAttribute="leading" secondItem="yKI-ip-Z1l" secondAttribute="trailing" constant="6" id="aPK-M2-gIU"/>
                 <constraint firstItem="OkW-qe-3Kq" firstAttribute="leading" secondItem="zgK-R6-zz8" secondAttribute="trailing" constant="3" id="aT3-GI-PH3"/>
+                <constraint firstItem="u9G-3b-Wgt" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="cLA-0T-H7h"/>
                 <constraint firstItem="u9G-3b-Wgt" firstAttribute="centerY" secondItem="yKI-ip-Z1l" secondAttribute="centerY" id="dKq-YN-3yA"/>
-                <constraint firstItem="u9G-3b-Wgt" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="eRX-8J-T9f"/>
                 <constraint firstItem="zgK-R6-zz8" firstAttribute="leading" secondItem="kIU-g4-ctC" secondAttribute="leading" id="fOa-SI-oGA"/>
                 <constraint firstItem="yKI-ip-Z1l" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="19" id="lGn-jJ-ZR0"/>
                 <constraint firstItem="zgK-R6-zz8" firstAttribute="leading" secondItem="i48-Hd-WKl" secondAttribute="leading" constant="6" id="o53-pl-Ohx"/>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.m

@@ -33,7 +33,7 @@
 }
 
 + (CGFloat)getViewHeight {
-    return 384.0f;
+    return 364.0f;
 }
 /*
 // Only override drawRect: if you perform custom drawing.

+ 12 - 12
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.xib

@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" 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="21207"/>
+        <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="HomeHotMusicView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="384"/>
+            <rect key="frame" x="0.0" y="0.0" width="414" height="364"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aLQ-YK-tTY">
-                    <rect key="frame" x="355" y="32" width="45" height="18"/>
+                    <rect key="frame" x="356" y="13" width="44" height="18"/>
                     <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="0.10000000000000001" colorSpace="calibratedRGB"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="18" id="GeK-bh-mkr"/>
@@ -26,16 +26,16 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="最热曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t7j-WY-6gF">
-                    <rect key="frame" x="24" y="30" width="73.5" height="22"/>
+                    <rect key="frame" x="24" y="10" width="71.5" height="24"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="22" id="5Zd-6z-MkK"/>
+                        <constraint firstAttribute="height" constant="24" id="5Zd-6z-MkK"/>
                     </constraints>
                     <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                     <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Up-TV-A6N">
-                    <rect key="frame" x="361" y="26" width="34" height="30"/>
+                    <rect key="frame" x="362" y="7" width="33" height="30"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="30" id="ZOa-30-rEf"/>
                     </constraints>
@@ -48,27 +48,27 @@
                     </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="2OG-Ff-YNg">
-                    <rect key="frame" x="361" y="34" width="25" height="14.5"/>
+                    <rect key="frame" x="362" y="15" width="24" height="14.5"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more_green" translatesAutoresizingMaskIntoConstraints="NO" id="RXl-RQ-VTX">
-                    <rect key="frame" x="389" y="37" width="6" height="8"/>
+                    <rect key="frame" x="389" y="18" width="6" height="8"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="8" id="3dv-t9-A1y"/>
                         <constraint firstAttribute="width" constant="6" id="9Vz-LP-ovZ"/>
                     </constraints>
                 </imageView>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="DQd-nL-Wor">
-                    <rect key="frame" x="14" y="32" width="4" height="18"/>
+                    <rect key="frame" x="14" y="13" width="4" height="18"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="18" id="rlt-cd-KJy"/>
                         <constraint firstAttribute="width" constant="4" id="ysI-kO-iNt"/>
                     </constraints>
                 </imageView>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5PX-DV-Tle">
-                    <rect key="frame" x="0.0" y="64" width="414" height="320"/>
+                    <rect key="frame" x="0.0" y="46" width="414" height="320"/>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="320" id="q68-6v-m4R"/>
@@ -88,7 +88,7 @@
                 <constraint firstItem="t7j-WY-6gF" firstAttribute="centerY" secondItem="DQd-nL-Wor" secondAttribute="centerY" id="HJc-jv-RnT"/>
                 <constraint firstItem="3Up-TV-A6N" firstAttribute="centerY" secondItem="t7j-WY-6gF" secondAttribute="centerY" id="Rcz-ki-VEq"/>
                 <constraint firstItem="RXl-RQ-VTX" firstAttribute="centerY" secondItem="t7j-WY-6gF" secondAttribute="centerY" id="VZ0-9S-Lac"/>
-                <constraint firstItem="t7j-WY-6gF" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="Vsf-3w-ngf"/>
+                <constraint firstItem="t7j-WY-6gF" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="Vsf-3w-ngf"/>
                 <constraint firstItem="aLQ-YK-tTY" firstAttribute="centerY" secondItem="2OG-Ff-YNg" secondAttribute="centerY" id="WuF-B0-7jc"/>
                 <constraint firstItem="RXl-RQ-VTX" firstAttribute="trailing" secondItem="aLQ-YK-tTY" secondAttribute="trailing" constant="-5" id="aJ8-A6-XsG"/>
                 <constraint firstItem="DQd-nL-Wor" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="e2G-Q7-sFN"/>

+ 16 - 0
KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/Controller/MusicSquareViewController.h

@@ -0,0 +1,16 @@
+//
+//  MusicSquareViewController.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/19.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MusicSquareViewController : KSBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 611 - 0
KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/Controller/MusicSquareViewController.m

@@ -0,0 +1,611 @@
+//
+//  MusicSquareViewController.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/19.
+//
+
+#import "MusicSquareViewController.h"
+#import "MusicSquareNavView.h"
+#import "KSBaseWKWebViewController.h"
+#import "UserInfoManager.h"
+
+#import "HomeHotAlbumView.h"
+#import "HomeAlbumModel.h"
+#import "HomeHotAlbumCell.h"
+
+
+#import "HomeHotMusicView.h"
+#import "HomeNewMusicView.h"
+#import "HomeRecommendMusicView.h"
+
+#import "HomeHotMusicCollectionCell.h"
+#import "HomeMusicModel.h"
+#import "HomeMusicSheetLayout.h"
+
+#define COLLECTION_WIDTH ((NSInteger)(IS_IPAD ? KPortraitWidth * 0.7 : KPortraitWidth * 0.83))
+#define COLLECTION_HEIGHT (320)
+
+@interface MusicSquareViewController ()<UICollectionViewDelegate, UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
+
+@property (nonatomic, strong) MusicSquareNavView *navView;
+
+
+// 热门专辑
+@property (nonatomic, strong) HomeHotAlbumView *albumView;
+@property (nonatomic, strong) NSMutableArray *albumArray;
+@property (nonatomic, strong) UICollectionView *albumCollectionView; // 专辑容器
+@property (nonatomic, assign) CGFloat albumViewHeight; // album 高度
+
+// 推荐曲目
+@property (nonatomic, strong) HomeRecommendMusicView *recommendMusicView;
+@property (nonatomic, strong) UICollectionView *recommendMusicCollectionView; // 曲谱容器
+@property (nonatomic, strong) NSMutableArray *recommendMusicArray; // 曲谱数据
+@property (nonatomic, assign) CGFloat recommendMusicViewHeight; // music 高度
+
+// 最新曲目
+@property (nonatomic, strong) HomeNewMusicView *newestMusicView;
+@property (nonatomic, strong) UICollectionView *newestMusicCollectionView; // 曲谱容器
+@property (nonatomic, strong) NSMutableArray *newestMusicArray; // 曲谱数据
+@property (nonatomic, assign) CGFloat newestMusicViewHeight; // music 高度
+
+// 热门曲谱
+@property (nonatomic, strong) HomeHotMusicView *hotMusicView;
+@property (nonatomic, strong) UICollectionView *musicCollectionView; // 曲谱容器
+@property (nonatomic, strong) NSMutableArray *musicArray; // 曲谱数据
+@property (nonatomic, assign) CGFloat musicViewHeight; // music 高度
+
+@property (nonatomic, strong) dispatch_group_t requestGroup;
+
+
+@end
+
+@implementation MusicSquareViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.ks_prefersNavigationBarHidden = YES;
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.view addSubview:self.navView];
+    CGFloat navHeight = [MusicSquareNavView getViewHeight];
+    [self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self);
+        make.height.mas_equalTo(navHeight);
+    }];
+    
+    [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(self.navView.mas_bottom);
+        make.left.right.bottom.mas_equalTo(self.view);
+    }];
+    
+    // 热门专辑
+    [self.scrollView addSubview:self.albumView];
+    self.albumViewHeight = [HomeHotAlbumView getViewHeight];
+    [self.albumView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.scrollView.mas_top);
+        make.height.mas_equalTo(self.albumViewHeight);
+    }];
+    
+    // 推荐曲目
+    [self.scrollView addSubview:self.recommendMusicView];
+    self.recommendMusicViewHeight = [HomeRecommendMusicView getViewHeight];
+    [self.recommendMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.albumView.mas_bottom).offset(20);
+        make.height.mas_equalTo(self.recommendMusicViewHeight);
+    }];
+    
+    // 最新曲目
+    [self.scrollView addSubview:self.newestMusicView];
+    self.newestMusicViewHeight = [HomeNewMusicView getViewHeight];
+    [self.newestMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.recommendMusicView.mas_bottom).offset(20);
+        make.height.mas_equalTo(self.newestMusicViewHeight);
+    }];
+    
+    // 热门曲目
+    [self.scrollView addSubview:self.hotMusicView];
+    self.musicViewHeight = [HomeHotMusicView getViewHeight];
+    [self.hotMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.newestMusicView.mas_bottom).offset(20);
+        make.height.mas_equalTo(self.musicViewHeight);
+        make.bottom.mas_equalTo(self.scrollView.mas_bottom).offset(-10);
+    }];
+    MJWeakSelf;
+    self.scrollView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+        [weakSelf requestData];
+    }];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self requestData];
+}
+
+- (void)requestData {
+    [self requestHotAlbum];
+    [self requestHomeMusicMessage];
+    dispatch_group_notify(self.requestGroup, dispatch_get_main_queue(), ^{
+        [self.scrollView.mj_header endRefreshing];
+        [self refreshView];
+    });
+}
+
+- (void)requestHotAlbum {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager HomeHotAlbumRequest:KS_POST page:1 rows:10 version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
+            NSMutableArray *albumArray = [NSMutableArray array];
+            for (NSDictionary *parm in sourceArray) {
+                HomeAlbumModel *model = [[HomeAlbumModel alloc] initWithDictionary:parm];
+                [albumArray addObject:model];
+            }
+            self.albumArray = [NSMutableArray arrayWithArray:albumArray];
+        }
+        else {
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
+        }
+        
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)requestHomeMusicMessage {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager homeAppMusicSheetRequest:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            NSDictionary *result = [dic ks_dictionaryValueForKey:@"data"];
+            NSArray *hotMusicSheet = [result ks_arrayValueForKey:@"hotMusicSheet"]; // 最热曲目
+            NSMutableArray *hotArray = [NSMutableArray array];
+            for (NSDictionary *parm in hotMusicSheet) {
+                HomeMusicModel *model = [[HomeMusicModel alloc] initWithDictionary:parm];
+                [hotArray addObject:model];
+            }
+            self.musicArray = [NSMutableArray arrayWithArray:hotArray];
+            
+            NSArray *newMusicSheet = [result ks_arrayValueForKey:@"newMusicSheet"]; // 最新曲目
+            NSMutableArray *newMusicArray = [NSMutableArray array];
+            for (NSDictionary *parm in newMusicSheet) {
+                HomeMusicModel *model = [[HomeMusicModel alloc] initWithDictionary:parm];
+                [newMusicArray addObject:model];
+            }
+            self.newestMusicArray = [NSMutableArray arrayWithArray:newMusicArray];
+            
+            NSArray *topMusicSheet = [result ks_arrayValueForKey:@"topMusicSheet"]; // 推荐曲目
+            NSMutableArray *topMusicArray = [NSMutableArray array];
+            for (NSDictionary *parm in topMusicSheet) {
+                HomeMusicModel *model = [[HomeMusicModel alloc] initWithDictionary:parm];
+                [topMusicArray addObject:model];
+            }
+            self.recommendMusicArray = [NSMutableArray arrayWithArray:topMusicArray];
+        }
+        else {
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)refreshView {
+    [self refreshAlbumView];
+    [self refreshMusicView];
+}
+
+- (void)refreshAlbumView {
+    if (self.albumArray.count) {
+        self.albumViewHeight = [HomeHotAlbumView getViewHeight];
+        self.albumView.hidden = NO;
+    }
+    else {
+        self.albumViewHeight = CGFLOAT_MIN;
+        self.albumView.hidden = YES;
+    }
+    [self.albumView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.albumViewHeight);
+    }];
+    [self.albumCollectionView reloadData];
+}
+
+- (void)refreshMusicView {
+    if (self.recommendMusicArray.count) {
+        self.recommendMusicViewHeight = [HomeHotMusicView getViewHeight];
+        self.recommendMusicView.hidden = NO;
+    }
+    else {
+        self.recommendMusicViewHeight = CGFLOAT_MIN;
+        self.recommendMusicView.hidden = YES;
+    }
+    
+    [self.recommendMusicView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.recommendMusicViewHeight);
+    }];
+    [self.recommendMusicCollectionView reloadData];
+    
+    if (self.newestMusicArray.count) {
+        self.newestMusicViewHeight = [HomeHotMusicView getViewHeight];
+        self.newestMusicView.hidden = NO;
+    }
+    else {
+        self.newestMusicViewHeight = CGFLOAT_MIN;
+        self.newestMusicView.hidden = YES;
+    }
+    
+    [self.newestMusicView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.newestMusicViewHeight);
+    }];
+    [self.newestMusicCollectionView reloadData];
+    
+    if (self.musicArray.count) {
+        self.musicViewHeight = [HomeHotMusicView getViewHeight];
+        self.hotMusicView.hidden = NO;
+    }
+    else {
+        self.musicViewHeight = CGFLOAT_MIN;
+        self.hotMusicView.hidden = YES;
+    }
+    [self.hotMusicView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.musicViewHeight);
+    }];
+    [self.musicCollectionView reloadData];
+}
+
+
+#pragma mark ---- collection data source
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return 1;
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    if (collectionView == self.albumCollectionView) { // 专辑
+        return self.albumArray.count;
+    }
+    else if (collectionView == self.recommendMusicCollectionView) {
+        NSInteger lastRowCount = (self.recommendMusicArray.count % 4) > 0 ? 1 : 0;
+        NSInteger count = self.recommendMusicArray.count / 4 + lastRowCount;
+        return count;
+    }
+    else if (collectionView == self.newestMusicCollectionView) {
+        NSInteger lastRowCount = (self.newestMusicArray.count % 4) > 0 ? 1 : 0;
+        NSInteger count = self.newestMusicArray.count / 4 + lastRowCount;
+        return count;
+    }
+    else { // 乐谱
+        NSInteger lastRowCount = (self.musicArray.count % 4) > 0 ? 1 : 0;
+        NSInteger count = self.musicArray.count / 4 + lastRowCount;
+        return count;
+    }
+}
+
+
+- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (collectionView == self.albumCollectionView) {
+        HomeAlbumModel *model = self.albumArray[indexPath.item];
+        HomeHotAlbumCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotAlbumCell" forIndexPath:indexPath];
+        [cell configWithAlbumModel:model];
+        return cell;
+    }
+    else if (collectionView == self.recommendMusicCollectionView) {
+        NSMutableArray *songArray = [NSMutableArray array];
+        NSInteger length = indexPath.item * 4 + 4 > self.recommendMusicArray.count ? self.recommendMusicArray.count - indexPath.item * 4: 4;
+        NSRange range = NSMakeRange(indexPath.item * 4, length);
+        
+        songArray = [NSMutableArray arrayWithArray:[self.recommendMusicArray subarrayWithRange:range]];
+        HomeHotMusicCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotMusicCollectionCell" forIndexPath:indexPath];
+        MJWeakSelf;
+        [cell configWithSourceArray:songArray callback:^(NSString * _Nonnull songId) {
+            [weakSelf displaySongDetail:songId];
+        }];
+        return cell;
+    }
+    else if (collectionView == self.newestMusicCollectionView) {
+        NSMutableArray *songArray = [NSMutableArray array];
+        NSInteger length = indexPath.item * 4 + 4 > self.newestMusicArray.count ? self.newestMusicArray.count - indexPath.item * 4: 4;
+        NSRange range = NSMakeRange(indexPath.item * 4, length);
+        
+        songArray = [NSMutableArray arrayWithArray:[self.newestMusicArray subarrayWithRange:range]];
+        HomeHotMusicCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotMusicCollectionCell" forIndexPath:indexPath];
+        MJWeakSelf;
+        [cell configWithSourceArray:songArray callback:^(NSString * _Nonnull songId) {
+            [weakSelf displaySongDetail:songId];
+        }];
+        return cell;
+    }
+    else {
+        NSMutableArray *songArray = [NSMutableArray array];
+        NSInteger length = indexPath.item * 4 + 4 > self.musicArray.count ? self.musicArray.count - indexPath.item * 4: 4;
+        NSRange range = NSMakeRange(indexPath.item * 4, length);
+        
+        songArray = [NSMutableArray arrayWithArray:[self.musicArray subarrayWithRange:range]];
+        HomeHotMusicCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotMusicCollectionCell" forIndexPath:indexPath];
+        MJWeakSelf;
+        [cell configWithSourceArray:songArray callback:^(NSString * _Nonnull songId) {
+            [weakSelf displaySongDetail:songId];
+        }];
+        return cell;
+    }
+}
+
+
+- (void)displaySongDetail:(NSString *)songId {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/music-detail?id=",songId];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (collectionView == self.albumCollectionView) { // 专辑详情
+        HomeAlbumModel *model = self.albumArray[indexPath.item];
+        KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+        ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/music-album-detail/",model.internalBaseClassIdentifier];
+        [self.navigationController pushViewController:ctrl animated:YES];
+    }
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (collectionView == self.albumCollectionView) {
+        return CGSizeMake(100, 134);
+    }
+    else if (collectionView == self.recommendMusicCollectionView) {
+        return CGSizeMake(COLLECTION_WIDTH, COLLECTION_HEIGHT);
+    }
+    else if (collectionView == self.newestMusicCollectionView) {
+        return CGSizeMake(COLLECTION_WIDTH, COLLECTION_HEIGHT);
+    }
+    else {
+        return CGSizeMake(COLLECTION_WIDTH, COLLECTION_HEIGHT);
+    }
+}
+
+#pragma mark ---- lazying
+- (dispatch_group_t)requestGroup {
+    if (!_requestGroup) {
+        _requestGroup = dispatch_group_create();
+    }
+    return _requestGroup;
+}
+- (MusicSquareNavView *)navView {
+    if (!_navView) {
+        _navView = [MusicSquareNavView sharedInstance];
+        MJWeakSelf;
+        [_navView topSearchAction:^{
+            [weakSelf searchMusic];
+        }];
+    }
+    return _navView;
+}
+
+- (void)searchMusic {
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@/#/music-songbook/search", WEBHOST];
+    [self.navigationController pushViewController:webCtrl animated:YES];
+}
+
+#pragma mark ----- 专辑
+- (HomeHotAlbumView *)albumView {
+    if (!_albumView) {
+        _albumView = [HomeHotAlbumView shareInstance];
+        MJWeakSelf;
+        [_albumView homeAlbumMore:^{
+            [weakSelf moreAlbumDetail];
+        }];
+        [_albumView.albumContentView addSubview:self.albumCollectionView];
+        [self.albumCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_albumView.albumContentView);
+        }];
+    }
+    return _albumView;
+}
+
+- (UICollectionView *)albumCollectionView {
+    if (!_albumCollectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _albumCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _albumCollectionView.backgroundColor = [UIColor clearColor];
+        _albumCollectionView.delegate = self;
+        _albumCollectionView.dataSource = self;
+        _albumCollectionView.showsVerticalScrollIndicator = NO;
+        _albumCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _albumCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _albumCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_albumCollectionView registerNib:[UINib nibWithNibName:@"HomeHotAlbumCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotAlbumCell"];
+    }
+    return _albumCollectionView;
+}
+
+- (void)moreAlbumDetail {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-album"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+#pragma mark --- 推荐曲目
+- (HomeRecommendMusicView *)recommendMusicView {
+    if (!_recommendMusicView) {
+        _recommendMusicView = [HomeRecommendMusicView shareInstance];
+        MJWeakSelf;
+        [_recommendMusicView homeMusicMore:^{
+            [weakSelf moreRecommendMusic];
+        }];
+        [_recommendMusicView.musicContentView addSubview:self.recommendMusicCollectionView];
+        [self.recommendMusicCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_recommendMusicView.musicContentView);
+        }];
+    }
+    return _recommendMusicView;
+}
+
+- (UICollectionView *)recommendMusicCollectionView {
+    if (!_recommendMusicCollectionView) {
+        HomeMusicSheetLayout *layout = [[HomeMusicSheetLayout alloc] initWithSectionInset:UIEdgeInsetsMake(0, 11, 0, KPortraitWidth - COLLECTION_WIDTH) andMiniLineSapce:10 andMiniInterItemSpace:10 andItemSize:CGSizeMake(COLLECTION_WIDTH, COLLECTION_HEIGHT)];
+
+        _recommendMusicCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _recommendMusicCollectionView.backgroundColor = [UIColor clearColor];
+        _recommendMusicCollectionView.delegate = self;
+        _recommendMusicCollectionView.dataSource = self;
+        _recommendMusicCollectionView.showsVerticalScrollIndicator = NO;
+        _recommendMusicCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _recommendMusicCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _recommendMusicCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_recommendMusicCollectionView registerNib:[UINib nibWithNibName:@"HomeHotMusicCollectionCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotMusicCollectionCell"];
+    }
+    return _recommendMusicCollectionView;
+}
+
+- (NSMutableArray *)recommendMusicArray {
+    if (!_recommendMusicArray) {
+        _recommendMusicArray  = [NSMutableArray array];
+    }
+    return _recommendMusicArray;
+}
+
+- (void)moreRecommendMusic {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-list"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+#pragma mark ---- 最新曲目
+- (HomeNewMusicView *)newestMusicView {
+    if (!_newestMusicView) {
+        if (!_newestMusicView) {
+            _newestMusicView = [HomeNewMusicView shareInstance];
+            MJWeakSelf;
+            [_newestMusicView homeMusicMore:^{
+                [weakSelf moreNewMusic];
+            }];
+            [_newestMusicView.musicContentView addSubview:self.newestMusicCollectionView];
+            [self.newestMusicCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.left.right.bottom.top.mas_equalTo(_newestMusicView.musicContentView);
+            }];
+        }
+        return _newestMusicView;
+    }
+    return _newestMusicView;
+}
+
+- (UICollectionView *)newestMusicCollectionView {
+    if (!_newestMusicCollectionView) {
+        HomeMusicSheetLayout *layout = [[HomeMusicSheetLayout alloc] initWithSectionInset:UIEdgeInsetsMake(0, 11, 0, KPortraitWidth - COLLECTION_WIDTH) andMiniLineSapce:10 andMiniInterItemSpace:10 andItemSize:CGSizeMake(COLLECTION_WIDTH, COLLECTION_HEIGHT)];
+
+        _newestMusicCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _newestMusicCollectionView.backgroundColor = [UIColor clearColor];
+        _newestMusicCollectionView.delegate = self;
+        _newestMusicCollectionView.dataSource = self;
+        _newestMusicCollectionView.showsVerticalScrollIndicator = NO;
+        _newestMusicCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _newestMusicCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _newestMusicCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_newestMusicCollectionView registerNib:[UINib nibWithNibName:@"HomeHotMusicCollectionCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotMusicCollectionCell"];
+    }
+    return _newestMusicCollectionView;
+}
+
+- (NSMutableArray *)newestMusicArray {
+    if (!_newestMusicArray) {
+        _newestMusicArray = [NSMutableArray array];
+    }
+    return _newestMusicArray;
+}
+
+- (void)moreNewMusic {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-list"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+ 
+#pragma mark ---- 热门曲目
+- (HomeHotMusicView *)hotMusicView {
+    if (!_hotMusicView) {
+        _hotMusicView = [HomeHotMusicView shareInstance];
+        MJWeakSelf;
+        [_hotMusicView homeMusicMore:^{
+            [weakSelf moreHotMusic];
+        }];
+        [_hotMusicView.musicContentView addSubview:self.musicCollectionView];
+        [self.musicCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_hotMusicView.musicContentView);
+        }];
+    }
+    return _hotMusicView;
+}
+
+
+- (void)moreHotMusic {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-list"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+- (UICollectionView *)musicCollectionView {
+    if (!_musicCollectionView) {
+        HomeMusicSheetLayout *layout = [[HomeMusicSheetLayout alloc] initWithSectionInset:UIEdgeInsetsMake(0, 11, 0, KPortraitWidth - COLLECTION_WIDTH) andMiniLineSapce:10 andMiniInterItemSpace:10 andItemSize:CGSizeMake(COLLECTION_WIDTH, COLLECTION_HEIGHT)];
+
+        _musicCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _musicCollectionView.backgroundColor = [UIColor clearColor];
+        _musicCollectionView.delegate = self;
+        _musicCollectionView.dataSource = self;
+        _musicCollectionView.showsVerticalScrollIndicator = NO;
+        _musicCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _musicCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _musicCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_musicCollectionView registerNib:[UINib nibWithNibName:@"HomeHotMusicCollectionCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotMusicCollectionCell"];
+    }
+    return _musicCollectionView;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 24 - 0
KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/View/MusicSquareNavView.h

@@ -0,0 +1,24 @@
+//
+//  MusicSquareNavView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/19.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^SquareNavSearchCallback)(void);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MusicSquareNavView : UIView
+
++ (instancetype)sharedInstance;
+
+- (void)topSearchAction:(SquareNavSearchCallback)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 49 - 0
KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/View/MusicSquareNavView.m

@@ -0,0 +1,49 @@
+//
+//  MusicSquareNavView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2024/11/19.
+//
+
+#import "MusicSquareNavView.h"
+
+@interface MusicSquareNavView ()
+
+@property (nonatomic, copy) SquareNavSearchCallback callback;
+
+@end
+
+@implementation MusicSquareNavView
+
++ (instancetype)sharedInstance {
+    MusicSquareNavView *view = [[[NSBundle mainBundle] loadNibNamed:@"MusicSquareNavView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)topSearchAction:(SquareNavSearchCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)searchAction:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+
++ (CGFloat)getViewHeight {
+    
+    return kNaviBarHeight;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 105 - 0
KulexiuForStudent/KulexiuForStudent/Module/MusicSquare/View/MusicSquareNavView.xib

@@ -0,0 +1,105 @@
+<?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="MusicSquareNavView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="89"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jyQ-YX-aI7">
+                    <rect key="frame" x="0.0" y="45" width="393" height="44"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ExJ-Le-ZWY">
+                            <rect key="frame" x="88" y="6" width="291" height="32"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="square_search" translatesAutoresizingMaskIntoConstraints="NO" id="Jr8-6r-aDl">
+                                    <rect key="frame" x="12" y="8" width="16" height="16"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="16" id="QTE-77-Psy"/>
+                                        <constraint firstAttribute="width" constant="16" id="n2o-cd-mJ1"/>
+                                    </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="Drm-89-bVw">
+                                    <rect key="frame" x="35.999999999999993" y="8.6666666666666643" width="103.33333333333331" height="15"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                    <color key="textColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Drm-89-bVw" secondAttribute="trailing" constant="12" id="KrE-6Q-Dy5"/>
+                                <constraint firstItem="Jr8-6r-aDl" firstAttribute="leading" secondItem="ExJ-Le-ZWY" secondAttribute="leading" constant="12" id="OdK-pj-aXC"/>
+                                <constraint firstItem="Drm-89-bVw" firstAttribute="leading" secondItem="Jr8-6r-aDl" secondAttribute="trailing" constant="8" id="YjL-n8-kYp"/>
+                                <constraint firstItem="Drm-89-bVw" firstAttribute="centerY" secondItem="Jr8-6r-aDl" secondAttribute="centerY" id="eei-Ov-Ukw"/>
+                                <constraint firstAttribute="height" constant="32" id="ir6-yA-Dmq"/>
+                                <constraint firstItem="Jr8-6r-aDl" firstAttribute="centerY" secondItem="ExJ-Le-ZWY" secondAttribute="centerY" id="kOf-QR-Bxq"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="16"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="cQn-Is-mXU" appends="YES" id="moh-VV-X3H"/>
+                            </connections>
+                        </view>
+                        <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qxg-7l-Q8M">
+                            <rect key="frame" x="0.0" y="43" width="393" height="1"/>
+                            <color key="backgroundColor" red="0.97647058819999999" green="0.97647058819999999" blue="0.97647058819999999" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="1xg-Aj-Okp"/>
+                            </constraints>
+                        </view>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_icon" translatesAutoresizingMaskIntoConstraints="NO" id="sHK-C6-Qza">
+                            <rect key="frame" x="15" y="4.6666666666666643" width="59" height="35"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="59" id="2V6-F5-gtk"/>
+                                <constraint firstAttribute="height" constant="35" id="wQb-GC-hgd"/>
+                            </constraints>
+                        </imageView>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="sHK-C6-Qza" firstAttribute="leading" secondItem="jyQ-YX-aI7" secondAttribute="leading" constant="15" id="63M-0q-YlR"/>
+                        <constraint firstAttribute="height" constant="44" id="Apa-WK-f3E"/>
+                        <constraint firstItem="sHK-C6-Qza" firstAttribute="centerY" secondItem="jyQ-YX-aI7" secondAttribute="centerY" id="VPQ-LM-IWs"/>
+                        <constraint firstItem="ExJ-Le-ZWY" firstAttribute="leading" secondItem="sHK-C6-Qza" secondAttribute="trailing" constant="14" id="Wcv-2U-bJI"/>
+                        <constraint firstAttribute="trailing" secondItem="ExJ-Le-ZWY" secondAttribute="trailing" constant="14" id="faJ-W4-hQf"/>
+                        <constraint firstItem="ExJ-Le-ZWY" firstAttribute="centerY" secondItem="jyQ-YX-aI7" secondAttribute="centerY" id="mAU-v3-ktU"/>
+                        <constraint firstAttribute="bottom" secondItem="qxg-7l-Q8M" secondAttribute="bottom" id="ogQ-av-5T4"/>
+                        <constraint firstItem="qxg-7l-Q8M" firstAttribute="leading" secondItem="jyQ-YX-aI7" secondAttribute="leading" id="w3C-Ig-BP2"/>
+                        <constraint firstAttribute="trailing" secondItem="qxg-7l-Q8M" secondAttribute="trailing" id="wjb-nY-7AZ"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="jyQ-YX-aI7" secondAttribute="bottom" id="hcS-ZU-yZ2"/>
+                <constraint firstItem="jyQ-YX-aI7" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="oPd-c5-eaH"/>
+                <constraint firstAttribute="trailing" secondItem="jyQ-YX-aI7" secondAttribute="trailing" id="wug-Xx-CCc"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="23.664122137404579" y="-87.676056338028175"/>
+        </view>
+        <tapGestureRecognizer id="cQn-Is-mXU">
+            <connections>
+                <action selector="searchAction:" destination="iN0-l3-epB" id="TZP-8t-olp"/>
+            </connections>
+        </tapGestureRecognizer>
+    </objects>
+    <resources>
+        <image name="home_icon" width="59" height="35"/>
+        <image name="square_search" width="16" height="16"/>
+    </resources>
+</document>

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません