Steven 2 jaren geleden
bovenliggende
commit
fca0b96968
100 gewijzigde bestanden met toevoegingen van 5126 en 82 verwijderingen
  1. 324 38
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 84 4
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/course_tips.imageset/Contents.json
  5. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/course_tips.imageset/course_tips@2x.png
  6. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/course_tips.imageset/course_tips@3x.png
  7. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_courseNext.imageset/Contents.json
  8. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_courseNext.imageset/home_courseNext@2x.png
  9. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_courseNext.imageset/home_courseNext@3x.png
  10. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_icon.imageset/Contents.json
  11. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_icon.imageset/home_icon@2x.png
  12. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_icon.imageset/home_icon@3x.png
  13. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_music_play.imageset/Contents.json
  14. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_music_play.imageset/home_music_play@2x.png
  15. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_music_play.imageset/home_music_play@3x.png
  16. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_scan.imageset/home_scan@2x.png
  17. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_scan.imageset/home_scan@3x.png
  18. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_search.imageset/Contents.json
  19. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_search.imageset/home_search@2x.png
  20. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/home_search.imageset/home_search@3x.png
  21. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/notice_icon.imageset/notice_icon@2x.png
  22. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/notice_icon.imageset/notice_icon@3x.png
  23. 25 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h
  24. 42 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m
  25. 1 1
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSTabBarViewController.m
  26. 4 4
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSUploadManager.m
  27. 14 14
      KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch
  28. 3 3
      KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/NSDate+Extension.m
  29. 68 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  30. 22 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/NewHomeViewController.h
  31. 1569 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m
  32. 62 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.h
  33. 393 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.m
  34. 55 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/TalentTeacherModel.h
  35. 344 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/TalentTeacherModel.m
  36. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerCell.h
  37. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerCell.m
  38. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerCell.xib
  39. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerView.h
  40. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerView.m
  41. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerView.xib
  42. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/HomeButtonView.h
  43. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/HomeButtonView.m
  44. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/HomeButtonView.xib
  45. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/KSHomeButton.h
  46. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/KSHomeButton.m
  47. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/KSHomeButton.xib
  48. 31 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.h
  49. 55 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.m
  50. 143 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.xib
  51. 25 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageHeaderView.h
  52. 20 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageHeaderView.m
  53. 84 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageHeaderView.xib
  54. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.h
  55. 20 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.m
  56. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomePageBodyView.h
  57. 20 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomePageBodyView.m
  58. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.h
  59. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.m
  60. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.xib
  61. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.h
  62. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.m
  63. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.xib
  64. 20 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCell.h
  65. 48 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCell.m
  66. 153 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCell.xib
  67. 26 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCourseView.h
  68. 41 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCourseView.m
  69. 108 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCourseView.xib
  70. 23 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.h
  71. 165 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.m
  72. 144 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.xib
  73. 3 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCollectionCell.h
  74. 47 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCollectionCell.m
  75. 57 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCollectionCell.xib
  76. 2 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.h
  77. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.m
  78. 3 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.xib
  79. 19 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentCell.h
  80. 48 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentCell.m
  81. 153 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentCell.xib
  82. 23 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentView.h
  83. 27 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentView.m
  84. 62 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentView.xib
  85. 19 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCell.h
  86. 45 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCell.m
  87. 153 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCell.xib
  88. 26 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCourseView.h
  89. 41 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCourseView.m
  90. 108 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCourseView.xib
  91. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/PublicNoticeView.h
  92. 2 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/PublicNoticeView.m
  93. 7 11
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/PublicNoticeView.xib
  94. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/accomapny_animation.json
  95. BIN
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_0.png
  96. BIN
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_1.png
  97. BIN
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_2.png
  98. BIN
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_3.png
  99. BIN
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/live_animation_0.png
  100. BIN
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/live_animation_1.png

+ 324 - 38
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -433,8 +433,6 @@
 		BC40B9FA2811768400DEC0D1 /* HotInformationHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC40B9F92811768400DEC0D1 /* HotInformationHeadView.xib */; };
 		BC40B9FE281177BD00DEC0D1 /* HomeInformationCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40B9FC281177BD00DEC0D1 /* HomeInformationCell.m */; };
 		BC40B9FF281177BD00DEC0D1 /* HomeInformationCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC40B9FD281177BD00DEC0D1 /* HomeInformationCell.xib */; };
-		BC40BA0328117B0A00DEC0D1 /* HomeBannerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA0128117B0A00DEC0D1 /* HomeBannerCell.m */; };
-		BC40BA0428117B0A00DEC0D1 /* HomeBannerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC40BA0228117B0A00DEC0D1 /* HomeBannerCell.xib */; };
 		BC40BA1828124D3D00DEC0D1 /* NotiferMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1728124D3D00DEC0D1 /* NotiferMessageViewController.m */; };
 		BC40BA1B281251ED00DEC0D1 /* HomeMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1A281251ED00DEC0D1 /* HomeMessageModel.m */; };
 		BC40BA1F2812552300DEC0D1 /* KSHomeButton.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40BA1C2812552200DEC0D1 /* KSHomeButton.m */; };
@@ -570,6 +568,17 @@
 		BC802D9928BC4FE90079E350 /* HomeHotMusicView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC802D9828BC4FE90079E350 /* HomeHotMusicView.xib */; };
 		BC802D9D28BC546B0079E350 /* HomeHotMusicCollectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC802D9B28BC546B0079E350 /* HomeHotMusicCollectionCell.m */; };
 		BC802D9E28BC546B0079E350 /* HomeHotMusicCollectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC802D9C28BC546B0079E350 /* HomeHotMusicCollectionCell.xib */; };
+		BC802DA328BC5F8D0079E350 /* HomeHotMusicCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC802DA028BC5F8C0079E350 /* HomeHotMusicCellView.m */; };
+		BC802DA428BC5F8D0079E350 /* HomeHotMusicCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC802DA128BC5F8C0079E350 /* HomeHotMusicCellView.xib */; };
+		BC802DA728BC62390079E350 /* HomeHotMusicModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC802DA628BC62390079E350 /* HomeHotMusicModel.m */; };
+		BC802DAB28BC6EDA0079E350 /* HomeHotTalentView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC802DAA28BC6EDA0079E350 /* HomeHotTalentView.m */; };
+		BC802DAD28BC6EE40079E350 /* HomeHotTalentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC802DAC28BC6EE40079E350 /* HomeHotTalentView.xib */; };
+		BC802DB228BC70370079E350 /* HomeHotTalentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC802DB028BC70370079E350 /* HomeHotTalentCell.m */; };
+		BC802DB328BC70370079E350 /* HomeHotTalentCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC802DB128BC70370079E350 /* HomeHotTalentCell.xib */; };
+		BC802DB828BC8C780079E350 /* HomeHotVideoCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC802DB728BC8C780079E350 /* HomeHotVideoCourseView.m */; };
+		BC802DBA28BC8C810079E350 /* HomeHotVideoCourseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC802DB928BC8C810079E350 /* HomeHotVideoCourseView.xib */; };
+		BC802DBD28BC8E2C0079E350 /* HomeHotLiveCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC802DBC28BC8E2C0079E350 /* HomeHotLiveCourseView.m */; };
+		BC802DBF28BC8E350079E350 /* HomeHotLiveCourseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC802DBE28BC8E350079E350 /* HomeHotLiveCourseView.xib */; };
 		BC8A4593283DC33400094BBB /* KSCloudViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8A4548283DC33400094BBB /* KSCloudViewController.m */; };
 		BC8A4594283DC33400094BBB /* MidiPlayerEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8A454A283DC33400094BBB /* MidiPlayerEngine.m */; };
 		BC8A4595283DC33400094BBB /* GCDTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8A454B283DC33400094BBB /* GCDTimer.m */; };
@@ -785,8 +794,6 @@
 		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 */; };
-		BCBFDF3C281156430052AFE5 /* HomeBannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCBFDF3B281156430052AFE5 /* HomeBannerView.m */; };
-		BCBFDF3E2811564C0052AFE5 /* HomeBannerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCBFDF3D2811564C0052AFE5 /* HomeBannerView.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 */; };
@@ -838,6 +845,39 @@
 		BCDE358E289A7D8700A9A560 /* KSGroupTagImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDE358D289A7D8700A9A560 /* KSGroupTagImageView.m */; };
 		BCEBB8E82840B87100A76BE8 /* KSLiveChatroomMemberUp.m in Sources */ = {isa = PBXBuildFile; fileRef = BCEBB8E72840B87100A76BE8 /* KSLiveChatroomMemberUp.m */; };
 		BCED5CA7284F55A0009A42DE /* FriendListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCED5CA6284F55A0009A42DE /* FriendListModel.m */; };
+		BCFDA61228BC8FCE0022B497 /* HomeHotVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA61028BC8FCE0022B497 /* HomeHotVideoCell.m */; };
+		BCFDA61328BC8FCE0022B497 /* HomeHotVideoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA61128BC8FCE0022B497 /* HomeHotVideoCell.xib */; };
+		BCFDA61728BC8FDE0022B497 /* HomeHotLiveCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA61528BC8FDE0022B497 /* HomeHotLiveCell.m */; };
+		BCFDA61828BC8FDE0022B497 /* HomeHotLiveCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA61628BC8FDE0022B497 /* HomeHotLiveCell.xib */; };
+		BCFDA61B28BC90310022B497 /* HomePageHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA61A28BC90310022B497 /* HomePageHeaderView.m */; };
+		BCFDA61D28BC903C0022B497 /* HomePageHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA61C28BC903C0022B497 /* HomePageHeaderView.xib */; };
+		BCFDA62028BC93C80022B497 /* NewHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA61F28BC93C80022B497 /* NewHomeViewController.m */; };
+		BCFDA62428BC94400022B497 /* HomeNavSearchView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA62328BC94400022B497 /* HomeNavSearchView.m */; };
+		BCFDA62628BC94480022B497 /* HomeNavSearchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA62528BC94480022B497 /* HomeNavSearchView.xib */; };
+		BCFDA62E28BC99410022B497 /* HomeBannerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA62828BC99410022B497 /* HomeBannerCell.m */; };
+		BCFDA62F28BC99410022B497 /* HomeBannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA62928BC99410022B497 /* HomeBannerView.m */; };
+		BCFDA63028BC99410022B497 /* HomeBannerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA62A28BC99410022B497 /* HomeBannerCell.xib */; };
+		BCFDA63128BC99410022B497 /* HomeBannerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA62D28BC99410022B497 /* HomeBannerView.xib */; };
+		BCFDA63728BCA1C60022B497 /* HomeRecentCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA63428BCA1C60022B497 /* HomeRecentCourseView.m */; };
+		BCFDA63828BCA1C60022B497 /* HomeRecentCourseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA63628BCA1C60022B497 /* HomeRecentCourseView.xib */; };
+		BCFDA64A28BCA2000022B497 /* accomapny_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA63A28BCA2000022B497 /* accomapny_animation.json */; };
+		BCFDA64B28BCA2000022B497 /* musicRoom_animation_2.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA63C28BCA2000022B497 /* musicRoom_animation_2.png */; };
+		BCFDA64C28BCA2000022B497 /* live_animation_0.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA63D28BCA2000022B497 /* live_animation_0.png */; };
+		BCFDA64D28BCA2000022B497 /* live_animation_1.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA63E28BCA2000022B497 /* live_animation_1.png */; };
+		BCFDA64E28BCA2000022B497 /* musicRoom_animation_3.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA63F28BCA2000022B497 /* musicRoom_animation_3.png */; };
+		BCFDA64F28BCA2000022B497 /* musicRoom_animation_1.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64028BCA2000022B497 /* musicRoom_animation_1.png */; };
+		BCFDA65028BCA2000022B497 /* live_animation_3.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64128BCA2000022B497 /* live_animation_3.png */; };
+		BCFDA65128BCA2000022B497 /* live_animation_2.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64228BCA2000022B497 /* live_animation_2.png */; };
+		BCFDA65228BCA2000022B497 /* musicRoom_animation_0.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64328BCA2000022B497 /* musicRoom_animation_0.png */; };
+		BCFDA65328BCA2000022B497 /* accomapny_animation_3.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64428BCA2000022B497 /* accomapny_animation_3.png */; };
+		BCFDA65428BCA2000022B497 /* accomapny_animation_2.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64528BCA2000022B497 /* accomapny_animation_2.png */; };
+		BCFDA65528BCA2000022B497 /* accomapny_animation_0.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64628BCA2000022B497 /* accomapny_animation_0.png */; };
+		BCFDA65628BCA2000022B497 /* accomapny_animation_1.png in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64728BCA2000022B497 /* accomapny_animation_1.png */; };
+		BCFDA65728BCA2000022B497 /* musicRoom_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64828BCA2000022B497 /* musicRoom_animation.json */; };
+		BCFDA65828BCA2000022B497 /* live_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA64928BCA2000022B497 /* live_animation.json */; };
+		BCFDA65C28BCAEB10022B497 /* HomePageBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA65B28BCAEB10022B497 /* HomePageBodyView.m */; };
+		BCFDA65F28BCAEC80022B497 /* HomeInformationBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA65E28BCAEC80022B497 /* HomeInformationBodyView.m */; };
+		BCFDA66228BDC3640022B497 /* TalentTeacherModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA66028BDC3630022B497 /* TalentTeacherModel.m */; };
 		BCFE53E72812765600AD6786 /* HomeHotAlbumCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE53E52812765600AD6786 /* HomeHotAlbumCell.m */; };
 		BCFE53E82812765600AD6786 /* HomeHotAlbumCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFE53E62812765600AD6786 /* HomeHotAlbumCell.xib */; };
 		BCFE53EC2812897600AD6786 /* HomeLiveCouseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE53EA2812897600AD6786 /* HomeLiveCouseCell.m */; };
@@ -1666,9 +1706,6 @@
 		BC40B9FB281177BD00DEC0D1 /* HomeInformationCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeInformationCell.h; sourceTree = "<group>"; };
 		BC40B9FC281177BD00DEC0D1 /* HomeInformationCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeInformationCell.m; sourceTree = "<group>"; };
 		BC40B9FD281177BD00DEC0D1 /* HomeInformationCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeInformationCell.xib; sourceTree = "<group>"; };
-		BC40BA0028117B0A00DEC0D1 /* HomeBannerCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeBannerCell.h; sourceTree = "<group>"; };
-		BC40BA0128117B0A00DEC0D1 /* HomeBannerCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeBannerCell.m; sourceTree = "<group>"; };
-		BC40BA0228117B0A00DEC0D1 /* HomeBannerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeBannerCell.xib; sourceTree = "<group>"; };
 		BC40BA1628124D3D00DEC0D1 /* NotiferMessageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotiferMessageViewController.h; sourceTree = "<group>"; };
 		BC40BA1728124D3D00DEC0D1 /* NotiferMessageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotiferMessageViewController.m; sourceTree = "<group>"; };
 		BC40BA19281251EC00DEC0D1 /* HomeMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeMessageModel.h; sourceTree = "<group>"; };
@@ -1846,6 +1883,23 @@
 		BC802D9A28BC546B0079E350 /* HomeHotMusicCollectionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotMusicCollectionCell.h; sourceTree = "<group>"; };
 		BC802D9B28BC546B0079E350 /* HomeHotMusicCollectionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotMusicCollectionCell.m; sourceTree = "<group>"; };
 		BC802D9C28BC546B0079E350 /* HomeHotMusicCollectionCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotMusicCollectionCell.xib; sourceTree = "<group>"; };
+		BC802DA028BC5F8C0079E350 /* HomeHotMusicCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeHotMusicCellView.m; sourceTree = "<group>"; };
+		BC802DA128BC5F8C0079E350 /* HomeHotMusicCellView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeHotMusicCellView.xib; sourceTree = "<group>"; };
+		BC802DA228BC5F8C0079E350 /* HomeHotMusicCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeHotMusicCellView.h; sourceTree = "<group>"; };
+		BC802DA528BC62390079E350 /* HomeHotMusicModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeHotMusicModel.h; sourceTree = "<group>"; };
+		BC802DA628BC62390079E350 /* HomeHotMusicModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeHotMusicModel.m; sourceTree = "<group>"; };
+		BC802DA928BC6EDA0079E350 /* HomeHotTalentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotTalentView.h; sourceTree = "<group>"; };
+		BC802DAA28BC6EDA0079E350 /* HomeHotTalentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotTalentView.m; sourceTree = "<group>"; };
+		BC802DAC28BC6EE40079E350 /* HomeHotTalentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotTalentView.xib; sourceTree = "<group>"; };
+		BC802DAF28BC70370079E350 /* HomeHotTalentCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotTalentCell.h; sourceTree = "<group>"; };
+		BC802DB028BC70370079E350 /* HomeHotTalentCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotTalentCell.m; sourceTree = "<group>"; };
+		BC802DB128BC70370079E350 /* HomeHotTalentCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotTalentCell.xib; sourceTree = "<group>"; };
+		BC802DB628BC8C780079E350 /* HomeHotVideoCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotVideoCourseView.h; sourceTree = "<group>"; };
+		BC802DB728BC8C780079E350 /* HomeHotVideoCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotVideoCourseView.m; sourceTree = "<group>"; };
+		BC802DB928BC8C810079E350 /* HomeHotVideoCourseView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotVideoCourseView.xib; sourceTree = "<group>"; };
+		BC802DBB28BC8E2C0079E350 /* HomeHotLiveCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotLiveCourseView.h; sourceTree = "<group>"; };
+		BC802DBC28BC8E2C0079E350 /* HomeHotLiveCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotLiveCourseView.m; sourceTree = "<group>"; };
+		BC802DBE28BC8E350079E350 /* HomeHotLiveCourseView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotLiveCourseView.xib; sourceTree = "<group>"; };
 		BC8A4547283DC33400094BBB /* KSCloudViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSCloudViewController.h; sourceTree = "<group>"; };
 		BC8A4548283DC33400094BBB /* KSCloudViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSCloudViewController.m; sourceTree = "<group>"; };
 		BC8A454A283DC33400094BBB /* MidiPlayerEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MidiPlayerEngine.m; sourceTree = "<group>"; };
@@ -2235,9 +2289,6 @@
 		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>"; };
-		BCBFDF3A281156430052AFE5 /* HomeBannerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeBannerView.h; sourceTree = "<group>"; };
-		BCBFDF3B281156430052AFE5 /* HomeBannerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeBannerView.m; sourceTree = "<group>"; };
-		BCBFDF3D2811564C0052AFE5 /* HomeBannerView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeBannerView.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>"; };
@@ -2301,6 +2352,50 @@
 		BCEBB8E72840B87100A76BE8 /* KSLiveChatroomMemberUp.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomMemberUp.m; sourceTree = "<group>"; };
 		BCED5CA5284F55A0009A42DE /* FriendListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FriendListModel.h; sourceTree = "<group>"; };
 		BCED5CA6284F55A0009A42DE /* FriendListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FriendListModel.m; sourceTree = "<group>"; };
+		BCFDA60F28BC8FCE0022B497 /* HomeHotVideoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotVideoCell.h; sourceTree = "<group>"; };
+		BCFDA61028BC8FCE0022B497 /* HomeHotVideoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotVideoCell.m; sourceTree = "<group>"; };
+		BCFDA61128BC8FCE0022B497 /* HomeHotVideoCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotVideoCell.xib; sourceTree = "<group>"; };
+		BCFDA61428BC8FDE0022B497 /* HomeHotLiveCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotLiveCell.h; sourceTree = "<group>"; };
+		BCFDA61528BC8FDE0022B497 /* HomeHotLiveCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotLiveCell.m; sourceTree = "<group>"; };
+		BCFDA61628BC8FDE0022B497 /* HomeHotLiveCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotLiveCell.xib; sourceTree = "<group>"; };
+		BCFDA61928BC90310022B497 /* HomePageHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomePageHeaderView.h; sourceTree = "<group>"; };
+		BCFDA61A28BC90310022B497 /* HomePageHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomePageHeaderView.m; sourceTree = "<group>"; };
+		BCFDA61C28BC903C0022B497 /* HomePageHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomePageHeaderView.xib; sourceTree = "<group>"; };
+		BCFDA61E28BC93C70022B497 /* NewHomeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NewHomeViewController.h; sourceTree = "<group>"; };
+		BCFDA61F28BC93C80022B497 /* NewHomeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NewHomeViewController.m; sourceTree = "<group>"; };
+		BCFDA62228BC94400022B497 /* HomeNavSearchView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeNavSearchView.h; sourceTree = "<group>"; };
+		BCFDA62328BC94400022B497 /* HomeNavSearchView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeNavSearchView.m; sourceTree = "<group>"; };
+		BCFDA62528BC94480022B497 /* HomeNavSearchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeNavSearchView.xib; sourceTree = "<group>"; };
+		BCFDA62828BC99410022B497 /* HomeBannerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeBannerCell.m; sourceTree = "<group>"; };
+		BCFDA62928BC99410022B497 /* HomeBannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeBannerView.m; sourceTree = "<group>"; };
+		BCFDA62A28BC99410022B497 /* HomeBannerCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeBannerCell.xib; sourceTree = "<group>"; };
+		BCFDA62B28BC99410022B497 /* HomeBannerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeBannerCell.h; sourceTree = "<group>"; };
+		BCFDA62C28BC99410022B497 /* HomeBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeBannerView.h; sourceTree = "<group>"; };
+		BCFDA62D28BC99410022B497 /* HomeBannerView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeBannerView.xib; sourceTree = "<group>"; };
+		BCFDA63428BCA1C60022B497 /* HomeRecentCourseView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeRecentCourseView.m; sourceTree = "<group>"; };
+		BCFDA63528BCA1C60022B497 /* HomeRecentCourseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeRecentCourseView.h; sourceTree = "<group>"; };
+		BCFDA63628BCA1C60022B497 /* HomeRecentCourseView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeRecentCourseView.xib; sourceTree = "<group>"; };
+		BCFDA63A28BCA2000022B497 /* accomapny_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = accomapny_animation.json; sourceTree = "<group>"; };
+		BCFDA63C28BCA2000022B497 /* musicRoom_animation_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicRoom_animation_2.png; sourceTree = "<group>"; };
+		BCFDA63D28BCA2000022B497 /* live_animation_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = live_animation_0.png; sourceTree = "<group>"; };
+		BCFDA63E28BCA2000022B497 /* live_animation_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = live_animation_1.png; sourceTree = "<group>"; };
+		BCFDA63F28BCA2000022B497 /* musicRoom_animation_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicRoom_animation_3.png; sourceTree = "<group>"; };
+		BCFDA64028BCA2000022B497 /* musicRoom_animation_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicRoom_animation_1.png; sourceTree = "<group>"; };
+		BCFDA64128BCA2000022B497 /* live_animation_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = live_animation_3.png; sourceTree = "<group>"; };
+		BCFDA64228BCA2000022B497 /* live_animation_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = live_animation_2.png; sourceTree = "<group>"; };
+		BCFDA64328BCA2000022B497 /* musicRoom_animation_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicRoom_animation_0.png; sourceTree = "<group>"; };
+		BCFDA64428BCA2000022B497 /* accomapny_animation_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = accomapny_animation_3.png; sourceTree = "<group>"; };
+		BCFDA64528BCA2000022B497 /* accomapny_animation_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = accomapny_animation_2.png; sourceTree = "<group>"; };
+		BCFDA64628BCA2000022B497 /* accomapny_animation_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = accomapny_animation_0.png; sourceTree = "<group>"; };
+		BCFDA64728BCA2000022B497 /* accomapny_animation_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = accomapny_animation_1.png; sourceTree = "<group>"; };
+		BCFDA64828BCA2000022B497 /* musicRoom_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = musicRoom_animation.json; sourceTree = "<group>"; };
+		BCFDA64928BCA2000022B497 /* live_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = live_animation.json; sourceTree = "<group>"; };
+		BCFDA65A28BCAEB10022B497 /* HomePageBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomePageBodyView.h; sourceTree = "<group>"; };
+		BCFDA65B28BCAEB10022B497 /* HomePageBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomePageBodyView.m; sourceTree = "<group>"; };
+		BCFDA65D28BCAEC80022B497 /* HomeInformationBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeInformationBodyView.h; sourceTree = "<group>"; };
+		BCFDA65E28BCAEC80022B497 /* HomeInformationBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeInformationBodyView.m; sourceTree = "<group>"; };
+		BCFDA66028BDC3630022B497 /* TalentTeacherModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TalentTeacherModel.m; sourceTree = "<group>"; };
+		BCFDA66128BDC3640022B497 /* TalentTeacherModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TalentTeacherModel.h; sourceTree = "<group>"; };
 		BCFE53E42812765600AD6786 /* HomeHotAlbumCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotAlbumCell.h; sourceTree = "<group>"; };
 		BCFE53E52812765600AD6786 /* HomeHotAlbumCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotAlbumCell.m; sourceTree = "<group>"; };
 		BCFE53E62812765600AD6786 /* HomeHotAlbumCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotAlbumCell.xib; sourceTree = "<group>"; };
@@ -2661,6 +2756,8 @@
 			children = (
 				275FA1F427E7356A00CFEA2E /* HomeViewController.h */,
 				275FA1F327E7356A00CFEA2E /* HomeViewController.m */,
+				BCFDA61E28BC93C70022B497 /* NewHomeViewController.h */,
+				BCFDA61F28BC93C80022B497 /* NewHomeViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -2682,6 +2779,10 @@
 				BCFE53FD2814E1BE00AD6786 /* HomeLiveGroupModel.m */,
 				BCFE53FB2814E1BD00AD6786 /* HomeVideoGroupModel.h */,
 				BCFE53FE2814E1BE00AD6786 /* HomeVideoGroupModel.m */,
+				BC802DA528BC62390079E350 /* HomeHotMusicModel.h */,
+				BC802DA628BC62390079E350 /* HomeHotMusicModel.m */,
+				BCFDA66128BDC3640022B497 /* TalentTeacherModel.h */,
+				BCFDA66028BDC3630022B497 /* TalentTeacherModel.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -2689,24 +2790,22 @@
 		275FA1F627E7356A00CFEA2E /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BCFDA65928BCAE7C0022B497 /* HomePageView */,
+				BCFDA63328BCA1850022B497 /* RecentCourse */,
+				BCFDA62728BC99410022B497 /* HomeBanner */,
+				BCFDA63228BC9A230022B497 /* HomeButton */,
+				BCFDA62128BC94250022B497 /* HomeNav */,
+				BC802DB428BC8C110079E350 /* HotVideoCourse */,
+				BC802DB528BC8C1C0079E350 /* HotLiveCourse */,
+				BC802DAE28BC70030079E350 /* HotAlbum */,
+				BC802DA828BC62A20079E350 /* HotTalent */,
+				BC802D9F28BC5F650079E350 /* HotMusic */,
 				BC8C2C7B28265D8D00FBA5D5 /* KSNewsAlert.h */,
 				BC8C2C7C28265D8D00FBA5D5 /* KSNewsAlert.m */,
 				BC8C2C7D28265D8E00FBA5D5 /* KSNewsAlert.xib */,
 				BCBFDF3528110C660052AFE5 /* HomeNavView.h */,
 				BCBFDF3628110C660052AFE5 /* HomeNavView.m */,
 				BCBFDF3828110C6F0052AFE5 /* HomeNavView.xib */,
-				BCBFDF3A281156430052AFE5 /* HomeBannerView.h */,
-				BCBFDF3B281156430052AFE5 /* HomeBannerView.m */,
-				BCBFDF3D2811564C0052AFE5 /* HomeBannerView.xib */,
-				BCBFDF3F281157340052AFE5 /* HomeButtonView.h */,
-				BCBFDF40281157340052AFE5 /* HomeButtonView.m */,
-				BCBFDF422811573D0052AFE5 /* HomeButtonView.xib */,
-				BC40BA1E2812552300DEC0D1 /* KSHomeButton.h */,
-				BC40BA1C2812552200DEC0D1 /* KSHomeButton.m */,
-				BC40BA1D2812552200DEC0D1 /* KSHomeButton.xib */,
-				BCBFDF44281159990052AFE5 /* HomeHotAlbumView.h */,
-				BCBFDF45281159990052AFE5 /* HomeHotAlbumView.m */,
-				BCBFDF47281159A40052AFE5 /* HomeHotAlbumView.xib */,
 				BCBFDF4928115C6F0052AFE5 /* HomeHotCourseView.h */,
 				BCBFDF4A28115C6F0052AFE5 /* HomeHotCourseView.m */,
 				BCBFDF4C28115C7A0052AFE5 /* HomeHotCourseView.xib */,
@@ -2725,15 +2824,9 @@
 				BC40B9FB281177BD00DEC0D1 /* HomeInformationCell.h */,
 				BC40B9FC281177BD00DEC0D1 /* HomeInformationCell.m */,
 				BC40B9FD281177BD00DEC0D1 /* HomeInformationCell.xib */,
-				BC40BA0028117B0A00DEC0D1 /* HomeBannerCell.h */,
-				BC40BA0128117B0A00DEC0D1 /* HomeBannerCell.m */,
-				BC40BA0228117B0A00DEC0D1 /* HomeBannerCell.xib */,
 				BC40BA21281255F700DEC0D1 /* HomeCourseTipsView.h */,
 				BC40BA22281255F700DEC0D1 /* HomeCourseTipsView.m */,
 				BC40BA242812560100DEC0D1 /* HomeCourseTipsView.xib */,
-				BCFE53E42812765600AD6786 /* HomeHotAlbumCell.h */,
-				BCFE53E52812765600AD6786 /* HomeHotAlbumCell.m */,
-				BCFE53E62812765600AD6786 /* HomeHotAlbumCell.xib */,
 				BCFE53E92812897600AD6786 /* HomeLiveCouseCell.h */,
 				BCFE53EA2812897600AD6786 /* HomeLiveCouseCell.m */,
 				BCFE53EB2812897600AD6786 /* HomeLiveCouseCell.xib */,
@@ -2746,6 +2839,9 @@
 				BCD457A82864695F0010B493 /* PublicNoticeView.h */,
 				BCD457A92864695F0010B493 /* PublicNoticeView.m */,
 				BCD457AA286469600010B493 /* PublicNoticeView.xib */,
+				BCFDA61928BC90310022B497 /* HomePageHeaderView.h */,
+				BCFDA61A28BC90310022B497 /* HomePageHeaderView.m */,
+				BCFDA61C28BC903C0022B497 /* HomePageHeaderView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -4548,6 +4644,74 @@
 			path = TabbarAnimation;
 			sourceTree = "<group>";
 		};
+		BC802D9F28BC5F650079E350 /* HotMusic */ = {
+			isa = PBXGroup;
+			children = (
+				BC802D9528BC4FC40079E350 /* HomeHotMusicView.h */,
+				BC802D9628BC4FC40079E350 /* HomeHotMusicView.m */,
+				BC802D9828BC4FE90079E350 /* HomeHotMusicView.xib */,
+				BC802D9A28BC546B0079E350 /* HomeHotMusicCollectionCell.h */,
+				BC802D9B28BC546B0079E350 /* HomeHotMusicCollectionCell.m */,
+				BC802D9C28BC546B0079E350 /* HomeHotMusicCollectionCell.xib */,
+				BC802DA228BC5F8C0079E350 /* HomeHotMusicCellView.h */,
+				BC802DA028BC5F8C0079E350 /* HomeHotMusicCellView.m */,
+				BC802DA128BC5F8C0079E350 /* HomeHotMusicCellView.xib */,
+			);
+			path = HotMusic;
+			sourceTree = "<group>";
+		};
+		BC802DA828BC62A20079E350 /* HotTalent */ = {
+			isa = PBXGroup;
+			children = (
+				BC802DA928BC6EDA0079E350 /* HomeHotTalentView.h */,
+				BC802DAA28BC6EDA0079E350 /* HomeHotTalentView.m */,
+				BC802DAC28BC6EE40079E350 /* HomeHotTalentView.xib */,
+				BC802DAF28BC70370079E350 /* HomeHotTalentCell.h */,
+				BC802DB028BC70370079E350 /* HomeHotTalentCell.m */,
+				BC802DB128BC70370079E350 /* HomeHotTalentCell.xib */,
+			);
+			path = HotTalent;
+			sourceTree = "<group>";
+		};
+		BC802DAE28BC70030079E350 /* HotAlbum */ = {
+			isa = PBXGroup;
+			children = (
+				BCBFDF44281159990052AFE5 /* HomeHotAlbumView.h */,
+				BCBFDF45281159990052AFE5 /* HomeHotAlbumView.m */,
+				BCBFDF47281159A40052AFE5 /* HomeHotAlbumView.xib */,
+				BCFE53E42812765600AD6786 /* HomeHotAlbumCell.h */,
+				BCFE53E52812765600AD6786 /* HomeHotAlbumCell.m */,
+				BCFE53E62812765600AD6786 /* HomeHotAlbumCell.xib */,
+			);
+			path = HotAlbum;
+			sourceTree = "<group>";
+		};
+		BC802DB428BC8C110079E350 /* HotVideoCourse */ = {
+			isa = PBXGroup;
+			children = (
+				BC802DB628BC8C780079E350 /* HomeHotVideoCourseView.h */,
+				BC802DB728BC8C780079E350 /* HomeHotVideoCourseView.m */,
+				BC802DB928BC8C810079E350 /* HomeHotVideoCourseView.xib */,
+				BCFDA60F28BC8FCE0022B497 /* HomeHotVideoCell.h */,
+				BCFDA61028BC8FCE0022B497 /* HomeHotVideoCell.m */,
+				BCFDA61128BC8FCE0022B497 /* HomeHotVideoCell.xib */,
+			);
+			path = HotVideoCourse;
+			sourceTree = "<group>";
+		};
+		BC802DB528BC8C1C0079E350 /* HotLiveCourse */ = {
+			isa = PBXGroup;
+			children = (
+				BC802DBB28BC8E2C0079E350 /* HomeHotLiveCourseView.h */,
+				BC802DBC28BC8E2C0079E350 /* HomeHotLiveCourseView.m */,
+				BC802DBE28BC8E350079E350 /* HomeHotLiveCourseView.xib */,
+				BCFDA61428BC8FDE0022B497 /* HomeHotLiveCell.h */,
+				BCFDA61528BC8FDE0022B497 /* HomeHotLiveCell.m */,
+				BCFDA61628BC8FDE0022B497 /* HomeHotLiveCell.xib */,
+			);
+			path = HotLiveCourse;
+			sourceTree = "<group>";
+		};
 		BC8A4545283DC33400094BBB /* CloudEngine */ = {
 			isa = PBXGroup;
 			children = (
@@ -4936,12 +5100,6 @@
 				BCB9091528530E9C00F5FF69 /* KSShopCardView.h */,
 				BCB9091628530E9C00F5FF69 /* KSShopCardView.m */,
 				BCB9091828530EA500F5FF69 /* KSShopCardView.xib */,
-				BC802D9528BC4FC40079E350 /* HomeHotMusicView.h */,
-				BC802D9628BC4FC40079E350 /* HomeHotMusicView.m */,
-				BC802D9828BC4FE90079E350 /* HomeHotMusicView.xib */,
-				BC802D9A28BC546B0079E350 /* HomeHotMusicCollectionCell.h */,
-				BC802D9B28BC546B0079E350 /* HomeHotMusicCollectionCell.m */,
-				BC802D9C28BC546B0079E350 /* HomeHotMusicCollectionCell.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -5555,6 +5713,94 @@
 			path = images;
 			sourceTree = "<group>";
 		};
+		BCFDA62128BC94250022B497 /* HomeNav */ = {
+			isa = PBXGroup;
+			children = (
+				BCFDA62228BC94400022B497 /* HomeNavSearchView.h */,
+				BCFDA62328BC94400022B497 /* HomeNavSearchView.m */,
+				BCFDA62528BC94480022B497 /* HomeNavSearchView.xib */,
+			);
+			path = HomeNav;
+			sourceTree = "<group>";
+		};
+		BCFDA62728BC99410022B497 /* HomeBanner */ = {
+			isa = PBXGroup;
+			children = (
+				BCFDA62B28BC99410022B497 /* HomeBannerCell.h */,
+				BCFDA62828BC99410022B497 /* HomeBannerCell.m */,
+				BCFDA62A28BC99410022B497 /* HomeBannerCell.xib */,
+				BCFDA62C28BC99410022B497 /* HomeBannerView.h */,
+				BCFDA62928BC99410022B497 /* HomeBannerView.m */,
+				BCFDA62D28BC99410022B497 /* HomeBannerView.xib */,
+			);
+			path = HomeBanner;
+			sourceTree = "<group>";
+		};
+		BCFDA63228BC9A230022B497 /* HomeButton */ = {
+			isa = PBXGroup;
+			children = (
+				BCBFDF3F281157340052AFE5 /* HomeButtonView.h */,
+				BCBFDF40281157340052AFE5 /* HomeButtonView.m */,
+				BCBFDF422811573D0052AFE5 /* HomeButtonView.xib */,
+				BC40BA1E2812552300DEC0D1 /* KSHomeButton.h */,
+				BC40BA1C2812552200DEC0D1 /* KSHomeButton.m */,
+				BC40BA1D2812552200DEC0D1 /* KSHomeButton.xib */,
+			);
+			path = HomeButton;
+			sourceTree = "<group>";
+		};
+		BCFDA63328BCA1850022B497 /* RecentCourse */ = {
+			isa = PBXGroup;
+			children = (
+				BCFDA63928BCA2000022B497 /* AnimationSource */,
+				BCFDA63528BCA1C60022B497 /* HomeRecentCourseView.h */,
+				BCFDA63428BCA1C60022B497 /* HomeRecentCourseView.m */,
+				BCFDA63628BCA1C60022B497 /* HomeRecentCourseView.xib */,
+			);
+			path = RecentCourse;
+			sourceTree = "<group>";
+		};
+		BCFDA63928BCA2000022B497 /* AnimationSource */ = {
+			isa = PBXGroup;
+			children = (
+				BCFDA63B28BCA2000022B497 /* images */,
+				BCFDA63A28BCA2000022B497 /* accomapny_animation.json */,
+				BCFDA64928BCA2000022B497 /* live_animation.json */,
+				BCFDA64828BCA2000022B497 /* musicRoom_animation.json */,
+			);
+			path = AnimationSource;
+			sourceTree = "<group>";
+		};
+		BCFDA63B28BCA2000022B497 /* images */ = {
+			isa = PBXGroup;
+			children = (
+				BCFDA63C28BCA2000022B497 /* musicRoom_animation_2.png */,
+				BCFDA63D28BCA2000022B497 /* live_animation_0.png */,
+				BCFDA63E28BCA2000022B497 /* live_animation_1.png */,
+				BCFDA63F28BCA2000022B497 /* musicRoom_animation_3.png */,
+				BCFDA64028BCA2000022B497 /* musicRoom_animation_1.png */,
+				BCFDA64128BCA2000022B497 /* live_animation_3.png */,
+				BCFDA64228BCA2000022B497 /* live_animation_2.png */,
+				BCFDA64328BCA2000022B497 /* musicRoom_animation_0.png */,
+				BCFDA64428BCA2000022B497 /* accomapny_animation_3.png */,
+				BCFDA64528BCA2000022B497 /* accomapny_animation_2.png */,
+				BCFDA64628BCA2000022B497 /* accomapny_animation_0.png */,
+				BCFDA64728BCA2000022B497 /* accomapny_animation_1.png */,
+			);
+			path = images;
+			sourceTree = "<group>";
+		};
+		BCFDA65928BCAE7C0022B497 /* HomePageView */ = {
+			isa = PBXGroup;
+			children = (
+				BCFDA65A28BCAEB10022B497 /* HomePageBodyView.h */,
+				BCFDA65B28BCAEB10022B497 /* HomePageBodyView.m */,
+				BCFDA65D28BCAEC80022B497 /* HomeInformationBodyView.h */,
+				BCFDA65E28BCAEC80022B497 /* HomeInformationBodyView.m */,
+			);
+			path = HomePageView;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -5668,11 +5914,14 @@
 			files = (
 				BCC583CB28A9EC6400BAB4CF /* cloud_animation_7.png in Resources */,
 				BC71D1052881A2420010F14B /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
+				BC802DBF28BC8E350079E350 /* HomeHotLiveCourseView.xib in Resources */,
 				BC71D15D2887F9DB0010F14B /* launchAni.json in Resources */,
 				275E8AB827E18F8B00DD3F6E /* LaunchScreen.storyboard in Resources */,
 				275FA1EF27E7351900CFEA2E /* KSUpdateAlert.xib in Resources */,
+				BC802DBA28BC8C810079E350 /* HomeHotVideoCourseView.xib in Resources */,
 				277935AF27E324A90010E277 /* mss_browseLoading@3x.png in Resources */,
 				BC60E3CE287D552800B05441 /* DeleteAccountBodyView.xib in Resources */,
+				BCFDA61328BC8FCE0022B497 /* HomeHotVideoCell.xib in Resources */,
 				BCC583BE28A9EC6400BAB4CF /* cloud_animation_24.png in Resources */,
 				BC71D0FF2881A2420010F14B /* README.txt in Resources */,
 				BCB6359927F6D2AB00ACFDCF /* tick.wav in Resources */,
@@ -5691,6 +5940,7 @@
 				BC494A7D286958EC00CCD343 /* MusicRoomCourseInfoCell.xib in Resources */,
 				BC119235280ED97C00A716F7 /* CourseForLiveCell.xib in Resources */,
 				2723B62E27F157D500E0B90B /* GroupApplyChooseAllCell.xib in Resources */,
+				BCFDA61828BC8FDE0022B497 /* HomeHotLiveCell.xib in Resources */,
 				BC71D245288804CD0010F14B /* img_38.png in Resources */,
 				BC71D276288804CD0010F14B /* img_22.png in Resources */,
 				BCC583D128A9EC6400BAB4CF /* cloud_animation_2.png in Resources */,
@@ -5700,6 +5950,7 @@
 				275FA23A27E7356B00CFEA2E /* VefiBodyView.xib in Resources */,
 				BC119258280FA85300A716F7 /* HomeworkListCell.xib in Resources */,
 				BC542E5728409EC900633781 /* InstrumentChooseBottonView.xib in Resources */,
+				BC802DAD28BC6EE40079E350 /* HomeHotTalentView.xib in Resources */,
 				2723B63227F157D500E0B90B /* GroupSettingBodyView.xib in Resources */,
 				BCA1136228A3A2D0007FAFB9 /* bassmidi.txt in Resources */,
 				BC71D272288804CD0010F14B /* img_27.png in Resources */,
@@ -5715,12 +5966,15 @@
 				2723B62F27F157D500E0B90B /* ChatComplainBodyView.xib in Resources */,
 				BC71D254288804CD0010F14B /* img_4.png in Resources */,
 				2723B62127F157D500E0B90B /* NoticeEditBodyView.xib in Resources */,
+				BC802DB328BC70370079E350 /* HomeHotTalentCell.xib in Resources */,
 				BC5367C9283F6D72008428E8 /* HomeVideoCourseView.xib in Resources */,
 				BC71D25F288804CD0010F14B /* img_45.png in Resources */,
 				2723B66127F15CFB00E0B90B /* SettingBodyView.xib in Resources */,
 				BC11928C280FB44300A716F7 /* HomeworkVideoView.xib in Resources */,
+				BCFDA64D28BCA2000022B497 /* live_animation_1.png in Resources */,
 				BCD457A2286313D70010B493 /* NotiferNavView.xib in Resources */,
 				275E8AB527E18F8B00DD3F6E /* Assets.xcassets in Resources */,
+				BCFDA65028BCA2000022B497 /* live_animation_3.png in Resources */,
 				BC71D252288804CD0010F14B /* img_29.png in Resources */,
 				BC71D24D288804CD0010F14B /* img_12.png in Resources */,
 				BC119275280FB01100A716F7 /* AccompanyHomeworkCell.xib in Resources */,
@@ -5762,8 +6016,11 @@
 				BCBFDF5228115DA40052AFE5 /* HomeIntroduceView.xib in Resources */,
 				BC71D277288804CD0010F14B /* img_36.png in Resources */,
 				BC71D250288804CD0010F14B /* img_6.png in Resources */,
+				BCFDA61D28BC903C0022B497 /* HomePageHeaderView.xib in Resources */,
 				BC8A45AF283DC33400094BBB /* SoundCheckView.xib in Resources */,
+				BCFDA63828BCA1C60022B497 /* HomeRecentCourseView.xib in Resources */,
 				BC119270280FAF7D00A716F7 /* AccompanyCourseInfoCell.xib in Resources */,
+				BCFDA65528BCA2000022B497 /* accomapny_animation_0.png in Resources */,
 				BCC583C828A9EC6400BAB4CF /* cloud_animation_10.png in Resources */,
 				BCC583C328A9EC6400BAB4CF /* cloud_animation_14.png in Resources */,
 				BC8C2C5B2823F57100FBA5D5 /* AddressBottomView.xib in Resources */,
@@ -5785,12 +6042,15 @@
 				BC40B9FA2811768400DEC0D1 /* HotInformationHeadView.xib in Resources */,
 				BC27A06E280FF56C00F91E27 /* AccompanyEvaluateCell.xib in Resources */,
 				BC71D27B288804CD0010F14B /* img_21.png in Resources */,
+				BCFDA65628BCA2000022B497 /* accomapny_animation_1.png in Resources */,
 				2723B66327F15CFC00E0B90B /* ModifyNameBodyView.xib in Resources */,
 				BC71D255288804CD0010F14B /* img_5.png in Resources */,
 				BCB635B327F6E1A600ACFDCF /* LiveRoomBottomView.xib in Resources */,
 				BCB6348327F6D29600ACFDCF /* LiveSeatApplyView.xib in Resources */,
+				BCFDA65328BCA2000022B497 /* accomapny_animation_3.png in Resources */,
 				BC8C2C612823F57100FBA5D5 /* MyAddressListCell.xib in Resources */,
 				2723B66A27F15CFC00E0B90B /* PhoneChangeBodyView.xib in Resources */,
+				BCFDA65728BCA2000022B497 /* musicRoom_animation.json in Resources */,
 				BC71D278288804CD0010F14B /* img_20.png in Resources */,
 				BC71D247288804CD0010F14B /* img_0.png in Resources */,
 				27F9032D27E87C2E00C08A19 /* KSNetworkAlert.xib in Resources */,
@@ -5807,6 +6067,7 @@
 				BC71D12F2887A4DC0010F14B /* student_refresh.json in Resources */,
 				BC11929D280FD2EF00A716F7 /* HomeworkBottomView.xib in Resources */,
 				BC7663182827E49900C91A1D /* NotiferMessageCell.xib in Resources */,
+				BCFDA64B28BCA2000022B497 /* musicRoom_animation_2.png in Resources */,
 				BCC583C728A9EC6400BAB4CF /* cloud_animation_12.png in Resources */,
 				BC71D26D288804CD0010F14B /* img_18.png in Resources */,
 				BCB6348127F6D29600ACFDCF /* LiveSeatApplyCell.xib in Resources */,
@@ -5814,19 +6075,21 @@
 				2723B62D27F157D500E0B90B /* GroupApplyMemberCell.xib in Resources */,
 				BCB6347427F6D29600ACFDCF /* BaseEmoji.plist in Resources */,
 				BCB9091928530EA500F5FF69 /* KSShopCardView.xib in Resources */,
+				BCFDA64F28BCA2000022B497 /* musicRoom_animation_1.png in Resources */,
 				BC40BA252812560100DEC0D1 /* HomeCourseTipsView.xib in Resources */,
 				BC71D270288804CD0010F14B /* img_32.png in Resources */,
 				27F9032E27E87C2E00C08A19 /* DeviceCheckView.xib in Resources */,
 				275FA23727E7356B00CFEA2E /* LoginBodyView.xib in Resources */,
+				BCFDA65428BCA2000022B497 /* accomapny_animation_2.png in Resources */,
 				BC71D273288804CD0010F14B /* img_33.png in Resources */,
 				BCC583C628A9EC6400BAB4CF /* cloud_animation_13.png in Resources */,
 				BCC583C428A9EC6400BAB4CF /* cloud_animation_16.png in Resources */,
+				BCFDA65828BCA2000022B497 /* live_animation.json in Resources */,
 				BC71D259288804CD0010F14B /* img_48.png in Resources */,
 				BCB6355927F6D2A300ACFDCF /* class_stop.mp3 in Resources */,
 				BC71D274288804CD0010F14B /* img_37.png in Resources */,
 				BC6744E32892795500BB8D03 /* Boat_Loader.json in Resources */,
 				BCFE53E82812765600AD6786 /* HomeHotAlbumCell.xib in Resources */,
-				BC40BA0428117B0A00DEC0D1 /* HomeBannerCell.xib in Resources */,
 				BC119239280ED98E00A716F7 /* AccompanyCourseCell.xib in Resources */,
 				BC27A076280FF61300F91E27 /* AccompanyDetailBottomView.xib in Resources */,
 				BCBFDF4D28115C7A0052AFE5 /* HomeHotCourseView.xib in Resources */,
@@ -5839,6 +6102,7 @@
 				2779358F27E324A80010E277 /* WMPlayer.bundle in Resources */,
 				BC71D248288804CD0010F14B /* img_39.png in Resources */,
 				BC11926C280FAF5900A716F7 /* AccompanyAlertView.xib in Resources */,
+				BC802DA428BC5F8D0079E350 /* HomeHotMusicCellView.xib in Resources */,
 				2723B66F27F15CFC00E0B90B /* AboutUsBodyView.xib in Resources */,
 				275FA23827E7356B00CFEA2E /* FirstSettingBodyView.xib in Resources */,
 				BC542E622840A60E00633781 /* UseBodyView.xib in Resources */,
@@ -5861,13 +6125,14 @@
 				BCA353F12859BB2900377661 /* MusicRoomCourseCell.xib in Resources */,
 				BCC583B828A9EC6400BAB4CF /* cloud_animation_23.png in Resources */,
 				2723B66E27F15CFC00E0B90B /* PhoneCheckBodyView.xib in Resources */,
+				BCFDA65128BCA2000022B497 /* live_animation_2.png in Resources */,
 				BC119217280ED6A900A716F7 /* MyLessonSearchView.xib in Resources */,
 				BCC583BD28A9EC6400BAB4CF /* cloud_animation_25.png in Resources */,
 				BCC583BC28A9EC6400BAB4CF /* cloud_animation_19.png in Resources */,
-				BCBFDF3E2811564C0052AFE5 /* HomeBannerView.xib in Resources */,
 				BC8A459F283DC33400094BBB /* SettingPageView.xib in Resources */,
 				BC71D262288804CD0010F14B /* img_54.png in Resources */,
 				BC8C2C5A2823F57100FBA5D5 /* areainfo.json in Resources */,
+				BCFDA64E28BCA2000022B497 /* musicRoom_animation_3.png in Resources */,
 				BCC583CA28A9EC6400BAB4CF /* cloud_animation_6.png in Resources */,
 				2723B5C527F157B100E0B90B /* ContractListCell.xib in Resources */,
 				BCBFDF48281159A40052AFE5 /* HomeHotAlbumView.xib in Resources */,
@@ -5875,6 +6140,7 @@
 				27F9033727E87C8B00C08A19 /* MineNavView.xib in Resources */,
 				BC8A45AB283DC33400094BBB /* TrackChooseView.xib in Resources */,
 				BCB9FA47286EDCD7005D766B /* KSTipsAlert.xib in Resources */,
+				BCFDA64C28BCA2000022B497 /* live_animation_0.png in Resources */,
 				BC542E40284079E300633781 /* UserAuthBodyView.xib in Resources */,
 				BC542E5528409EC900633781 /* InstrumentHeaderView.xib in Resources */,
 				BC119215280ED6A900A716F7 /* MyLiveCourseCell.xib in Resources */,
@@ -5885,6 +6151,7 @@
 				BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */,
 				BC71D26F288804CD0010F14B /* img_24.png in Resources */,
 				BC71D26B288804CD0010F14B /* img_8.png in Resources */,
+				BCFDA62628BC94480022B497 /* HomeNavSearchView.xib in Resources */,
 				BC71D0F42881A2420010F14B /* UMCommonLog.bundle in Resources */,
 				BCB6359D27F6D2AB00ACFDCF /* tock.wav in Resources */,
 				BCA1135D28A3A2BB007FAFB9 /* bass.txt in Resources */,
@@ -5892,10 +6159,14 @@
 				BC71D24B288804CD0010F14B /* img_2.png in Resources */,
 				BC0D1F72281015B000C5D9E5 /* VideoCourseCell.xib in Resources */,
 				BC8A45B1283DC33400094BBB /* CloudHelpView.xib in Resources */,
+				BCFDA64A28BCA2000022B497 /* accomapny_animation.json in Resources */,
+				BCFDA63028BC99410022B497 /* HomeBannerCell.xib in Resources */,
 				BC71D25E288804CD0010F14B /* img_51.png in Resources */,
+				BCFDA63128BC99410022B497 /* HomeBannerView.xib in Resources */,
 				BC11927B280FB07F00A716F7 /* AccompanyArrangeCell.xib in Resources */,
 				BC40B9FF281177BD00DEC0D1 /* HomeInformationCell.xib in Resources */,
 				BC8A45B3283DC33400094BBB /* CloudFeedbackView.xib in Resources */,
+				BCFDA65228BCA2000022B497 /* musicRoom_animation_0.png in Resources */,
 				BCDE35882897B40000A9A560 /* shareImage@2x.png in Resources */,
 				BC802D9E28BC546B0079E350 /* HomeHotMusicCollectionCell.xib in Resources */,
 				275E8AB327E18F8800DD3F6E /* Main.storyboard in Resources */,
@@ -6068,6 +6339,7 @@
 				277935CB27E324A90010E277 /* TAAbstractDotView.m in Sources */,
 				2723B5C627F157B100E0B90B /* GroupListViewCell.m in Sources */,
 				BCB6356E27F6D2A300ACFDCF /* ClassSongMessage.m in Sources */,
+				BCFDA66228BDC3640022B497 /* TalentTeacherModel.m in Sources */,
 				BC8B6DC92856CFB800866917 /* KSDocument.m in Sources */,
 				275FA1E927E7351900CFEA2E /* KSNetTypeManager.m in Sources */,
 				2723B66B27F15CFC00E0B90B /* PhoneCheckBodyView.m in Sources */,
@@ -6077,6 +6349,7 @@
 				BCFE53F628128A9600AD6786 /* TeacherShowCell.m in Sources */,
 				2779357B27E324A70010E277 /* ShopButton.m in Sources */,
 				2723B61E27F157D500E0B90B /* GroupNoticeEditController.m in Sources */,
+				BCFDA63728BCA1C60022B497 /* HomeRecentCourseView.m in Sources */,
 				BCB6346427F6D29600ACFDCF /* KSLiveChatroomSeatApply.m in Sources */,
 				BC0212FE27FC66AA0040569F /* InstrumentMessageModel.m in Sources */,
 				BCB6359F27F6D2AB00ACFDCF /* ClassTitleView.m in Sources */,
@@ -6127,6 +6400,7 @@
 				BCB6357227F6D2A300ACFDCF /* KSIMService.m in Sources */,
 				BC50171227FC0D5600F8BCBC /* SubjectChooseViewController.m in Sources */,
 				2779359727E324A80010E277 /* TZVideoPlayerController.m in Sources */,
+				BC802DBD28BC8E2C0079E350 /* HomeHotLiveCourseView.m in Sources */,
 				275FA22E27E7356B00CFEA2E /* MineViewController.m in Sources */,
 				BC8A4597283DC33400094BBB /* CAudioUnit.m in Sources */,
 				2779354627E324A60010E277 /* UIView+Animation.m in Sources */,
@@ -6192,6 +6466,7 @@
 				2779355327E324A70010E277 /* VoNetworking+RequestManager.m in Sources */,
 				BCB6347327F6D29600ACFDCF /* KSChatEmojiCollectionCell.m in Sources */,
 				BC8A4593283DC33400094BBB /* KSCloudViewController.m in Sources */,
+				BCFDA65C28BCAEB10022B497 /* HomePageBodyView.m in Sources */,
 				2723B62327F157D500E0B90B /* LFPopupMenuDefaultConfig.m in Sources */,
 				2779351627E324A60010E277 /* NSMutableArray+KSSafe.m in Sources */,
 				BC119247280EDA5800A716F7 /* kSJXCollectionView.m in Sources */,
@@ -6233,10 +6508,12 @@
 				2779353E27E324A60010E277 /* UIDevice+TFDevice.m in Sources */,
 				2723B5C027F157B100E0B90B /* ChatAddressHeaderView.m in Sources */,
 				2723B68127F15D3D00E0B90B /* ModifyNameViewController.m in Sources */,
+				BCFDA62028BC93C80022B497 /* NewHomeViewController.m in Sources */,
 				2779359927E324A80010E277 /* NSBundle+TZImagePicker.m in Sources */,
 				2779358E27E324A80010E277 /* WMPlayerModel.m in Sources */,
 				2779354E27E324A70010E277 /* KSAudioSessionManager.m in Sources */,
 				BC8B6E7D285869B500866917 /* KSUMShareManager.m in Sources */,
+				BC802DAB28BC6EDA0079E350 /* HomeHotTalentView.m in Sources */,
 				BCBFDF41281157340052AFE5 /* HomeButtonView.m in Sources */,
 				2779358127E324A80010E277 /* StateView.m in Sources */,
 				2779358C27E324A80010E277 /* AnimationContoller.m in Sources */,
@@ -6281,6 +6558,7 @@
 				BC8A45B7283DC33500094BBB /* NoWiredTipsAlert.m in Sources */,
 				BCB6346627F6D29600ACFDCF /* KSLiveChatroomUserQuit.m in Sources */,
 				BCB6356D27F6D2A300ACFDCF /* RoomMember.m in Sources */,
+				BCFDA61B28BC90310022B497 /* HomePageHeaderView.m in Sources */,
 				277935B427E324A90010E277 /* FSCalendarDelegationProxy.m in Sources */,
 				2723B5BB27F157B100E0B90B /* ChatAddressBodyView.m in Sources */,
 				2779357427E324A70010E277 /* StoreButton.m in Sources */,
@@ -6367,6 +6645,7 @@
 				BCB6357127F6D2A300ACFDCF /* RTCService.m in Sources */,
 				2723B62427F157D500E0B90B /* NoticeEditBodyView.m in Sources */,
 				BCB6354327F6D2A300ACFDCF /* RecentSharedWhiteboardCell.m in Sources */,
+				BCFDA65F28BCAEC80022B497 /* HomeInformationBodyView.m in Sources */,
 				BC0D1F71281015B000C5D9E5 /* VideoCourseCell.m in Sources */,
 				2779352F27E324A60010E277 /* UIView+Hints.m in Sources */,
 				BC542E612840A60E00633781 /* UseBodyView.m in Sources */,
@@ -6398,6 +6677,7 @@
 				BCB908E22850B07300F5FF69 /* KSChatMusicMessage.m in Sources */,
 				BC119223280ED6F500A716F7 /* AccompanyLessonModel.m in Sources */,
 				277935B227E324A90010E277 /* UIView+MSSLayout.m in Sources */,
+				BCFDA61228BC8FCE0022B497 /* HomeHotVideoCell.m in Sources */,
 				275FA1E427E7351900CFEA2E /* KSWebNavView.m in Sources */,
 				2779356D27E324A70010E277 /* StoreShopCaterview.m in Sources */,
 				BC119267280FA92700A716F7 /* HomeworkDetailViewController.m in Sources */,
@@ -6407,9 +6687,11 @@
 				277935D327E324A90010E277 /* ALCalendarPicker.m in Sources */,
 				BC542E5828409EC900633781 /* InstrumentChooseCell.m in Sources */,
 				BCB6359427F6D2AB00ACFDCF /* NewClassRoomViewController.m in Sources */,
+				BCFDA62E28BC99410022B497 /* HomeBannerCell.m in Sources */,
 				BCB6356027F6D2A300ACFDCF /* WhiteboardMessage.m in Sources */,
 				2779354F27E324A70010E277 /* VoLRUManager.m in Sources */,
 				2779356727E324A70010E277 /* UIColor+Hex.m in Sources */,
+				BC802DA728BC62390079E350 /* HomeHotMusicModel.m in Sources */,
 				BCB6345E27F6D29600ACFDCF /* KSLiveChatroomLeave.m in Sources */,
 				BC11929B280FD2E800A716F7 /* HomeworkBottomView.m in Sources */,
 				BC494A77286952B500CCD343 /* MusicRoomDetailViewController.m in Sources */,
@@ -6463,9 +6745,11 @@
 				BCFE53F12812898700AD6786 /* HomeVideoCourseCell.m in Sources */,
 				BCB908F02850B08D00F5FF69 /* KSChatLiveShareCell.m in Sources */,
 				277935C027E324A90010E277 /* FSCalendarTransitionCoordinator.m in Sources */,
+				BC802DA328BC5F8D0079E350 /* HomeHotMusicCellView.m in Sources */,
 				BC494A8028696BC300CCD343 /* MusicRoomListModel.m in Sources */,
 				BCB9FA4A286EDE1A005D766B /* BaseAlertView.m in Sources */,
 				2779355B27E324A70010E277 /* KSStatusView.m in Sources */,
+				BCFDA61728BC8FDE0022B497 /* HomeHotLiveCell.m in Sources */,
 				2779355227E324A70010E277 /* VoMemoryCache.m in Sources */,
 				BCDE358E289A7D8700A9A560 /* KSGroupTagImageView.m in Sources */,
 				2779352A27E324A60010E277 /* UIView+Dealloc.m in Sources */,
@@ -6490,6 +6774,7 @@
 				2723B5BE27F157B100E0B90B /* ChatNavView.m in Sources */,
 				BC02381528685064005560CA /* KSLiveBadNetView.m in Sources */,
 				BC119218280ED6A900A716F7 /* MyLessonSearchView.m in Sources */,
+				BC802DB228BC70370079E350 /* HomeHotTalentCell.m in Sources */,
 				BCB6354C27F6D2A300ACFDCF /* VideoMaskView.m in Sources */,
 				2723B66D27F15CFC00E0B90B /* ModifyNameBodyView.m in Sources */,
 				BC8A459D283DC33400094BBB /* KSParseMessageModel.m in Sources */,
@@ -6504,6 +6789,7 @@
 				277935B027E324A90010E277 /* MSSBrowseActionSheetCell.m in Sources */,
 				2779358827E324A80010E277 /* NSObject+Archiving.m in Sources */,
 				2779354427E324A60010E277 /* NSObject+AutoProperty.m in Sources */,
+				BCFDA62428BC94400022B497 /* HomeNavSearchView.m in Sources */,
 				275FA23427E7356B00CFEA2E /* UserInfo.m in Sources */,
 				27F9033A27E87FD500C08A19 /* MineBodyView.m in Sources */,
 				275FA1EC27E7351900CFEA2E /* BaseViewController.m in Sources */,
@@ -6530,12 +6816,10 @@
 				BCB6356F27F6D2A300ACFDCF /* Classroom.m in Sources */,
 				2779351B27E324A60010E277 /* UIControl+ButtonAction.m in Sources */,
 				BCB6354F27F6D2A300ACFDCF /* KSWhiteboardControl.m in Sources */,
-				BCBFDF3C281156430052AFE5 /* HomeBannerView.m in Sources */,
 				27F9032F27E87C2E00C08A19 /* AudioPlayManager.m in Sources */,
 				2779357C27E324A70010E277 /* NSString+MD5.m in Sources */,
 				2779355D27E324A70010E277 /* KSHoldButton.m in Sources */,
 				2723B62027F157D500E0B90B /* GroupNoticeCell.m in Sources */,
-				BC40BA0328117B0A00DEC0D1 /* HomeBannerCell.m in Sources */,
 				BCB6356327F6D2A300ACFDCF /* RoleChangedMessage.m in Sources */,
 				277935A627E324A80010E277 /* MSSBrowseLocalViewController.m in Sources */,
 				BCB6348427F6D29600ACFDCF /* KSChatroomTextCell.m in Sources */,
@@ -6578,6 +6862,7 @@
 				275FA1E527E7351900CFEA2E /* KSAccompanyWebViewController.m in Sources */,
 				BC8A45A5283DC33400094BBB /* StaffImageDisplayView.m in Sources */,
 				BC11923A280ED98E00A716F7 /* AccompanyCourseCell.m in Sources */,
+				BCFDA62F28BC99410022B497 /* HomeBannerView.m in Sources */,
 				BC119264280FA90100A716F7 /* HomeworkListModel.m in Sources */,
 				2779354A27E324A60010E277 /* UIImage+Resize.m in Sources */,
 				2723B5A327F1578300E0B90B /* KSChatListViewController.m in Sources */,
@@ -6590,6 +6875,7 @@
 				BC40BA1828124D3D00DEC0D1 /* NotiferMessageViewController.m in Sources */,
 				275FA22D27E7356B00CFEA2E /* ChatViewController.m in Sources */,
 				BCB908EE2850B08D00F5FF69 /* ShareLiveCellContentView.m in Sources */,
+				BC802DB828BC8C780079E350 /* HomeHotVideoCourseView.m in Sources */,
 				BCB6354127F6D2A300ACFDCF /* VideoListCell.m in Sources */,
 				2723B5A427F1578300E0B90B /* KSChatConversationViewController.m in Sources */,
 				BC8A45A2283DC33400094BBB /* SettingPageView.m in Sources */,

BIN
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate


+ 84 - 4
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -334,8 +334,8 @@
             filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "379"
-            endingLineNumber = "379"
+            startingLineNumber = "388"
+            endingLineNumber = "388"
             landmarkName = "-requestNotice"
             landmarkType = "7">
          </BreakpointContent>
@@ -350,8 +350,8 @@
             filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "631"
-            endingLineNumber = "631"
+            startingLineNumber = "640"
+            endingLineNumber = "640"
             landmarkName = "-requestTeacherStyle"
             landmarkType = "7">
          </BreakpointContent>
@@ -514,6 +514,38 @@
             endingLineNumber = "754"
             landmarkName = "-updateVideoViewContainer"
             landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "84DE9E35-E62D-4C6B-AB45-37F619865FD1 - 8f05af7ec6d73a58"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "-[LiveVideoRoomViewController updateVideoViewContainer]"
+                  moduleName = "KulexiuForStudent"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "754"
+                  endingLineNumber = "754"
+                  offsetFromSymbolStart = "1920">
+               </Location>
+               <Location
+                  uuid = "84DE9E35-E62D-4C6B-AB45-37F619865FD1 - 8f05af7ec6d73a58"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "-[LiveVideoRoomViewController updateVideoViewContainer]"
+                  moduleName = "KulexiuForStudent"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "754"
+                  endingLineNumber = "754"
+                  offsetFromSymbolStart = "1924">
+               </Location>
+            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -548,5 +580,53 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "09BECFEC-866D-4A1F-B953-C759DA4F4E13"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Home/View/HomeNavView.h"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "10"
+            endingLineNumber = "10"
+            landmarkName = "NAVACTION"
+            landmarkType = "16">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "DB683E1B-1189-43D8-B1E5-275D3E85EA08"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "467"
+            endingLineNumber = "467"
+            landmarkName = "-requestCourseInfo"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "0C679378-30FF-4407-88BD-9771BEFD40F2"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "554"
+            endingLineNumber = "554"
+            landmarkName = "-requestTalentSource"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


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


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


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

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

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


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


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


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


+ 25 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h

@@ -614,6 +614,31 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)homeNewsList:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-student/music/sheet/list
+
+/// 首页推荐曲谱查询
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeMusicListRequest:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /api-student/teacher/queryHotTeacherList
+
+/// 推荐老师列表
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryHotTeacherListRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// liveRoom/queryTeacherLivingList
+
+/// 查询临时直播老师列表
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryTeacherLivingListRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 #pragma mark ---- 地址服务
 // /api-mall-portal/member/address/list
 

+ 42 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m

@@ -1277,6 +1277,48 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
+// /api-student/music/sheet/list
+
+/// 首页推荐曲谱查询
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeMusicListRequest:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/music/sheet/list"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@(NO) forKey:@"myself"];
+    [parm setValue:@"PASS" forKey:@"auditStatus"];
+    [parm setValue:@(1) forKey:@"page"];
+    [parm setValue:@(20) forKey:@"rows"];
+    [parm setValue:version forKey:@"version"];
+    [parm setValue:@"ios-student" forKey:@"platform"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-student/teacher/queryHotTeacherList
+
+/// 推荐老师列表
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryHotTeacherListRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/teacher/queryHotTeacherList"];
+    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+}
+
+// liveRoom/queryTeacherLivingList
+
+/// 查询临时直播老师列表
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)queryTeacherLivingListRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/liveRoom/queryTeacherLivingList"];
+    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+}
+
 #pragma mark ---- 地址服务
 // /api-mall-portal/member/address/list
 

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/KSTabBarViewController.m

@@ -25,7 +25,7 @@
 }
 
 - (void)configItems {
-    NSArray *controllerArray = @[@"HomeViewController",@"CourseViewController",@"ChatViewController",@"ShopMallViewController",@"MineViewController"];
+    NSArray *controllerArray = @[@"NewHomeViewController",@"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"];

+ 4 - 4
KulexiuForStudent/KulexiuForStudent/Common/Base/KSUploadManager.m

@@ -62,7 +62,7 @@
     if (faliure) {
         self.faliureCallback = faliure;
     }
-    NSString *uploadFileName = [NSString stringWithFormat:@"%@%@%@",[NSDate getCurrentTimestamp], fileName,[UIImage typeForImageData:imageData]];
+    NSString *uploadFileName = [NSString stringWithFormat:@"%@-%@%@%@",UserDefault(UIDKey),[NSDate getCurrentTimestamp], fileName,[UIImage typeForImageData:imageData]];
     NSString *keyValue = uploadFileName;
     [KSNetworkingManager getUploadSignRequest:KS_POST fileName:uploadFileName keyName:keyValue bucketName:self.bucketName success:^(NSDictionary * _Nonnull dic) {
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
@@ -120,7 +120,7 @@
     NSMutableArray *fileNameArray = [NSMutableArray array];
     for (NSInteger i = 0 ; i < fileDataArray.count; i++) {
         NSData *fileData = fileDataArray[i];
-        NSString *uploadFileName = [NSString stringWithFormat:@"%@%zd%@%@",[NSDate getCurrentTimestamp], i,fileName,[UIImage typeForImageData:fileData]];
+        NSString *uploadFileName = [NSString stringWithFormat:@"%zd-%@-%@%@%@",i,UserDefault(UIDKey),[NSDate getCurrentTimestamp],fileName,[UIImage typeForImageData:fileData]];
         [fileNameArray addObject:uploadFileName];
     }
     
@@ -205,7 +205,7 @@
     if (uploadProgress) {
         self.uploadProgress = uploadProgress;
     }
-    NSString *uploadFileName = [NSString stringWithFormat:@"%@%@%@",[NSDate getCurrentTimestamp], fileName,fileSuffix];
+    NSString *uploadFileName = [NSString stringWithFormat:@"%@-%@%@%@",UserDefault(UIDKey),[NSDate getCurrentTimestamp], fileName,fileSuffix];
     NSString *keyValue = uploadFileName;
     self.videoLinkUrl = [NSString stringWithFormat:@"https://%@/%@",self.uploadBucket,uploadFileName];
     [KSNetworkingManager getUploadSignRequest:KS_POST fileName:uploadFileName keyName:keyValue bucketName:self.bucketName success:^(NSDictionary * _Nonnull dic) {
@@ -252,7 +252,7 @@
     if (faliure) {
         self.faliureCallback = faliure;
     }
-    NSString *uploadFileName = [NSString stringWithFormat:@"%@%@%@",[NSDate getCurrentTimestamp], fileName,fileSuffix];
+    NSString *uploadFileName = [NSString stringWithFormat:@"%@-%@%@%@",UserDefault(UIDKey),[NSDate getCurrentTimestamp], fileName,fileSuffix];
     NSString *keyValue = uploadFileName;
     [KSNetworkingManager getUploadSignRequest:KS_POST fileName:uploadFileName keyName:keyValue bucketName:self.bucketName success:^(NSDictionary * _Nonnull dic) {
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {

+ 14 - 14
KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch

@@ -117,24 +117,24 @@ shouldPrevent = NO; \
 
 //#ifdef DEBUG
 
-//#define hostURL (@"https://dev.colexiu.com")
-//#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
-//#define WEBHOST (@"https://dev.colexiu.com/student")
-//#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
-//#define JSPUSH_ENVIRONMENT (NO)
-//#define RCIM_KEY (@"0vnjpoad0jbdz")
-//#define SUBMIT_UUID (YES)
+#define hostURL (@"https://dev.colexiu.com")
+#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
+#define WEBHOST (@"https://dev.colexiu.com/student")
+#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
+#define JSPUSH_ENVIRONMENT (NO)
+#define RCIM_KEY (@"0vnjpoad0jbdz")
+#define SUBMIT_UUID (YES)
 
 
 //#else
 
-#define hostURL (@"https://online.colexiu.com")
-#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
-#define WEBHOST (@"https://online.colexiu.com/student")
-#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
-#define JSPUSH_ENVIRONMENT (YES)
-#define RCIM_KEY (@"e5t4ouvpe42pa")
-#define SUBMIT_UUID (YES)
+//#define hostURL (@"https://online.colexiu.com")
+//#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
+//#define WEBHOST (@"https://online.colexiu.com/student")
+//#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
+//#define JSPUSH_ENVIRONMENT (YES)
+//#define RCIM_KEY (@"e5t4ouvpe42pa")
+//#define SUBMIT_UUID (YES)
 
 //#endif
 

+ 3 - 3
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/NSDate+Extension.m

@@ -699,9 +699,9 @@
 // get current timestamp sice 1970
 + (NSString *)getCurrentTimestamp {
     // 以下这个结果是10位数,interval得出的数会有6位小数,应该是精确到微秒
-    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] *1000;
-    NSInteger time = interval;
-    NSString *timestamp = [NSString stringWithFormat:@"%zd",time];
+    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] *1000000;
+    NSString *time = [[NSString stringWithFormat:@"%f",interval] replaceAll:@"." WithString:@"-"];
+    NSString *timestamp = time;
     return timestamp;
 }
 

+ 68 - 2
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m

@@ -15,7 +15,6 @@
 #import "TYPageControl.h"
 #import "HomeBannerCell.h"
 
-#import "HomeBannerView.h"
 #import "HomeBannerCell.h"
 #import "HomeButtonView.h"
 #import "KSHomeButton.h"
@@ -58,6 +57,9 @@
 #import "NoticeSourceModel.h"
 #import "MusicRoomDetailViewController.h"
 
+#import "HomeHotMusicView.h"
+#import "HomeHotMusicCollectionCell.h"
+
 #define BUTTONWIDTH (65)
 #define BUTTONHEIGHT (80)
 
@@ -133,6 +135,14 @@
 @property (nonatomic, strong) HomeMessageModel *flashModel;
 
 @property (nonatomic, strong) RecentCourseModel *recentCourseModel;
+
+
+@property (nonatomic, strong) HomeHotMusicView *hotMusicView;
+
+@property (nonatomic, strong) UICollectionView *musicCollectionView; // 曲谱容器
+
+@property (nonatomic, strong) NSMutableArray *musicArray; // 曲谱数据
+
 @end
 
 @implementation HomeViewController
@@ -166,7 +176,6 @@
     }
     
     [self requestUnreadCount];
-    
 }
 
 - (void)requestUnreadCount {
@@ -1520,6 +1529,63 @@
     appDelegate.isShowFlashAlert = 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) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _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;
+}
+
+- (NSMutableArray *)musicArray {
+    if (!_musicArray) {
+        _musicArray = [NSMutableArray array];
+    }
+    return _musicArray;
+}
+
 /*
 #pragma mark - Navigation
 

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/NewHomeViewController.h

@@ -0,0 +1,22 @@
+//
+//  NewHomeViewController.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "KSBaseViewController.h"
+#import "JXCategoryTitleView.h"
+#import "JXPagerView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NewHomeViewController : KSBaseViewController
+
+@property (nonatomic, strong) JXPagerView *pagerView;
+@property (nonatomic, strong, readonly) JXCategoryTitleView *categoryView;
+@property (nonatomic, strong) NSArray <NSString *> *titles;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 1569 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m

@@ -0,0 +1,1569 @@
+//
+//  NewHomeViewController.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "NewHomeViewController.h"
+#import "KSBaseWKWebViewController.h"
+#import "NotiferMessageViewController.h"
+#import "HomeNavSearchView.h"
+#import "KSScanViewController.h"
+#import "HomeBannerView.h"
+#import <UIButton+WebCache.h>
+#import "TYCyclePagerView.h"
+#import "TYPageControl.h"
+#import "HomeBannerCell.h"
+
+#import "HomeBannerCell.h"
+#import "HomeButtonView.h"
+#import "KSHomeButton.h"
+
+#import "PublicNoticeView.h"
+#import "SDCycleScrollView.h"
+#import "NoticeSourceModel.h"
+
+#import "AppDelegate.h"
+#import "StudentInfoModel.h"
+#import "UserInfoManager.h"
+
+#import "HomeRecentCourseView.h"
+#import "AccompanyDetailViewController.h"
+#import "MusicRoomDetailViewController.h"
+
+#import "HomeHotAlbumView.h"
+#import "HomeAlbumModel.h"
+#import "HomeHotAlbumCell.h"
+
+#import "HomeHotMusicView.h"
+#import "HomeHotMusicCollectionCell.h"
+#import "KSPremissionAlert.h"
+#import "RecordCheckManager.h"
+#import "KSAccompanyWebViewController.h"
+
+#import "HomeHotTalentView.h"
+#import "HomeHotTalentCell.h"
+#import "TalentTeacherModel.h"
+
+#import "HomeHotVideoCourseView.h"
+#import "HomeHotVideoCell.h"
+#import "HomeVideoGroupModel.h"
+
+#import "HomeHotLiveCourseView.h"
+#import "HomeHotLiveCell.h"
+#import "HomeLiveGroupModel.h"
+
+#import "JXCategoryView.h"
+#import "JXPagerListRefreshView.h"
+#import "HomePageBodyView.h"
+#import "HomeInformationBodyView.h"
+
+#define BUTTONWIDTH (65)
+#define BUTTONHEIGHT (80)
+
+@interface NewHomeViewController ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate,SDCycleScrollViewDelegate,UIScrollViewDelegate,UICollectionViewDelegate, UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,TYCyclePagerViewDataSource,TYCyclePagerViewDelegate>
+
+@property (nonatomic, strong) StudentInfoModel *mineInfo;
+
+@property (nonatomic, strong) HomeNavSearchView *navView;
+
+@property (nonatomic, strong) HomeMessageModel *flashModel;
+@property (nonatomic, assign) BOOL isFirstLoad;
+
+// banner
+@property (nonatomic, strong) TYPageControl *pageControl;
+@property (nonatomic, strong) HomeBannerView *bannerView;  // banner container
+@property (nonatomic, strong) TYCyclePagerView *bannerScroll; // 活动
+@property (nonatomic, strong) NSMutableArray *bannerArray; // banner 数据
+@property (nonatomic, assign) CGFloat bannerViewHeight; // banner 高度
+
+// 按钮
+@property (nonatomic, strong) HomeButtonView *buttonContainer; // button container
+@property (nonatomic, strong) UIScrollView *buttonScrollView;
+@property (nonatomic, strong) NSMutableArray *buttonArray; // button 内容
+@property (nonatomic, assign) NSInteger buttonDotWidth;
+@property (nonatomic, assign) CGFloat buttonViewHeight; // button view 高度
+
+// 公告
+@property (nonatomic, strong) PublicNoticeView *noticeView;
+@property (nonatomic, strong) SDCycleScrollView *noticeScrollView;
+@property (nonatomic, strong) NSMutableArray *noticeArray; // notice数据
+@property (nonatomic, strong) NSMutableArray *noticeTitleArray; // 标题数组
+@property (nonatomic, assign) CGFloat noticeViewHeight;
+
+// 最近课程
+@property (nonatomic, strong) HomeRecentCourseView *courseView;
+@property (nonatomic, assign) CGFloat courseViewHeight;
+@property (nonatomic, strong) RecentCourseModel *recentCourseModel;
+
+// 热门专辑
+@property (nonatomic, strong) HomeHotAlbumView *albumView;
+@property (nonatomic, strong) NSMutableArray *albumArray;
+@property (nonatomic, strong) UICollectionView *albumCollectionView; // 专辑容器
+@property (nonatomic, assign) CGFloat albumViewHeight; // album 高度
+
+// 热门曲谱
+@property (nonatomic, strong) HomeHotMusicView *hotMusicView;
+@property (nonatomic, strong) UICollectionView *musicCollectionView; // 曲谱容器
+@property (nonatomic, strong) NSMutableArray *musicArray; // 曲谱数据
+@property (nonatomic, assign) CGFloat musicViewHeight; // music 高度
+// 推荐达人
+@property (nonatomic, strong) HomeHotTalentView *talentView;
+@property (nonatomic, strong) UICollectionView *talentCollectionView; // 推荐达人容器
+@property (nonatomic, strong) NSMutableArray *talentArray; // 推荐达人数据
+@property (nonatomic, assign) CGFloat talentViewHeight; // talent 高度
+
+// 视频课
+@property (nonatomic, strong) HomeHotVideoCourseView *videoCourseView;
+@property (nonatomic, strong) UICollectionView *videoCollectionView; // 视频课容器
+@property (nonatomic, strong) NSMutableArray *videoCourseArray; // 视频课数据
+@property (nonatomic, assign) CGFloat videoViewHeight; // video 高度
+
+// 直播课
+@property (nonatomic, strong) HomeHotLiveCourseView *liveCourseView;
+@property (nonatomic, strong) UICollectionView *liveCollectionView; // 直播课容器
+@property (nonatomic, strong) NSMutableArray *liveCourseArray; // 直播课数据
+@property (nonatomic, assign) CGFloat liveViewHeight; // live 高度
+
+@property (nonatomic, strong) dispatch_group_t requestGroup;
+
+// 顶部数据容器
+@property (nonatomic, strong) UIView *headView;
+
+@property (nonatomic, strong) JXCategoryTitleView *myCategoryView;
+
+@property (nonatomic, assign) NSInteger currentIndex;
+
+@property (nonatomic, strong) NSMutableArray *listViewArray;
+
+@property (nonatomic, assign) CGFloat headViewHeight;
+
+@end
+
+@implementation NewHomeViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.ks_prefersNavigationBarHidden = YES;
+    _titles = @[@"达人风采",@"热门资讯"];
+    self.isFirstLoad = YES;
+    [self configNavView];
+    [self configUI];
+    [self requestData];
+}
+
+- (void)requestTrackAuth {
+    
+    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+    [appDelegate appTrackActionAuth];
+}
+
+- (void)configNavView {
+    [self.scrollView removeFromSuperview];
+    [self.view addSubview:self.navView];
+    [self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.view);
+        make.height.mas_equalTo(kNaviBarHeight);
+    }];
+//    [self.view bringSubviewToFront:self.scrollView];
+    [self.view bringSubviewToFront:self.navView];
+//    [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) {
+//        make.left.right.mas_equalTo(self.view);
+//        make.top.mas_equalTo(self.view.mas_top).offset(kNaviBarHeight);
+//        make.bottom.mas_equalTo(self.view.mas_bottom);
+//    }];
+//    self.scrollView.backgroundColor = [UIColor clearColor];
+//    self.scrollView.scrollEnabled = NO;
+//    MJWeakSelf;
+//    self.scrollView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+//        [weakSelf requestData];
+//    }];
+}
+
+- (void)configHeadView {
+    UIView *headBgView = [[UIView alloc] init];
+    headBgView.backgroundColor = [UIColor whiteColor];
+    [self.headView addSubview:headBgView];
+    // banner
+    [self.headView addSubview:self.bannerView];
+    self.bannerViewHeight = [HomeBannerView getViewHeight];
+    [self.bannerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.headView);
+        make.height.mas_equalTo(self.bannerViewHeight);
+    }];
+    
+    // 按钮
+    [self.headView addSubview:self.buttonContainer];
+    self.buttonViewHeight = CGFLOAT_MIN;
+    [self.buttonContainer mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.bannerView.mas_bottom);
+        make.height.mas_equalTo(CGFLOAT_MIN);
+    }];
+    self.buttonContainer.hidden = YES;
+    
+    // 公告
+    [self.headView addSubview:self.noticeView];
+    self.noticeViewHeight = CGFLOAT_MIN;
+    [self.noticeView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.buttonContainer.mas_bottom);
+        make.height.mas_equalTo(CGFLOAT_MIN);
+    }];
+    [self.noticeView.adView addSubview:self.noticeScrollView];
+    [self.noticeScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.mas_equalTo(self.noticeView.adView);
+    }];
+    self.noticeView.hidden = YES;
+    
+    // 最近课程
+    [self.headView addSubview:self.courseView];
+    self.courseViewHeight = CGFLOAT_MIN;
+    [self.courseView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.noticeView.mas_bottom);
+        make.height.mas_equalTo(CGFLOAT_MIN);
+    }];
+    self.courseView.hidden = YES;
+    
+    // 热门专辑
+    [self.headView addSubview:self.albumView];
+    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.height.mas_equalTo(self.albumViewHeight);
+    }];
+    
+    // 热门曲目
+    [self.headView addSubview:self.hotMusicView];
+    self.musicViewHeight = [HomeHotMusicView getViewHeight];
+    [self.hotMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.height.mas_equalTo(self.musicViewHeight);
+    }];
+    
+    // 推荐达人
+    [self.headView addSubview:self.talentView];
+    self.talentViewHeight = CGFLOAT_MIN;
+    [self.talentView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.hotMusicView.mas_bottom);
+        make.height.mas_equalTo(self.talentViewHeight);
+    }];
+    self.talentView.hidden = YES;
+    
+    // 视频课
+    [self.headView addSubview:self.videoCourseView];
+    self.videoViewHeight = CGFLOAT_MIN;
+    [self.videoCourseView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.talentView.mas_bottom);
+        make.height.mas_equalTo(self.videoViewHeight);
+    }];
+    self.videoCourseView.hidden = YES;
+    // 直播
+    [self.headView addSubview:self.liveCourseView];
+    self.liveViewHeight = CGFLOAT_MIN;
+    [self.liveCourseView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.videoCourseView.mas_bottom);
+        make.height.mas_equalTo(self.liveViewHeight);
+    }];
+    self.liveCourseView.hidden = YES;
+    
+    [headBgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.bannerView.mas_top);
+        make.bottom.mas_equalTo(self.buttonContainer.mas_bottom);
+    }];
+    
+    headBgView.layer.masksToBounds = YES;
+    headBgView.layer.cornerRadius = 10.0f;
+    headBgView.layer.maskedCorners = kCALayerMinXMaxYCorner | kCALayerMaxXMaxYCorner;
+    
+    [self refreshHeadHeight];
+}
+
+- (void)refreshHeadHeight {
+    self.headViewHeight = self.bannerViewHeight + self.buttonViewHeight + self.noticeViewHeight + self.courseViewHeight + self.albumViewHeight + self.musicViewHeight + self.talentViewHeight + self.liveViewHeight + self.videoViewHeight;
+    [self.pagerView reloadData];
+}
+
+- (void)configUI {
+    [self configHeadView];
+    
+    _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, kNaviBarHeight, kScreenWidth, 50)];
+    self.categoryView.backgroundColor = [UIColor clearColor];
+    self.categoryView.titles = self.titles;
+    self.categoryView.delegate = self;
+    self.categoryView.titleFont = [UIFont systemFontOfSize:16.0f];
+    self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium];
+    self.categoryView.titleSelectedColor = HexRGB(0x000000);
+    self.categoryView.titleColor = HexRGB(0x808080);
+    self.categoryView.titleColorGradientEnabled = YES;
+    JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
+    lineView.indicatorColor = THEMECOLOR;
+    lineView.indicatorWidth = 55;
+    self.categoryView.indicators = @[lineView];
+    
+    _pagerView = [self preferredPagingView];
+    self.pagerView.frame = CGRectMake(0, kNaviBarHeight, kScreenWidth, kScreenHeight - kNaviBarHeight - kTabBarHeight);
+    self.pagerView.mainTableView.gestureDelegate = self;
+    [self.view addSubview:self.pagerView];
+    self.pagerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
+    self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
+}
+
+- (JXPagerView *)preferredPagingView {
+    return [[JXPagerListRefreshView alloc] initWithDelegate:self];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    if (self.isFirstLoad == YES) {
+        [self requestUserInfo:YES]; // 获取声部
+        [self requestTrackAuth];
+        AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+        [appDelegate handleNotiferSource];
+    }
+    else {
+        [self requestUserInfo:YES];
+    }
+    [self requestUnreadCount];
+}
+
+- (void)requestUnreadCount {
+    [KSNetworkingManager queryCountOfUnreadRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *countArray = [dic arrayValueForKey:@"data"];
+            NSInteger courseCount = 0;
+            NSInteger sysCount = 0;
+            for (NSDictionary *parm in countArray) {
+                if ([[parm stringValueForKey:@"key"] isEqualToString:@"COURSE"]) {
+                    courseCount = [parm integerValueForKey:@"value"];
+                }
+                if ([[parm stringValueForKey:@"key"] isEqualToString:@"SYSTEM"]) {
+                    sysCount = [parm integerValueForKey:@"value"];
+                }
+            }
+            if (courseCount != 0 || sysCount != 0) {
+                self.navView.dotView.hidden = NO;
+            }
+            else {
+                self.navView.dotView.hidden = YES;
+            }
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)requestUserInfo:(BOOL)checkSubject {
+    self.isFirstLoad = NO;
+    [KSNetworkingManager queryStudentInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            self.mineInfo = [[StudentInfoModel alloc] initWithDictionary:[dic dictionaryValueForKey:@"data"]];
+            NSString *rongToken = UserDefault(RongTokenKey);
+            if ([NSString isEmptyString:rongToken]) {
+                [USER_MANAGER queryUserInfoConnectRongCloud:YES];
+            }
+//            [self refreshNavView:checkSubject];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)requestNewsList {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager homeNewsList:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
+            // banner
+            NSArray *bannerArray = [result arrayValueForKey:@"banner"];
+            NSMutableArray *bannerInfoArray = [NSMutableArray array];
+            for (NSDictionary *parm in bannerArray) {
+                HomeMessageModel *model = [[HomeMessageModel alloc] initWithDictionary:parm];
+                [bannerInfoArray addObject:model];
+            }
+            self.bannerArray = [NSMutableArray arrayWithArray:bannerInfoArray];
+            
+            // button
+            NSArray *buttonArray = [result arrayValueForKey:@"appMenu"];
+            NSMutableArray *buttonInfoArray = [NSMutableArray array];
+            for (NSDictionary *parm in buttonArray) {
+                HomeMessageModel *model = [[HomeMessageModel alloc] initWithDictionary:parm];
+                [buttonInfoArray addObject:model];
+            }
+            self.buttonArray = [NSMutableArray arrayWithArray:buttonInfoArray];
+            
+            // news
+            NSArray *flashArray = [result arrayValueForKey:@"flashPage"];
+            if (flashArray.count) {
+                self.flashModel = [[HomeMessageModel alloc] initWithDictionary:[flashArray firstObject]];
+            }
+            
+            // information
+            NSArray *information = [result arrayValueForKey:@"information"];
+            NSMutableArray *informationInfoArray = [NSMutableArray array];
+            for (NSDictionary *parm in information) {
+                HomeMessageModel *model = [[HomeMessageModel alloc] initWithDictionary:parm];
+                [informationInfoArray addObject:model];
+            }
+            self.dataArray = [NSMutableArray arrayWithArray:informationInfoArray];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (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 integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] 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 {
+            [self MBPShow:MESSAGEKEY];
+        }
+        
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)requestCourseInfo {
+    
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager homeQueryLiveAndVideo:KS_GET version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSDictionary *sourceDic = [dic dictionaryValueForKey:@"data"];
+            NSArray *liveList = [sourceDic arrayValueForKey:@"liveList"];
+            NSMutableArray *liveCourse = [NSMutableArray array];
+            for (NSDictionary *parm in liveList) {
+                HomeLiveGroupModel *model = [[HomeLiveGroupModel alloc] initWithDictionary:parm];
+                [liveCourse addObject:model];
+            }
+            self.liveCourseArray = [NSMutableArray arrayWithArray:liveCourse];
+            
+            NSArray *videoList = [sourceDic arrayValueForKey:@"videoList"];
+            NSMutableArray *videoCourse = [NSMutableArray array];
+            for (NSDictionary *parm in videoList) {
+                HomeVideoGroupModel *model = [[HomeVideoGroupModel alloc] initWithDictionary:parm];
+                [videoCourse addObject:model];
+            }
+            self.videoCourseArray = [NSMutableArray arrayWithArray:videoCourse];
+            
+            // 最近课程
+            NSDictionary *parm = [sourceDic dictionaryValueForKey:@"recentCourses"];
+            if (parm == nil) {
+                self.recentCourseModel = nil;
+            }
+            else {
+                self.recentCourseModel = [[RecentCourseModel alloc] initWithDictionary:parm];
+            }
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)requestNotice {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager helpCenterContentListRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            if (sourceArray.count) {
+                NSDictionary *parm = [sourceArray firstObject];
+                NoticeSourceModel *bannerModel = [[NoticeSourceModel alloc] initWithDictionary:parm];
+                [self.noticeArray addObject:bannerModel];
+                [self.noticeTitleArray addObject:bannerModel.title];
+            }
+            else {
+                self.noticeArray = [NSMutableArray array];
+                self.noticeTitleArray = [NSMutableArray array];
+            }
+            
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)requestHotMusic {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager homeMusicListRequest:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            NSMutableArray *musicArray = [NSMutableArray array];
+            for (NSDictionary *parm in sourceArray) {
+                HomeHotMusicModel *model = [[HomeHotMusicModel alloc] initWithDictionary:parm];
+                [musicArray addObject:model];
+            }
+            self.musicArray = [NSMutableArray arrayWithArray:musicArray];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)requestTalentSource {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager queryHotTeacherListRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [dic arrayValueForKey:@"data"];
+            NSMutableArray *talentArray = [NSMutableArray array];
+            for (NSDictionary *parm in sourceArray) {
+                TalentTeacherModel *model = [[TalentTeacherModel alloc] initWithDictionary:parm];
+                [talentArray addObject:model];
+            }
+            self.talentArray = [NSMutableArray arrayWithArray:talentArray];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)requestData {
+    [self showhud];
+    [self requestNewsList];
+    [self requestNotice];
+    [self requestCourseInfo];
+    // 达人
+    [self requestTalentSource];
+    [self requestHotAlbum];
+    [self requestHotMusic];
+    
+    dispatch_group_notify(self.requestGroup, dispatch_get_main_queue(), ^{
+        [self removehub];
+        [self.scrollView.mj_header endRefreshing];
+        [self refreshView];
+    });
+}
+
+- (void)refreshView {
+    [self refreshBannaerView];
+    [self showButtonMessage];
+    [self refreshNotice];
+    [self refreshCourseView:self.recentCourseModel];
+    
+    [self refreshAlbumView];
+    [self refreshMusicView];
+    // 达人
+    [self refreshTalentView];
+    // 课程
+    [self refreshCourseView];
+    
+    // 刷新排序
+    [self refreshViewLocation];
+    [self refreshHeadHeight];
+}
+
+- (void)refreshTalentView {
+    if (self.talentArray.count) {
+        self.talentViewHeight = [HomeHotTalentView getViewHeight];
+        self.talentView.hidden = NO;
+    }
+    else {
+        self.talentViewHeight = CGFLOAT_MIN;
+        self.talentView.hidden = YES;
+    }
+    [self.talentView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.talentViewHeight);
+    }];
+    [self.talentCollectionView reloadData];
+}
+
+- (void)refreshViewLocation {
+    // 如果有课程和公告 且有按钮
+    CGFloat buttonViewDefaultHeight = self.buttonArray.count > 5 ? [HomeButtonView getViewHeight] : [HomeButtonView getViewHeight] - 20;
+    
+    if (self.noticeTitleArray.count && self.recentCourseModel && self.buttonArray.count) {
+        self.noticeViewHeight = [PublicNoticeView getViewHeight];
+        [self.noticeView mas_remakeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.mas_equalTo(self.headView);
+            make.top.mas_equalTo(self.bannerView.mas_bottom);
+            make.height.mas_equalTo(self.noticeViewHeight);
+        }];
+        self.buttonViewHeight = buttonViewDefaultHeight;
+        [self.buttonContainer mas_remakeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.mas_equalTo(self.headView);
+            make.top.mas_equalTo(self.noticeView.mas_bottom);
+            make.height.mas_equalTo(self.buttonViewHeight);
+        }];
+        [self.courseView mas_remakeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.mas_equalTo(self.view);
+            make.top.mas_equalTo(self.buttonContainer.mas_bottom);
+            make.height.mas_equalTo(91.0f);
+        }];
+    }
+    else {
+        self.buttonViewHeight = self.buttonArray.count ? buttonViewDefaultHeight : CGFLOAT_MIN;
+        [self.buttonContainer mas_remakeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.mas_equalTo(self.headView);
+            make.top.mas_equalTo(self.bannerView.mas_bottom);
+            make.height.mas_equalTo(self.buttonViewHeight);
+        }];
+        self.noticeViewHeight = self.noticeTitleArray.count ? [PublicNoticeView getViewHeight] : CGFLOAT_MIN;
+        [self.noticeView mas_remakeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.mas_equalTo(self.headView);
+            make.top.mas_equalTo(self.buttonContainer.mas_bottom);
+            make.height.mas_equalTo(self.noticeViewHeight);
+        }];
+        CGFloat courseViewHeight = self.recentCourseModel ? 90.0f : CGFLOAT_MIN;
+        [self.courseView mas_remakeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.mas_equalTo(self.headView);
+            make.top.mas_equalTo(self.noticeView.mas_bottom);
+            make.height.mas_equalTo(courseViewHeight);
+        }];
+        
+    }
+}
+
+- (void)refreshBannaerView {
+    if (self.bannerArray.count > 1) {
+        self.bannerScroll.autoScrollInterval = 3.0f;
+        [self.bannerScroll addSubview:self.pageControl];
+    }
+    else {
+        self.bannerScroll.autoScrollInterval = 0;
+        [self.pageControl removeFromSuperview];
+    }
+    _pageControl.numberOfPages = self.bannerArray.count;
+    [self.bannerScroll reloadData];
+}
+
+- (void)showButtonMessage {
+    
+    // 添加按钮
+    if (self.buttonArray.count) {
+        self.buttonContainer.hidden = NO;
+        if (self.buttonArray.count > 5) { // 大于4个显示底部滚动视图
+            self.buttonContainer.buttonPageCtrl.hidden = NO;
+            self.buttonContainer.buttonDotLeft.constant = 0;
+            NSInteger addPage = (self.buttonArray.count % 5) > 0 ? 1 : 0;
+            NSInteger pageCount = self.buttonArray.count / 5 + addPage;
+            self.buttonDotWidth = 36 / pageCount;
+            self.buttonContainer.buttonDotWidth.constant = self.buttonDotWidth;
+            self.buttonScrollView.contentSize = CGSizeMake(kScreenWidth * pageCount, BUTTONHEIGHT);
+        }
+        else {
+            self.buttonContainer.buttonPageCtrl.hidden = YES;
+            self.buttonScrollView.contentSize = CGSizeMake(kScreenWidth, BUTTONHEIGHT);
+        }
+    }
+    else {
+        self.buttonContainer.hidden = YES;
+        self.buttonContainer.buttonPageCtrl.hidden = YES;
+        self.buttonScrollView.contentSize = CGSizeMake(kScreenWidth, CGFLOAT_MIN);
+    }
+    
+        
+    self.buttonScrollView.contentOffset = CGPointMake(0, 0);
+    [self.buttonScrollView removeAllSubViews];
+    CGFloat buttonSpace = (kScreenWidth - 5 * BUTTONWIDTH) / 6;
+    for (NSInteger i = 0; i < self.buttonArray.count; i++) {
+        HomeMessageModel *model = self.buttonArray[i];
+        KSHomeButton *buttonView = [KSHomeButton shareInstance];
+        
+        [buttonView.buttonImage sd_setImageWithURL:[NSURL URLWithString:[model.coverImage getUrlEndcodeString]]];
+        buttonView.buttonTitle.text = model.title;
+        buttonView.frame = CGRectMake(buttonSpace + (i % 5) * (BUTTONWIDTH + buttonSpace) + (i / 5) * KPortraitWidth, 0, BUTTONWIDTH, BUTTONHEIGHT);
+        buttonView.actionButton.tag = 3000 + i;
+        [buttonView.actionButton addTarget:self action:@selector(HomeTopButtonAction:) forControlEvents:UIControlEventTouchUpInside];
+        [self.buttonScrollView addSubview:buttonView];
+    }
+}
+
+- (void)HomeTopButtonAction:(UIButton *)sender {
+    NSInteger index = sender.tag - 3000;
+    if ([self checkIsLoginToLoginView:YES]) {
+        HomeMessageModel *model = self.buttonArray[index];
+        if (![NSString isEmptyString:model.linkUrl]) {
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = model.linkUrl;
+            [self.navigationController pushViewController:webCtrl animated:YES];
+        }
+    }
+}
+
+- (void)refreshNotice {
+    if (self.noticeTitleArray.count) {
+        self.noticeView.hidden = NO;
+    }
+    else {
+        self.noticeView.hidden = YES;
+    }
+    self.noticeScrollView.titlesGroup = self.noticeTitleArray;
+}
+
+
+- (void)refreshCourseView:(RecentCourseModel *)model {
+    if (model) {
+        [self.courseView configCourseMessage:model];
+        self.courseView.hidden = NO;
+    }
+    else {
+        self.courseView.hidden = YES;
+    }
+}
+
+- (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 {
+    [self.musicCollectionView reloadData];
+}
+
+- (void)refreshCourseView {
+    // 课程
+    if (self.liveCourseArray.count) {
+        self.liveViewHeight = [HomeHotLiveCourseView getViewHeight];
+        self.liveCourseView.hidden = NO;
+    }
+    else {
+        self.liveViewHeight = CGFLOAT_MIN;
+        self.liveCourseView.hidden = YES;
+    }
+    [self.liveCourseView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.liveViewHeight);
+    }];
+    if (self.videoCourseArray.count) {
+        self.videoViewHeight = [HomeHotVideoCourseView getViewHeight];
+        self.videoCourseView.hidden = NO;
+    }
+    else {
+        self.videoViewHeight = CGFLOAT_MIN;
+        self.videoCourseView.hidden = YES;
+    }
+    [self.videoCourseView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.videoViewHeight);
+    }];
+    
+    [self.videoCollectionView reloadData];
+    [self.liveCollectionView reloadData];
+}
+
+#pragma mark - JXPagerViewDelegate
+
+- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
+    return self.headView;
+}
+
+- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
+    return self.headViewHeight;
+}
+
+- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return self.categoryView;
+}
+
+- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return 50;
+}
+
+- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
+    //和categoryView的item数量一致
+    return self.titles.count;
+}
+
+- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
+    if (index == 0) {
+        HomePageBodyView *listView = [[HomePageBodyView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else {
+        HomeInformationBodyView *listView = [[HomeInformationBodyView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        [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]];
+}
+
+#pragma mark - TYCyclePagerViewDataSource代理
+- (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView {
+    return self.bannerArray.count;
+}
+
+- (UICollectionViewCell *)pagerView:(TYCyclePagerView *)pagerView cellForItemAtIndex:(NSInteger)index {
+    HomeMessageModel *model = self.bannerArray[index];
+    HomeBannerCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@"HomeBannerCell" forIndex:index];
+    [cell configCellWithModel:model];
+    return cell;
+}
+
+- (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView {
+    TYCyclePagerViewLayout *layout = [[TYCyclePagerViewLayout alloc]init];
+    layout.itemSize = CGSizeMake(kScreenWidth - 28, (kScreenWidth - 28) / 347 * 132);
+    layout.itemSpacing = 0;
+    return layout;
+    
+}
+
+- (void)pagerView:(TYCyclePagerView *)pageView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex {
+    if (pageView == self.bannerScroll) {
+        [self.pageControl setCurrentPage:toIndex animate:YES];
+    }
+}
+
+- (void)pagerView:(TYCyclePagerView *)pageView didSelectedItemCell:(__kindof UICollectionViewCell *)cell atIndex:(NSInteger)index {
+    
+    HomeMessageModel *model = self.bannerArray[index];
+    if (![NSString isEmptyString:model.linkUrl]) {
+        KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+        webCtrl.url = model.linkUrl;
+        [self.navigationController pushViewController:webCtrl animated:YES];
+    }
+}
+
+#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.musicCollectionView) { // 乐谱
+        NSInteger lastRowCount = (self.musicArray.count % 3) > 0 ? 1 : 0;
+        NSInteger count = self.musicArray.count / 3 + lastRowCount;
+        return count;
+    }
+    else if (collectionView == self.talentCollectionView) { // 推荐达人
+        return self.talentArray.count;
+    }
+    else if (collectionView == self.videoCollectionView) { // 视频课
+        return self.videoCourseArray.count;
+    }
+    else { // 直播课
+        return self.liveCourseArray.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.musicCollectionView) {
+        NSMutableArray *songArray = [NSMutableArray array];
+        NSInteger length = indexPath.item * 3 + 3 > self.musicArray.count ? self.musicArray.count - indexPath.item * 3: 3;
+        NSRange range = NSMakeRange(indexPath.item * 3, 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;
+    }
+    else if (collectionView == self.talentCollectionView) {
+        TalentTeacherModel *talentModel = self.talentArray[indexPath.item];
+        HomeHotTalentCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotTalentCell" forIndexPath:indexPath];
+        [cell configWithSource:talentModel];
+        return cell;
+    }
+    else if (collectionView == self.videoCollectionView) {
+        HomeVideoGroupModel *model = self.videoCourseArray[indexPath.item];
+        HomeHotVideoCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotVideoCell" forIndexPath:indexPath];
+        [cell configWithSource:model];
+        return cell;
+    }
+    else {
+        HomeLiveGroupModel *model = self.liveCourseArray[indexPath.item];
+        HomeHotLiveCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotLiveCell" forIndexPath:indexPath];
+        [cell configWithSource:model];
+        return cell;
+    }
+}
+
+- (void)displaySongDetail:(NSString *)songId {
+    // 检测权限
+    PREMISSIONTYPE micEnable = [RecordCheckManager checkPermissionShowAlert:NO showInView:nil];
+    PREMISSIONTYPE cameraEnable = [RecordCheckManager checkCameraPremissionAvaiable:NO showInView:nil];
+    if (micEnable == PREMISSIONTYPE_YES && cameraEnable == PREMISSIONTYPE_YES) { // 如果麦克风和摄像头权限都有
+        // 跳转到播放页面
+        KSAccompanyWebViewController *detailCtrl = [[KSAccompanyWebViewController alloc] init];
+        detailCtrl.url = [NSString stringWithFormat:@"%@/accompany?id=%@",hostURL, songId];
+        detailCtrl.hiddenNavBar = YES;
+        detailCtrl.parmDic = @{@"isOpenLight" : @(YES), @"orientation" : @(0),@"isHideTitle" : @(YES)};
+        [self.navigationController pushViewController:detailCtrl animated:YES];
+    }
+    else {
+        if (micEnable == PREMISSIONTYPE_NO && cameraEnable == PREMISSIONTYPE_NO) { // 如果麦克风权限和摄像头权限都没有
+            [self showAlertWithMessage:@"请开启相机和麦克风访问权限" type:CHECKDEVICETYPE_BOTH];
+        }
+        else if (micEnable == PREMISSIONTYPE_NO) { // 如果没有麦克风权限
+            [self showAlertWithMessage:@"请开启麦克风访问权限" type:CHECKDEVICETYPE_MIC];
+        }
+        else if (cameraEnable == PREMISSIONTYPE_NO) { // 如果没有摄像头权限
+            [self showAlertWithMessage:@"请开启相机访问权限" type:CHECKDEVICETYPE_CAMREA];
+        }
+    }
+}
+
+- (void)showAlertWithMessage:(NSString *)message type:(CHECKDEVICETYPE)deviceType {
+    [KSPremissionAlert shareInstanceDisplayImage:deviceType message:message showInView:self.view cancel:^{
+        
+    } confirm:^{
+        [self openSettingView];
+    }];
+    
+}
+
+- (void)openSettingView {
+    if (@available(iOS 10, *)) {
+        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+    } else {
+        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
+    }
+}
+
+- (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];
+    }
+    else if (collectionView == self.talentCollectionView) { // 达人风采
+        TalentTeacherModel *model = self.talentArray[indexPath.item];
+        [self displayTeacherDetail:[NSString stringWithFormat:@"%.0f",model.userId]];
+    }
+    else if (collectionView == self.videoCollectionView) {  // 视频课
+        HomeVideoGroupModel *model = self.videoCourseArray[indexPath.row];
+        NSString *url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/videoDetail?groupId=",model.videoGroupId];
+        KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+        ctrl.url = url;
+        [self.navigationController pushViewController:ctrl animated:YES];
+    }
+    else if (collectionView == self.liveCollectionView) {   // 直播课详情
+        HomeLiveGroupModel *model = self.liveCourseArray[indexPath.row];
+        KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+        NSString *url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/liveDetail?groupId=",model.courseGroupId];
+        ctrl.url = url;
+        [self.navigationController pushViewController:ctrl animated:YES];
+    }
+}
+
+// 老师风采
+- (void)displayTeacherDetail:(NSString *)teacherId {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/teacherHome?teacherId=",teacherId];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (collectionView == self.albumCollectionView) {
+        return CGSizeMake(100, 140);
+    }
+    else if (collectionView == self.musicCollectionView) {
+        return CGSizeMake(KPortraitWidth * 0.83, 240);
+    }
+    else if (collectionView == self.talentCollectionView) {
+        return CGSizeMake(110, 146);
+    }
+    else if (collectionView == self.videoCollectionView) {
+        return CGSizeMake((KPortraitWidth - 28 - 11) / 2.0f, 153);
+    }
+    else {
+        return CGSizeMake((KPortraitWidth - 28 - 11) / 2.0f, 153);
+    }
+}
+
+#pragma mark ----- SDCycleScrollViewDelegate
+- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index {
+    NoticeSourceModel *noticeModel = self.noticeArray[index];
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@/#/helpCenterDetail?id=%@",WEBHOST, noticeModel.internalBaseClassIdentifier];
+    [self.navigationController pushViewController:webCtrl animated:YES];
+}
+
+
+#pragma mark ------- lazying
+- (HomeNavSearchView *)navView {
+    if (!_navView) {
+        _navView = [HomeNavSearchView shareInstance];
+        MJWeakSelf;
+        [_navView homeNavSearchAction:^(HOMENAV_TAG action) {
+            [weakSelf homeNavAction:action];
+        }];
+    }
+    return _navView;
+}
+
+- (void)homeNavAction:(HOMENAV_TAG)action {
+    switch (action) {
+        case HOMENAV_TAG_SCAN: // 扫一扫
+        {
+            [self showScanView];
+        }
+            break;
+        case HOMENAV_TAG_MESSAGE: // 消息
+        {
+            NotiferMessageViewController *ctrl = [[NotiferMessageViewController alloc] init];
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+            break;
+        case HOMENAV_TAG_SEARCH: // 搜索
+        {
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = [NSString stringWithFormat:@"%@/music-songbook/search", WEBHOST];
+            [self.navigationController pushViewController:webCtrl animated:YES];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)showScanView {
+    // 判断是否有权限
+    PREMISSIONTYPE albumEnable = [RecordCheckManager checkCameraPremissionAvaiable:NO showInView:nil];
+    if (albumEnable == PREMISSIONTYPE_YES) { // 如果有权限
+        KSScanViewController *ctrl = [[KSScanViewController alloc] init];
+        [self.navigationController pushViewController:ctrl animated:YES];
+    }
+    else {
+        if (albumEnable == PREMISSIONTYPE_NO) {
+            [self showAlertWithMessage:@"请开启相机访问权限" type:CHECKDEVICETYPE_CAMREA];
+        }
+    }
+}
+
+- (dispatch_group_t)requestGroup {
+    if (!_requestGroup) {
+        _requestGroup = dispatch_group_create();
+    }
+    return _requestGroup;
+}
+
+
+- (UIView *)headView {
+    if (!_headView) {
+        _headView = [[UIView alloc] init];
+        _headView.backgroundColor = [UIColor clearColor];
+    }
+    return _headView;
+}
+
+- (NSMutableArray *)listViewArray {
+    if (!_listViewArray) {
+        _listViewArray = [NSMutableArray arrayWithArray:@[@"",@""]];
+    }
+    return _listViewArray;
+}
+
+
+- (HomeBannerView *)bannerView {
+    if (!_bannerView) {
+        _bannerView = [HomeBannerView shareInstance];
+        [_bannerView.bannerContentView addSubview:self.bannerScroll];
+    }
+    return _bannerView;
+}
+
+#pragma mark --- banner
+- (TYCyclePagerView *)bannerScroll {
+    if (!_bannerScroll) {
+        _bannerScroll = [[TYCyclePagerView alloc] init];
+        _bannerScroll.backgroundColor = [UIColor clearColor];
+        _bannerScroll.frame = CGRectMake(0, 0, kScreenWidth - 28, (kScreenWidth - 28) / 347 * 132);
+        _bannerScroll.isInfiniteLoop = YES;
+        _bannerScroll.autoScrollInterval = 3.0f;
+        _bannerScroll.reloadDataNeedResetIndex = YES;
+        _bannerScroll.dataSource = self;
+        _bannerScroll.delegate = self;
+        [_bannerScroll registerNib:[UINib nibWithNibName:@"HomeBannerCell" bundle:nil] forCellWithReuseIdentifier:@"HomeBannerCell"];
+        if (@available(iOS 11.0, *)) {
+            _bannerScroll.collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _bannerScroll.collectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+    }
+    return _bannerScroll;
+}
+
+- (TYPageControl *)pageControl {
+    if (!_pageControl) {
+        _pageControl = [[TYPageControl alloc] init];
+        _pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
+        _pageControl.pageIndicatorSpaing = 4.0f;
+        _pageControl.frame = CGRectMake(0, (kScreenWidth - 28) * 132 / 347 - 20, kScreenWidth-28 - 12, 12);
+        _pageControl.currentPageIndicatorTintColor = HexRGB(0xffffff);
+        _pageControl.pageIndicatorTintColor = HexRGB(0xffffff);
+        _pageControl.pageIndicatorSize = CGSizeMake(5, 5);
+        _pageControl.currentPageIndicatorSize = CGSizeMake(12, 5);
+    }
+    return _pageControl;
+}
+
+- (NSMutableArray *)bannerArray {
+    if (!_bannerArray) {
+        _bannerArray = [NSMutableArray array];
+    }
+    return _bannerArray;
+}
+
+#pragma mark ---- scroll view delegate
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (scrollView == self.buttonScrollView) {
+        NSInteger index = (NSInteger)(scrollView.contentOffset.x / (KPortraitWidth - 28));
+        
+        [UIView animateWithDuration:0.3f animations:^{
+            self.buttonContainer.buttonDotLeft.constant = index * self.buttonDotWidth;
+        }];
+    }
+}
+
+#pragma mark ---- button container
+- (HomeButtonView *)buttonContainer {
+    if (!_buttonContainer) {
+        _buttonContainer = [HomeButtonView shareInstance];
+        [_buttonContainer.buttonContentView addSubview:self.buttonScrollView];
+    }
+    return _buttonContainer;
+}
+
+- (UIScrollView *)buttonScrollView {
+    if (!_buttonScrollView) {
+        _buttonScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, KPortraitWidth, BUTTONHEIGHT)];
+        _buttonScrollView.backgroundColor = [UIColor clearColor];
+        _buttonScrollView.pagingEnabled = YES;
+        _buttonScrollView.showsHorizontalScrollIndicator = NO;
+        _buttonScrollView.showsVerticalScrollIndicator = NO;
+        _buttonScrollView.delegate = self;
+    }
+    return _buttonScrollView;
+}
+
+#pragma mark ---- notice view
+- (PublicNoticeView *)noticeView {
+    if (!_noticeView) {
+        _noticeView = [PublicNoticeView shareInstance];
+        MJWeakSelf;
+        [_noticeView moreCallback:^{
+            [weakSelf moreNotice];
+        }];
+    }
+    return _noticeView;
+}
+
+- (NSMutableArray *)noticeArray {
+    if (!_noticeArray) {
+        _noticeArray = [NSMutableArray array];
+    }
+    return _noticeArray;
+}
+
+- (NSMutableArray *)noticeTitleArray {
+    if (!_noticeTitleArray) {
+        _noticeTitleArray = [NSMutableArray array];
+    }
+    return _noticeTitleArray;
+}
+
+- (void)moreNotice {
+    if (self.noticeArray.count) {
+        NoticeSourceModel *bannerModel = self.noticeArray[0];
+        KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+        webCtrl.url = [NSString stringWithFormat:@"%@/#/helpCenterDetail?id=%@",WEBHOST, bannerModel.internalBaseClassIdentifier];
+        [self.navigationController pushViewController:webCtrl animated:YES];
+    }
+}
+
+- (SDCycleScrollView *)noticeScrollView {
+    if (!_noticeScrollView) {
+        _noticeScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectZero delegate:self placeholderImage:[UIImage new]];
+        _noticeScrollView.onlyDisplayText = YES;
+        _noticeScrollView.autoScroll = NO;
+        _noticeScrollView.scrollEnabled = NO;
+        _noticeScrollView.scrollDirection = UICollectionViewScrollDirectionVertical;
+        _noticeScrollView.titleLabelTextColor = HexRGB(0x1a1a1a);
+        _noticeScrollView.titleLabelBackgroundColor = [UIColor clearColor];
+        _noticeScrollView.titleLabelTextFont = [UIFont systemFontOfSize:14];
+        _noticeScrollView.titlesGroup = self.noticeTitleArray;
+    }
+    return _noticeScrollView;
+}
+
+- (HomeRecentCourseView *)courseView {
+    if (!_courseView) {
+        _courseView = [HomeRecentCourseView shareInstance];
+        MJWeakSelf;
+        [_courseView joinRoom:^(RECENTCOURSE_TYPE type, RecentCourseModel * _Nonnull courseModel) {
+            [weakSelf joinRoomAction:type courseMessage:courseModel];
+        }];
+    }
+    return _courseView;
+}
+
+- (void)joinRoomAction:(RECENTCOURSE_TYPE)type courseMessage:(RecentCourseModel *)courseModel {
+    if (type == RECENTCOURSE_TYPE_ACCOMPANY) {
+        AccompanyDetailViewController *detailVC = [[AccompanyDetailViewController alloc] init];
+        detailVC.courseId = courseModel.courseId;
+        detailVC.courseGroupId = courseModel.courseGroupId;
+        detailVC.teacherId = courseModel.teacherId;
+        [self.navigationController pushViewController:detailVC animated:YES];
+    }
+    else if (type == RECENTCOURSE_TYPE_MUSICCLASS) { // 琴房课
+        MusicRoomDetailViewController *detailVC = [[MusicRoomDetailViewController alloc] init];
+        detailVC.courseId = courseModel.courseId;
+        detailVC.courseGroupId = courseModel.courseGroupId;
+        detailVC.teacherId = courseModel.teacherId;
+        [self.navigationController pushViewController:detailVC animated:YES];
+    }
+    else {
+        KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+        NSString *url = [NSString stringWithFormat:@"%@/#/liveDetail?joinRoom=1&groupId=%@&classId=%@", WEBHOST,courseModel.courseGroupId,courseModel.courseId];
+        ctrl.url = url;
+        [self.navigationController pushViewController:ctrl 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 ---- 热门曲目
+- (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) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _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 ---- talent view
+- (HomeHotTalentView *)talentView {
+    if (!_talentView) {
+        _talentView = [HomeHotTalentView shareInstance];
+        [_talentView.talentContentView addSubview:self.talentCollectionView];
+        [self.talentCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_talentView.talentContentView);
+        }];
+    }
+    return _talentView;
+}
+
+- (UICollectionView *)talentCollectionView {
+    if (!_talentCollectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _talentCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _talentCollectionView.backgroundColor = [UIColor clearColor];
+        _talentCollectionView.delegate = self;
+        _talentCollectionView.dataSource = self;
+        _talentCollectionView.showsVerticalScrollIndicator = NO;
+        _talentCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _talentCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _talentCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_talentCollectionView registerNib:[UINib nibWithNibName:@"HomeHotTalentCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotTalentCell"];
+    }
+    return _talentCollectionView;
+}
+
+
+#pragma mark ----- video course
+- (HomeHotVideoCourseView *)videoCourseView {
+    if (!_videoCourseView) {
+        _videoCourseView = [HomeHotVideoCourseView shareInstance];
+        MJWeakSelf;
+        [_videoCourseView homeVideoMore:^{
+            [weakSelf toVideoMorePage];
+        }];
+        [_videoCourseView.videoContentView addSubview:self.videoCollectionView];
+        [self.videoCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_videoCourseView.videoContentView);
+        }];
+    }
+    return _videoCourseView;
+}
+
+- (UICollectionView *)videoCollectionView {
+    if (!_videoCollectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _videoCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _videoCollectionView.backgroundColor = [UIColor clearColor];
+        _videoCollectionView.delegate = self;
+        _videoCollectionView.dataSource = self;
+        _videoCollectionView.showsVerticalScrollIndicator = NO;
+        _videoCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _videoCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _videoCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        
+        [_videoCollectionView registerNib:[UINib nibWithNibName:@"HomeHotVideoCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotVideoCell"];
+    }
+    return _videoCollectionView;
+}
+
+- (void)toVideoMorePage {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/videoClass"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+#pragma mark ----- live course
+
+- (HomeHotLiveCourseView *)liveCourseView {
+    if (!_liveCourseView) {
+        _liveCourseView = [HomeHotLiveCourseView shareInstance];
+        MJWeakSelf;
+        [_liveCourseView homeLiveMore:^{
+            [weakSelf toLiveMorePage];
+        }];
+        [_liveCourseView.liveContentView addSubview:self.liveCollectionView];
+        [self.liveCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_liveCourseView.liveContentView);
+        }];
+    }
+    return _liveCourseView;
+}
+
+- (UICollectionView *)liveCollectionView {
+    if (!_liveCollectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _liveCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _liveCollectionView.backgroundColor = [UIColor clearColor];
+        _liveCollectionView.delegate = self;
+        _liveCollectionView.dataSource = self;
+        _liveCollectionView.showsVerticalScrollIndicator = NO;
+        _liveCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _liveCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _liveCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_liveCollectionView registerNib:[UINib nibWithNibName:@"HomeHotLiveCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotLiveCell"];
+    }
+    return _liveCollectionView;
+}
+
+// 更多直播课
+- (void)toLiveMorePage {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/liveClass"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+/*
+#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

+ 62 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.h

@@ -0,0 +1,62 @@
+//
+//  HomeHotMusicModel.h
+//
+//  Created by Steven  on 2022/8/5
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface HomeHotMusicModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *metronomeUrl;
+@property (nonatomic, strong) NSString *musicSheetName;
+@property (nonatomic, assign) double notation;
+@property (nonatomic, assign) double internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *xmlFileUrl;
+@property (nonatomic, assign) double showFingering;
+@property (nonatomic, strong) NSString *remark;
+@property (nonatomic, assign) double state;
+@property (nonatomic, assign) double favoriteCount;
+@property (nonatomic, strong) NSString *url;
+@property (nonatomic, assign) double musicPrice;
+@property (nonatomic, assign) double sortNumber;
+@property (nonatomic, strong) NSString *play;
+@property (nonatomic, strong) NSString *addUserAvatar;
+@property (nonatomic, strong) NSString *audioType;
+@property (nonatomic, assign) double canEvaluate;
+@property (nonatomic, assign) BOOL delFlag;
+@property (nonatomic, strong) NSString *musicTagNames;
+@property (nonatomic, strong) NSString *subjectNames;
+@property (nonatomic, strong) NSString *chargeType;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, assign) double updateBy;
+@property (nonatomic, strong) NSString *musicTag;
+@property (nonatomic, strong) NSString *extConfigJson;
+@property (nonatomic, strong) NSString *addName;
+@property (nonatomic, strong) NSString *favorite;
+@property (nonatomic, strong) NSString *auditStatus;
+@property (nonatomic, assign) double createBy;
+@property (nonatomic, strong) NSString *midiUrl;
+@property (nonatomic, assign) double topFlag;
+@property (nonatomic, strong) NSString *composer;
+@property (nonatomic, strong) NSString *sourceType;
+@property (nonatomic, strong) NSString *hotFlag;
+@property (nonatomic, strong) NSString *mp3Type;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, assign) double playSpeed;
+@property (nonatomic, strong) NSString *hasBeat;
+@property (nonatomic, strong) NSString *audioFileUrl;
+@property (nonatomic, strong) NSString *reason;
+@property (nonatomic, assign) double auditVersion;
+@property (nonatomic, strong) NSString *musicSubject;
+@property (nonatomic, assign) double userId;
+@property (nonatomic, strong) NSString *submitAuditTime;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 393 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.m

@@ -0,0 +1,393 @@
+//
+//  HomeHotMusicModel.m
+//
+//  Created by Steven  on 2022/8/5
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "HomeHotMusicModel.h"
+
+
+NSString *const kHomeHotMusicModelMetronomeUrl = @"metronomeUrl";
+NSString *const kHomeHotMusicModelMusicSheetName = @"musicSheetName";
+NSString *const kHomeHotMusicModelNotation = @"notation";
+NSString *const kHomeHotMusicModelId = @"id";
+NSString *const kHomeHotMusicModelXmlFileUrl = @"xmlFileUrl";
+NSString *const kHomeHotMusicModelShowFingering = @"showFingering";
+NSString *const kHomeHotMusicModelRemark = @"remark";
+NSString *const kHomeHotMusicModelState = @"state";
+NSString *const kHomeHotMusicModelFavoriteCount = @"favoriteCount";
+NSString *const kHomeHotMusicModelUrl = @"url";
+NSString *const kHomeHotMusicModelMusicPrice = @"musicPrice";
+NSString *const kHomeHotMusicModelSortNumber = @"sortNumber";
+NSString *const kHomeHotMusicModelPlay = @"play";
+NSString *const kHomeHotMusicModelAddUserAvatar = @"addUserAvatar";
+NSString *const kHomeHotMusicModelAudioType = @"audioType";
+NSString *const kHomeHotMusicModelCanEvaluate = @"canEvaluate";
+NSString *const kHomeHotMusicModelDelFlag = @"delFlag";
+NSString *const kHomeHotMusicModelMusicTagNames = @"musicTagNames";
+NSString *const kHomeHotMusicModelSubjectNames = @"subjectNames";
+NSString *const kHomeHotMusicModelChargeType = @"chargeType";
+NSString *const kHomeHotMusicModelUpdateTime = @"updateTime";
+NSString *const kHomeHotMusicModelUpdateBy = @"updateBy";
+NSString *const kHomeHotMusicModelMusicTag = @"musicTag";
+NSString *const kHomeHotMusicModelExtConfigJson = @"extConfigJson";
+NSString *const kHomeHotMusicModelAddName = @"addName";
+NSString *const kHomeHotMusicModelFavorite = @"favorite";
+NSString *const kHomeHotMusicModelAuditStatus = @"auditStatus";
+NSString *const kHomeHotMusicModelCreateBy = @"createBy";
+NSString *const kHomeHotMusicModelMidiUrl = @"midiUrl";
+NSString *const kHomeHotMusicModelTopFlag = @"topFlag";
+NSString *const kHomeHotMusicModelComposer = @"composer";
+NSString *const kHomeHotMusicModelSourceType = @"sourceType";
+NSString *const kHomeHotMusicModelHotFlag = @"hotFlag";
+NSString *const kHomeHotMusicModelMp3Type = @"mp3Type";
+NSString *const kHomeHotMusicModelCreateTime = @"createTime";
+NSString *const kHomeHotMusicModelPlaySpeed = @"playSpeed";
+NSString *const kHomeHotMusicModelHasBeat = @"hasBeat";
+NSString *const kHomeHotMusicModelAudioFileUrl = @"audioFileUrl";
+NSString *const kHomeHotMusicModelReason = @"reason";
+NSString *const kHomeHotMusicModelAuditVersion = @"auditVersion";
+NSString *const kHomeHotMusicModelMusicSubject = @"musicSubject";
+NSString *const kHomeHotMusicModelUserId = @"userId";
+NSString *const kHomeHotMusicModelSubmitAuditTime = @"submitAuditTime";
+
+
+@interface HomeHotMusicModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation HomeHotMusicModel
+
+@synthesize metronomeUrl = _metronomeUrl;
+@synthesize musicSheetName = _musicSheetName;
+@synthesize notation = _notation;
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize xmlFileUrl = _xmlFileUrl;
+@synthesize showFingering = _showFingering;
+@synthesize remark = _remark;
+@synthesize state = _state;
+@synthesize favoriteCount = _favoriteCount;
+@synthesize url = _url;
+@synthesize musicPrice = _musicPrice;
+@synthesize sortNumber = _sortNumber;
+@synthesize play = _play;
+@synthesize addUserAvatar = _addUserAvatar;
+@synthesize audioType = _audioType;
+@synthesize canEvaluate = _canEvaluate;
+@synthesize delFlag = _delFlag;
+@synthesize musicTagNames = _musicTagNames;
+@synthesize subjectNames = _subjectNames;
+@synthesize chargeType = _chargeType;
+@synthesize updateTime = _updateTime;
+@synthesize updateBy = _updateBy;
+@synthesize musicTag = _musicTag;
+@synthesize extConfigJson = _extConfigJson;
+@synthesize addName = _addName;
+@synthesize favorite = _favorite;
+@synthesize auditStatus = _auditStatus;
+@synthesize createBy = _createBy;
+@synthesize midiUrl = _midiUrl;
+@synthesize topFlag = _topFlag;
+@synthesize composer = _composer;
+@synthesize sourceType = _sourceType;
+@synthesize hotFlag = _hotFlag;
+@synthesize mp3Type = _mp3Type;
+@synthesize createTime = _createTime;
+@synthesize playSpeed = _playSpeed;
+@synthesize hasBeat = _hasBeat;
+@synthesize audioFileUrl = _audioFileUrl;
+@synthesize reason = _reason;
+@synthesize auditVersion = _auditVersion;
+@synthesize musicSubject = _musicSubject;
+@synthesize userId = _userId;
+@synthesize submitAuditTime = _submitAuditTime;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.metronomeUrl = [self objectOrNilForKey:kHomeHotMusicModelMetronomeUrl fromDictionary:dict];
+            self.musicSheetName = [self objectOrNilForKey:kHomeHotMusicModelMusicSheetName fromDictionary:dict];
+            self.notation = [[self objectOrNilForKey:kHomeHotMusicModelNotation fromDictionary:dict] doubleValue];
+            self.internalBaseClassIdentifier = [[self objectOrNilForKey:kHomeHotMusicModelId fromDictionary:dict] doubleValue];
+            self.xmlFileUrl = [self objectOrNilForKey:kHomeHotMusicModelXmlFileUrl fromDictionary:dict];
+            self.showFingering = [[self objectOrNilForKey:kHomeHotMusicModelShowFingering fromDictionary:dict] doubleValue];
+            self.remark = [self objectOrNilForKey:kHomeHotMusicModelRemark fromDictionary:dict];
+            self.state = [[self objectOrNilForKey:kHomeHotMusicModelState fromDictionary:dict] doubleValue];
+            self.favoriteCount = [[self objectOrNilForKey:kHomeHotMusicModelFavoriteCount fromDictionary:dict] doubleValue];
+            self.url = [self objectOrNilForKey:kHomeHotMusicModelUrl fromDictionary:dict];
+            self.musicPrice = [[self objectOrNilForKey:kHomeHotMusicModelMusicPrice fromDictionary:dict] doubleValue];
+            self.sortNumber = [[self objectOrNilForKey:kHomeHotMusicModelSortNumber fromDictionary:dict] doubleValue];
+            self.play = [self objectOrNilForKey:kHomeHotMusicModelPlay fromDictionary:dict];
+            self.addUserAvatar = [self objectOrNilForKey:kHomeHotMusicModelAddUserAvatar fromDictionary:dict];
+            self.audioType = [self objectOrNilForKey:kHomeHotMusicModelAudioType fromDictionary:dict];
+            self.canEvaluate = [[self objectOrNilForKey:kHomeHotMusicModelCanEvaluate fromDictionary:dict] doubleValue];
+            self.delFlag = [[self objectOrNilForKey:kHomeHotMusicModelDelFlag fromDictionary:dict] boolValue];
+            self.musicTagNames = [self objectOrNilForKey:kHomeHotMusicModelMusicTagNames fromDictionary:dict];
+            self.subjectNames = [self objectOrNilForKey:kHomeHotMusicModelSubjectNames fromDictionary:dict];
+            self.chargeType = [self objectOrNilForKey:kHomeHotMusicModelChargeType fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kHomeHotMusicModelUpdateTime fromDictionary:dict];
+            self.updateBy = [[self objectOrNilForKey:kHomeHotMusicModelUpdateBy fromDictionary:dict] doubleValue];
+            self.musicTag = [self objectOrNilForKey:kHomeHotMusicModelMusicTag fromDictionary:dict];
+            self.extConfigJson = [self objectOrNilForKey:kHomeHotMusicModelExtConfigJson fromDictionary:dict];
+            self.addName = [self objectOrNilForKey:kHomeHotMusicModelAddName fromDictionary:dict];
+            self.favorite = [self objectOrNilForKey:kHomeHotMusicModelFavorite fromDictionary:dict];
+            self.auditStatus = [self objectOrNilForKey:kHomeHotMusicModelAuditStatus fromDictionary:dict];
+            self.createBy = [[self objectOrNilForKey:kHomeHotMusicModelCreateBy fromDictionary:dict] doubleValue];
+            self.midiUrl = [self objectOrNilForKey:kHomeHotMusicModelMidiUrl fromDictionary:dict];
+            self.topFlag = [[self objectOrNilForKey:kHomeHotMusicModelTopFlag fromDictionary:dict] doubleValue];
+            self.composer = [self objectOrNilForKey:kHomeHotMusicModelComposer fromDictionary:dict];
+            self.sourceType = [self objectOrNilForKey:kHomeHotMusicModelSourceType fromDictionary:dict];
+            self.hotFlag = [self objectOrNilForKey:kHomeHotMusicModelHotFlag fromDictionary:dict];
+            self.mp3Type = [self objectOrNilForKey:kHomeHotMusicModelMp3Type fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kHomeHotMusicModelCreateTime fromDictionary:dict];
+            self.playSpeed = [[self objectOrNilForKey:kHomeHotMusicModelPlaySpeed fromDictionary:dict] doubleValue];
+            self.hasBeat = [self objectOrNilForKey:kHomeHotMusicModelHasBeat fromDictionary:dict];
+            self.audioFileUrl = [self objectOrNilForKey:kHomeHotMusicModelAudioFileUrl fromDictionary:dict];
+            self.reason = [self objectOrNilForKey:kHomeHotMusicModelReason fromDictionary:dict];
+            self.auditVersion = [[self objectOrNilForKey:kHomeHotMusicModelAuditVersion fromDictionary:dict] doubleValue];
+            self.musicSubject = [self objectOrNilForKey:kHomeHotMusicModelMusicSubject fromDictionary:dict];
+            self.userId = [[self objectOrNilForKey:kHomeHotMusicModelUserId fromDictionary:dict] doubleValue];
+            self.submitAuditTime = [self objectOrNilForKey:kHomeHotMusicModelSubmitAuditTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.metronomeUrl forKey:kHomeHotMusicModelMetronomeUrl];
+    [mutableDict setValue:self.musicSheetName forKey:kHomeHotMusicModelMusicSheetName];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.notation] forKey:kHomeHotMusicModelNotation];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.internalBaseClassIdentifier] forKey:kHomeHotMusicModelId];
+    [mutableDict setValue:self.xmlFileUrl forKey:kHomeHotMusicModelXmlFileUrl];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.showFingering] forKey:kHomeHotMusicModelShowFingering];
+    [mutableDict setValue:self.remark forKey:kHomeHotMusicModelRemark];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.state] forKey:kHomeHotMusicModelState];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.favoriteCount] forKey:kHomeHotMusicModelFavoriteCount];
+    [mutableDict setValue:self.url forKey:kHomeHotMusicModelUrl];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.musicPrice] forKey:kHomeHotMusicModelMusicPrice];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.sortNumber] forKey:kHomeHotMusicModelSortNumber];
+    [mutableDict setValue:self.play forKey:kHomeHotMusicModelPlay];
+    [mutableDict setValue:self.addUserAvatar forKey:kHomeHotMusicModelAddUserAvatar];
+    [mutableDict setValue:self.audioType forKey:kHomeHotMusicModelAudioType];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.canEvaluate] forKey:kHomeHotMusicModelCanEvaluate];
+    [mutableDict setValue:[NSNumber numberWithBool:self.delFlag] forKey:kHomeHotMusicModelDelFlag];
+    [mutableDict setValue:self.musicTagNames forKey:kHomeHotMusicModelMusicTagNames];
+    [mutableDict setValue:self.subjectNames forKey:kHomeHotMusicModelSubjectNames];
+    [mutableDict setValue:self.chargeType forKey:kHomeHotMusicModelChargeType];
+    [mutableDict setValue:self.updateTime forKey:kHomeHotMusicModelUpdateTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.updateBy] forKey:kHomeHotMusicModelUpdateBy];
+    [mutableDict setValue:self.musicTag forKey:kHomeHotMusicModelMusicTag];
+    [mutableDict setValue:self.extConfigJson forKey:kHomeHotMusicModelExtConfigJson];
+    [mutableDict setValue:self.addName forKey:kHomeHotMusicModelAddName];
+    [mutableDict setValue:self.favorite forKey:kHomeHotMusicModelFavorite];
+    [mutableDict setValue:self.auditStatus forKey:kHomeHotMusicModelAuditStatus];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.createBy] forKey:kHomeHotMusicModelCreateBy];
+    [mutableDict setValue:self.midiUrl forKey:kHomeHotMusicModelMidiUrl];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.topFlag] forKey:kHomeHotMusicModelTopFlag];
+    [mutableDict setValue:self.composer forKey:kHomeHotMusicModelComposer];
+    [mutableDict setValue:self.sourceType forKey:kHomeHotMusicModelSourceType];
+    [mutableDict setValue:self.hotFlag forKey:kHomeHotMusicModelHotFlag];
+    [mutableDict setValue:self.mp3Type forKey:kHomeHotMusicModelMp3Type];
+    [mutableDict setValue:self.createTime forKey:kHomeHotMusicModelCreateTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.playSpeed] forKey:kHomeHotMusicModelPlaySpeed];
+    [mutableDict setValue:self.hasBeat forKey:kHomeHotMusicModelHasBeat];
+    [mutableDict setValue:self.audioFileUrl forKey:kHomeHotMusicModelAudioFileUrl];
+    [mutableDict setValue:self.reason forKey:kHomeHotMusicModelReason];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.auditVersion] forKey:kHomeHotMusicModelAuditVersion];
+    [mutableDict setValue:self.musicSubject forKey:kHomeHotMusicModelMusicSubject];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kHomeHotMusicModelUserId];
+    [mutableDict setValue:self.submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.metronomeUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelMetronomeUrl];
+    self.musicSheetName = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicSheetName];
+    self.notation = [aDecoder decodeDoubleForKey:kHomeHotMusicModelNotation];
+    self.internalBaseClassIdentifier = [aDecoder decodeDoubleForKey:kHomeHotMusicModelId];
+    self.xmlFileUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelXmlFileUrl];
+    self.showFingering = [aDecoder decodeDoubleForKey:kHomeHotMusicModelShowFingering];
+    self.remark = [aDecoder decodeObjectForKey:kHomeHotMusicModelRemark];
+    self.state = [aDecoder decodeDoubleForKey:kHomeHotMusicModelState];
+    self.favoriteCount = [aDecoder decodeDoubleForKey:kHomeHotMusicModelFavoriteCount];
+    self.url = [aDecoder decodeObjectForKey:kHomeHotMusicModelUrl];
+    self.musicPrice = [aDecoder decodeDoubleForKey:kHomeHotMusicModelMusicPrice];
+    self.sortNumber = [aDecoder decodeDoubleForKey:kHomeHotMusicModelSortNumber];
+    self.play = [aDecoder decodeObjectForKey:kHomeHotMusicModelPlay];
+    self.addUserAvatar = [aDecoder decodeObjectForKey:kHomeHotMusicModelAddUserAvatar];
+    self.audioType = [aDecoder decodeObjectForKey:kHomeHotMusicModelAudioType];
+    self.canEvaluate = [aDecoder decodeDoubleForKey:kHomeHotMusicModelCanEvaluate];
+    self.delFlag = [aDecoder decodeBoolForKey:kHomeHotMusicModelDelFlag];
+    self.musicTagNames = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicTagNames];
+    self.subjectNames = [aDecoder decodeObjectForKey:kHomeHotMusicModelSubjectNames];
+    self.chargeType = [aDecoder decodeObjectForKey:kHomeHotMusicModelChargeType];
+    self.updateTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelUpdateTime];
+    self.updateBy = [aDecoder decodeDoubleForKey:kHomeHotMusicModelUpdateBy];
+    self.musicTag = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicTag];
+    self.extConfigJson = [aDecoder decodeObjectForKey:kHomeHotMusicModelExtConfigJson];
+    self.addName = [aDecoder decodeObjectForKey:kHomeHotMusicModelAddName];
+    self.favorite = [aDecoder decodeObjectForKey:kHomeHotMusicModelFavorite];
+    self.auditStatus = [aDecoder decodeObjectForKey:kHomeHotMusicModelAuditStatus];
+    self.createBy = [aDecoder decodeDoubleForKey:kHomeHotMusicModelCreateBy];
+    self.midiUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelMidiUrl];
+    self.topFlag = [aDecoder decodeDoubleForKey:kHomeHotMusicModelTopFlag];
+    self.composer = [aDecoder decodeObjectForKey:kHomeHotMusicModelComposer];
+    self.sourceType = [aDecoder decodeObjectForKey:kHomeHotMusicModelSourceType];
+    self.hotFlag = [aDecoder decodeObjectForKey:kHomeHotMusicModelHotFlag];
+    self.mp3Type = [aDecoder decodeObjectForKey:kHomeHotMusicModelMp3Type];
+    self.createTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelCreateTime];
+    self.playSpeed = [aDecoder decodeDoubleForKey:kHomeHotMusicModelPlaySpeed];
+    self.hasBeat = [aDecoder decodeObjectForKey:kHomeHotMusicModelHasBeat];
+    self.audioFileUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelAudioFileUrl];
+    self.reason = [aDecoder decodeObjectForKey:kHomeHotMusicModelReason];
+    self.auditVersion = [aDecoder decodeDoubleForKey:kHomeHotMusicModelAuditVersion];
+    self.musicSubject = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicSubject];
+    self.userId = [aDecoder decodeDoubleForKey:kHomeHotMusicModelUserId];
+    self.submitAuditTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelSubmitAuditTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_metronomeUrl forKey:kHomeHotMusicModelMetronomeUrl];
+    [aCoder encodeObject:_musicSheetName forKey:kHomeHotMusicModelMusicSheetName];
+    [aCoder encodeDouble:_notation forKey:kHomeHotMusicModelNotation];
+    [aCoder encodeDouble:_internalBaseClassIdentifier forKey:kHomeHotMusicModelId];
+    [aCoder encodeObject:_xmlFileUrl forKey:kHomeHotMusicModelXmlFileUrl];
+    [aCoder encodeDouble:_showFingering forKey:kHomeHotMusicModelShowFingering];
+    [aCoder encodeObject:_remark forKey:kHomeHotMusicModelRemark];
+    [aCoder encodeDouble:_state forKey:kHomeHotMusicModelState];
+    [aCoder encodeDouble:_favoriteCount forKey:kHomeHotMusicModelFavoriteCount];
+    [aCoder encodeObject:_url forKey:kHomeHotMusicModelUrl];
+    [aCoder encodeDouble:_musicPrice forKey:kHomeHotMusicModelMusicPrice];
+    [aCoder encodeDouble:_sortNumber forKey:kHomeHotMusicModelSortNumber];
+    [aCoder encodeObject:_play forKey:kHomeHotMusicModelPlay];
+    [aCoder encodeObject:_addUserAvatar forKey:kHomeHotMusicModelAddUserAvatar];
+    [aCoder encodeObject:_audioType forKey:kHomeHotMusicModelAudioType];
+    [aCoder encodeDouble:_canEvaluate forKey:kHomeHotMusicModelCanEvaluate];
+    [aCoder encodeBool:_delFlag forKey:kHomeHotMusicModelDelFlag];
+    [aCoder encodeObject:_musicTagNames forKey:kHomeHotMusicModelMusicTagNames];
+    [aCoder encodeObject:_subjectNames forKey:kHomeHotMusicModelSubjectNames];
+    [aCoder encodeObject:_chargeType forKey:kHomeHotMusicModelChargeType];
+    [aCoder encodeObject:_updateTime forKey:kHomeHotMusicModelUpdateTime];
+    [aCoder encodeDouble:_updateBy forKey:kHomeHotMusicModelUpdateBy];
+    [aCoder encodeObject:_musicTag forKey:kHomeHotMusicModelMusicTag];
+    [aCoder encodeObject:_extConfigJson forKey:kHomeHotMusicModelExtConfigJson];
+    [aCoder encodeObject:_addName forKey:kHomeHotMusicModelAddName];
+    [aCoder encodeObject:_favorite forKey:kHomeHotMusicModelFavorite];
+    [aCoder encodeObject:_auditStatus forKey:kHomeHotMusicModelAuditStatus];
+    [aCoder encodeDouble:_createBy forKey:kHomeHotMusicModelCreateBy];
+    [aCoder encodeObject:_midiUrl forKey:kHomeHotMusicModelMidiUrl];
+    [aCoder encodeDouble:_topFlag forKey:kHomeHotMusicModelTopFlag];
+    [aCoder encodeObject:_composer forKey:kHomeHotMusicModelComposer];
+    [aCoder encodeObject:_sourceType forKey:kHomeHotMusicModelSourceType];
+    [aCoder encodeObject:_hotFlag forKey:kHomeHotMusicModelHotFlag];
+    [aCoder encodeObject:_mp3Type forKey:kHomeHotMusicModelMp3Type];
+    [aCoder encodeObject:_createTime forKey:kHomeHotMusicModelCreateTime];
+    [aCoder encodeDouble:_playSpeed forKey:kHomeHotMusicModelPlaySpeed];
+    [aCoder encodeObject:_hasBeat forKey:kHomeHotMusicModelHasBeat];
+    [aCoder encodeObject:_audioFileUrl forKey:kHomeHotMusicModelAudioFileUrl];
+    [aCoder encodeObject:_reason forKey:kHomeHotMusicModelReason];
+    [aCoder encodeDouble:_auditVersion forKey:kHomeHotMusicModelAuditVersion];
+    [aCoder encodeObject:_musicSubject forKey:kHomeHotMusicModelMusicSubject];
+    [aCoder encodeDouble:_userId forKey:kHomeHotMusicModelUserId];
+    [aCoder encodeObject:_submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    HomeHotMusicModel *copy = [[HomeHotMusicModel alloc] init];
+    
+    if (copy) {
+
+        copy.metronomeUrl = [self.metronomeUrl copyWithZone:zone];
+        copy.musicSheetName = [self.musicSheetName copyWithZone:zone];
+        copy.notation = self.notation;
+        copy.internalBaseClassIdentifier = self.internalBaseClassIdentifier;
+        copy.xmlFileUrl = [self.xmlFileUrl copyWithZone:zone];
+        copy.showFingering = self.showFingering;
+        copy.remark = [self.remark copyWithZone:zone];
+        copy.state = self.state;
+        copy.favoriteCount = self.favoriteCount;
+        copy.url = [self.url copyWithZone:zone];
+        copy.musicPrice = self.musicPrice;
+        copy.sortNumber = self.sortNumber;
+        copy.play = [self.play copyWithZone:zone];
+        copy.addUserAvatar = [self.addUserAvatar copyWithZone:zone];
+        copy.audioType = [self.audioType copyWithZone:zone];
+        copy.canEvaluate = self.canEvaluate;
+        copy.delFlag = self.delFlag;
+        copy.musicTagNames = [self.musicTagNames copyWithZone:zone];
+        copy.subjectNames = [self.subjectNames copyWithZone:zone];
+        copy.chargeType = [self.chargeType copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.updateBy = self.updateBy;
+        copy.musicTag = [self.musicTag copyWithZone:zone];
+        copy.extConfigJson = [self.extConfigJson copyWithZone:zone];
+        copy.addName = [self.addName copyWithZone:zone];
+        copy.favorite = [self.favorite copyWithZone:zone];
+        copy.auditStatus = [self.auditStatus copyWithZone:zone];
+        copy.createBy = self.createBy;
+        copy.midiUrl = [self.midiUrl copyWithZone:zone];
+        copy.topFlag = self.topFlag;
+        copy.composer = [self.composer copyWithZone:zone];
+        copy.sourceType = [self.sourceType copyWithZone:zone];
+        copy.hotFlag = [self.hotFlag copyWithZone:zone];
+        copy.mp3Type = [self.mp3Type copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.playSpeed = self.playSpeed;
+        copy.hasBeat = [self.hasBeat copyWithZone:zone];
+        copy.audioFileUrl = [self.audioFileUrl copyWithZone:zone];
+        copy.reason = [self.reason copyWithZone:zone];
+        copy.auditVersion = self.auditVersion;
+        copy.musicSubject = [self.musicSubject copyWithZone:zone];
+        copy.userId = self.userId;
+        copy.submitAuditTime = [self.submitAuditTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 55 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/TalentTeacherModel.h

@@ -0,0 +1,55 @@
+//
+//  TalentTeacherModel.h
+//
+//  Created by Steven  on 2022/8/30
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface TalentTeacherModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *lockFlag;
+@property (nonatomic, strong) NSString *teacherDate;
+@property (nonatomic, strong) NSString *graduateSchool;
+@property (nonatomic, strong) NSString *workUnit;
+@property (nonatomic, strong) NSString *subject;
+@property (nonatomic, assign) double memberRankSettingId;
+@property (nonatomic, strong) NSString *gradCertificate;
+@property (nonatomic, strong) NSString *degreeCertificate;
+@property (nonatomic, strong) NSString *teacherCertificate;
+@property (nonatomic, strong) NSString *tag;
+@property (nonatomic, strong) NSString *educationBackground;
+@property (nonatomic, strong) NSString *membershipEndTime;
+@property (nonatomic, assign) BOOL living;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *musicianDate;
+@property (nonatomic, strong) NSString *degreeDate;
+@property (nonatomic, strong) NSString *musicDate;
+@property (nonatomic, strong) NSString *introduction;
+@property (nonatomic, strong) NSString *teacherFlag;
+@property (nonatomic, strong) NSString *subjectId;
+@property (nonatomic, strong) NSString *entryAuthDate;
+@property (nonatomic, strong) NSString *degreeFlag;
+@property (nonatomic, assign) double browse;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, strong) NSString *username;
+@property (nonatomic, strong) NSString *entryFlag;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, strong) NSString *musicianFlag;
+@property (nonatomic, strong) NSString *liveFlag;
+@property (nonatomic, strong) NSString *videoDate;
+@property (nonatomic, strong) NSString *technicalTitles;
+@property (nonatomic, strong) NSString *styleDate;
+@property (nonatomic, strong) NSString *memo;
+@property (nonatomic, strong) NSString *liveDate;
+@property (nonatomic, assign) double userId;
+@property (nonatomic, strong) NSString *membershipStartTime;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 344 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/TalentTeacherModel.m

@@ -0,0 +1,344 @@
+//
+//  TalentTeacherModel.m
+//
+//  Created by Steven  on 2022/8/30
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "TalentTeacherModel.h"
+
+
+NSString *const kTalentTeacherModelLockFlag = @"lockFlag";
+NSString *const kTalentTeacherModelTeacherDate = @"teacherDate";
+NSString *const kTalentTeacherModelGraduateSchool = @"graduateSchool";
+NSString *const kTalentTeacherModelWorkUnit = @"workUnit";
+NSString *const kTalentTeacherModelSubject = @"subject";
+NSString *const kTalentTeacherModelMemberRankSettingId = @"memberRankSettingId";
+NSString *const kTalentTeacherModelGradCertificate = @"gradCertificate";
+NSString *const kTalentTeacherModelDegreeCertificate = @"degreeCertificate";
+NSString *const kTalentTeacherModelTeacherCertificate = @"teacherCertificate";
+NSString *const kTalentTeacherModelTag = @"tag";
+NSString *const kTalentTeacherModelEducationBackground = @"educationBackground";
+NSString *const kTalentTeacherModelMembershipEndTime = @"membershipEndTime";
+NSString *const kTalentTeacherModelLiving = @"living";
+NSString *const kTalentTeacherModelUpdateTime = @"updateTime";
+NSString *const kTalentTeacherModelMusicianDate = @"musicianDate";
+NSString *const kTalentTeacherModelDegreeDate = @"degreeDate";
+NSString *const kTalentTeacherModelMusicDate = @"musicDate";
+NSString *const kTalentTeacherModelIntroduction = @"introduction";
+NSString *const kTalentTeacherModelTeacherFlag = @"teacherFlag";
+NSString *const kTalentTeacherModelSubjectId = @"subjectId";
+NSString *const kTalentTeacherModelEntryAuthDate = @"entryAuthDate";
+NSString *const kTalentTeacherModelDegreeFlag = @"degreeFlag";
+NSString *const kTalentTeacherModelBrowse = @"browse";
+NSString *const kTalentTeacherModelAvatar = @"avatar";
+NSString *const kTalentTeacherModelUsername = @"username";
+NSString *const kTalentTeacherModelEntryFlag = @"entryFlag";
+NSString *const kTalentTeacherModelCreateTime = @"createTime";
+NSString *const kTalentTeacherModelMusicianFlag = @"musicianFlag";
+NSString *const kTalentTeacherModelLiveFlag = @"liveFlag";
+NSString *const kTalentTeacherModelVideoDate = @"videoDate";
+NSString *const kTalentTeacherModelTechnicalTitles = @"technicalTitles";
+NSString *const kTalentTeacherModelStyleDate = @"styleDate";
+NSString *const kTalentTeacherModelMemo = @"memo";
+NSString *const kTalentTeacherModelLiveDate = @"liveDate";
+NSString *const kTalentTeacherModelUserId = @"userId";
+NSString *const kTalentTeacherModelMembershipStartTime = @"membershipStartTime";
+
+
+@interface TalentTeacherModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation TalentTeacherModel
+
+@synthesize lockFlag = _lockFlag;
+@synthesize teacherDate = _teacherDate;
+@synthesize graduateSchool = _graduateSchool;
+@synthesize workUnit = _workUnit;
+@synthesize subject = _subject;
+@synthesize memberRankSettingId = _memberRankSettingId;
+@synthesize gradCertificate = _gradCertificate;
+@synthesize degreeCertificate = _degreeCertificate;
+@synthesize teacherCertificate = _teacherCertificate;
+@synthesize tag = _tag;
+@synthesize educationBackground = _educationBackground;
+@synthesize membershipEndTime = _membershipEndTime;
+@synthesize living = _living;
+@synthesize updateTime = _updateTime;
+@synthesize musicianDate = _musicianDate;
+@synthesize degreeDate = _degreeDate;
+@synthesize musicDate = _musicDate;
+@synthesize introduction = _introduction;
+@synthesize teacherFlag = _teacherFlag;
+@synthesize subjectId = _subjectId;
+@synthesize entryAuthDate = _entryAuthDate;
+@synthesize degreeFlag = _degreeFlag;
+@synthesize browse = _browse;
+@synthesize avatar = _avatar;
+@synthesize username = _username;
+@synthesize entryFlag = _entryFlag;
+@synthesize createTime = _createTime;
+@synthesize musicianFlag = _musicianFlag;
+@synthesize liveFlag = _liveFlag;
+@synthesize videoDate = _videoDate;
+@synthesize technicalTitles = _technicalTitles;
+@synthesize styleDate = _styleDate;
+@synthesize memo = _memo;
+@synthesize liveDate = _liveDate;
+@synthesize userId = _userId;
+@synthesize membershipStartTime = _membershipStartTime;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.lockFlag = [self objectOrNilForKey:kTalentTeacherModelLockFlag fromDictionary:dict];
+            self.teacherDate = [self objectOrNilForKey:kTalentTeacherModelTeacherDate fromDictionary:dict];
+            self.graduateSchool = [self objectOrNilForKey:kTalentTeacherModelGraduateSchool fromDictionary:dict];
+            self.workUnit = [self objectOrNilForKey:kTalentTeacherModelWorkUnit fromDictionary:dict];
+            self.subject = [self objectOrNilForKey:kTalentTeacherModelSubject fromDictionary:dict];
+            self.memberRankSettingId = [[self objectOrNilForKey:kTalentTeacherModelMemberRankSettingId fromDictionary:dict] doubleValue];
+            self.gradCertificate = [self objectOrNilForKey:kTalentTeacherModelGradCertificate fromDictionary:dict];
+            self.degreeCertificate = [self objectOrNilForKey:kTalentTeacherModelDegreeCertificate fromDictionary:dict];
+            self.teacherCertificate = [self objectOrNilForKey:kTalentTeacherModelTeacherCertificate fromDictionary:dict];
+            self.tag = [self objectOrNilForKey:kTalentTeacherModelTag fromDictionary:dict];
+            self.educationBackground = [self objectOrNilForKey:kTalentTeacherModelEducationBackground fromDictionary:dict];
+            self.membershipEndTime = [self objectOrNilForKey:kTalentTeacherModelMembershipEndTime fromDictionary:dict];
+            self.living = [[self objectOrNilForKey:kTalentTeacherModelLiving fromDictionary:dict] boolValue];
+            self.updateTime = [self objectOrNilForKey:kTalentTeacherModelUpdateTime fromDictionary:dict];
+            self.musicianDate = [self objectOrNilForKey:kTalentTeacherModelMusicianDate fromDictionary:dict];
+            self.degreeDate = [self objectOrNilForKey:kTalentTeacherModelDegreeDate fromDictionary:dict];
+            self.musicDate = [self objectOrNilForKey:kTalentTeacherModelMusicDate fromDictionary:dict];
+            self.introduction = [self objectOrNilForKey:kTalentTeacherModelIntroduction fromDictionary:dict];
+            self.teacherFlag = [self objectOrNilForKey:kTalentTeacherModelTeacherFlag fromDictionary:dict];
+            self.subjectId = [self objectOrNilForKey:kTalentTeacherModelSubjectId fromDictionary:dict];
+            self.entryAuthDate = [self objectOrNilForKey:kTalentTeacherModelEntryAuthDate fromDictionary:dict];
+            self.degreeFlag = [self objectOrNilForKey:kTalentTeacherModelDegreeFlag fromDictionary:dict];
+            self.browse = [[self objectOrNilForKey:kTalentTeacherModelBrowse fromDictionary:dict] doubleValue];
+            self.avatar = [self objectOrNilForKey:kTalentTeacherModelAvatar fromDictionary:dict];
+            self.username = [self objectOrNilForKey:kTalentTeacherModelUsername fromDictionary:dict];
+            self.entryFlag = [self objectOrNilForKey:kTalentTeacherModelEntryFlag fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kTalentTeacherModelCreateTime fromDictionary:dict];
+            self.musicianFlag = [self objectOrNilForKey:kTalentTeacherModelMusicianFlag fromDictionary:dict];
+            self.liveFlag = [self objectOrNilForKey:kTalentTeacherModelLiveFlag fromDictionary:dict];
+            self.videoDate = [self objectOrNilForKey:kTalentTeacherModelVideoDate fromDictionary:dict];
+            self.technicalTitles = [self objectOrNilForKey:kTalentTeacherModelTechnicalTitles fromDictionary:dict];
+            self.styleDate = [self objectOrNilForKey:kTalentTeacherModelStyleDate fromDictionary:dict];
+            self.memo = [self objectOrNilForKey:kTalentTeacherModelMemo fromDictionary:dict];
+            self.liveDate = [self objectOrNilForKey:kTalentTeacherModelLiveDate fromDictionary:dict];
+            self.userId = [[self objectOrNilForKey:kTalentTeacherModelUserId fromDictionary:dict] doubleValue];
+            self.membershipStartTime = [self objectOrNilForKey:kTalentTeacherModelMembershipStartTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.lockFlag forKey:kTalentTeacherModelLockFlag];
+    [mutableDict setValue:self.teacherDate forKey:kTalentTeacherModelTeacherDate];
+    [mutableDict setValue:self.graduateSchool forKey:kTalentTeacherModelGraduateSchool];
+    [mutableDict setValue:self.workUnit forKey:kTalentTeacherModelWorkUnit];
+    [mutableDict setValue:self.subject forKey:kTalentTeacherModelSubject];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.memberRankSettingId] forKey:kTalentTeacherModelMemberRankSettingId];
+    [mutableDict setValue:self.gradCertificate forKey:kTalentTeacherModelGradCertificate];
+    [mutableDict setValue:self.degreeCertificate forKey:kTalentTeacherModelDegreeCertificate];
+    [mutableDict setValue:self.teacherCertificate forKey:kTalentTeacherModelTeacherCertificate];
+    [mutableDict setValue:self.tag forKey:kTalentTeacherModelTag];
+    [mutableDict setValue:self.educationBackground forKey:kTalentTeacherModelEducationBackground];
+    [mutableDict setValue:self.membershipEndTime forKey:kTalentTeacherModelMembershipEndTime];
+    [mutableDict setValue:[NSNumber numberWithBool:self.living] forKey:kTalentTeacherModelLiving];
+    [mutableDict setValue:self.updateTime forKey:kTalentTeacherModelUpdateTime];
+    [mutableDict setValue:self.musicianDate forKey:kTalentTeacherModelMusicianDate];
+    [mutableDict setValue:self.degreeDate forKey:kTalentTeacherModelDegreeDate];
+    [mutableDict setValue:self.musicDate forKey:kTalentTeacherModelMusicDate];
+    [mutableDict setValue:self.introduction forKey:kTalentTeacherModelIntroduction];
+    [mutableDict setValue:self.teacherFlag forKey:kTalentTeacherModelTeacherFlag];
+    [mutableDict setValue:self.subjectId forKey:kTalentTeacherModelSubjectId];
+    [mutableDict setValue:self.entryAuthDate forKey:kTalentTeacherModelEntryAuthDate];
+    [mutableDict setValue:self.degreeFlag forKey:kTalentTeacherModelDegreeFlag];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.browse] forKey:kTalentTeacherModelBrowse];
+    [mutableDict setValue:self.avatar forKey:kTalentTeacherModelAvatar];
+    [mutableDict setValue:self.username forKey:kTalentTeacherModelUsername];
+    [mutableDict setValue:self.entryFlag forKey:kTalentTeacherModelEntryFlag];
+    [mutableDict setValue:self.createTime forKey:kTalentTeacherModelCreateTime];
+    [mutableDict setValue:self.musicianFlag forKey:kTalentTeacherModelMusicianFlag];
+    [mutableDict setValue:self.liveFlag forKey:kTalentTeacherModelLiveFlag];
+    [mutableDict setValue:self.videoDate forKey:kTalentTeacherModelVideoDate];
+    [mutableDict setValue:self.technicalTitles forKey:kTalentTeacherModelTechnicalTitles];
+    [mutableDict setValue:self.styleDate forKey:kTalentTeacherModelStyleDate];
+    [mutableDict setValue:self.memo forKey:kTalentTeacherModelMemo];
+    [mutableDict setValue:self.liveDate forKey:kTalentTeacherModelLiveDate];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kTalentTeacherModelUserId];
+    [mutableDict setValue:self.membershipStartTime forKey:kTalentTeacherModelMembershipStartTime];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.lockFlag = [aDecoder decodeObjectForKey:kTalentTeacherModelLockFlag];
+    self.teacherDate = [aDecoder decodeObjectForKey:kTalentTeacherModelTeacherDate];
+    self.graduateSchool = [aDecoder decodeObjectForKey:kTalentTeacherModelGraduateSchool];
+    self.workUnit = [aDecoder decodeObjectForKey:kTalentTeacherModelWorkUnit];
+    self.subject = [aDecoder decodeObjectForKey:kTalentTeacherModelSubject];
+    self.memberRankSettingId = [aDecoder decodeDoubleForKey:kTalentTeacherModelMemberRankSettingId];
+    self.gradCertificate = [aDecoder decodeObjectForKey:kTalentTeacherModelGradCertificate];
+    self.degreeCertificate = [aDecoder decodeObjectForKey:kTalentTeacherModelDegreeCertificate];
+    self.teacherCertificate = [aDecoder decodeObjectForKey:kTalentTeacherModelTeacherCertificate];
+    self.tag = [aDecoder decodeObjectForKey:kTalentTeacherModelTag];
+    self.educationBackground = [aDecoder decodeObjectForKey:kTalentTeacherModelEducationBackground];
+    self.membershipEndTime = [aDecoder decodeObjectForKey:kTalentTeacherModelMembershipEndTime];
+    self.living = [aDecoder decodeBoolForKey:kTalentTeacherModelLiving];
+    self.updateTime = [aDecoder decodeObjectForKey:kTalentTeacherModelUpdateTime];
+    self.musicianDate = [aDecoder decodeObjectForKey:kTalentTeacherModelMusicianDate];
+    self.degreeDate = [aDecoder decodeObjectForKey:kTalentTeacherModelDegreeDate];
+    self.musicDate = [aDecoder decodeObjectForKey:kTalentTeacherModelMusicDate];
+    self.introduction = [aDecoder decodeObjectForKey:kTalentTeacherModelIntroduction];
+    self.teacherFlag = [aDecoder decodeObjectForKey:kTalentTeacherModelTeacherFlag];
+    self.subjectId = [aDecoder decodeObjectForKey:kTalentTeacherModelSubjectId];
+    self.entryAuthDate = [aDecoder decodeObjectForKey:kTalentTeacherModelEntryAuthDate];
+    self.degreeFlag = [aDecoder decodeObjectForKey:kTalentTeacherModelDegreeFlag];
+    self.browse = [aDecoder decodeDoubleForKey:kTalentTeacherModelBrowse];
+    self.avatar = [aDecoder decodeObjectForKey:kTalentTeacherModelAvatar];
+    self.username = [aDecoder decodeObjectForKey:kTalentTeacherModelUsername];
+    self.entryFlag = [aDecoder decodeObjectForKey:kTalentTeacherModelEntryFlag];
+    self.createTime = [aDecoder decodeObjectForKey:kTalentTeacherModelCreateTime];
+    self.musicianFlag = [aDecoder decodeObjectForKey:kTalentTeacherModelMusicianFlag];
+    self.liveFlag = [aDecoder decodeObjectForKey:kTalentTeacherModelLiveFlag];
+    self.videoDate = [aDecoder decodeObjectForKey:kTalentTeacherModelVideoDate];
+    self.technicalTitles = [aDecoder decodeObjectForKey:kTalentTeacherModelTechnicalTitles];
+    self.styleDate = [aDecoder decodeObjectForKey:kTalentTeacherModelStyleDate];
+    self.memo = [aDecoder decodeObjectForKey:kTalentTeacherModelMemo];
+    self.liveDate = [aDecoder decodeObjectForKey:kTalentTeacherModelLiveDate];
+    self.userId = [aDecoder decodeDoubleForKey:kTalentTeacherModelUserId];
+    self.membershipStartTime = [aDecoder decodeObjectForKey:kTalentTeacherModelMembershipStartTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_lockFlag forKey:kTalentTeacherModelLockFlag];
+    [aCoder encodeObject:_teacherDate forKey:kTalentTeacherModelTeacherDate];
+    [aCoder encodeObject:_graduateSchool forKey:kTalentTeacherModelGraduateSchool];
+    [aCoder encodeObject:_workUnit forKey:kTalentTeacherModelWorkUnit];
+    [aCoder encodeObject:_subject forKey:kTalentTeacherModelSubject];
+    [aCoder encodeDouble:_memberRankSettingId forKey:kTalentTeacherModelMemberRankSettingId];
+    [aCoder encodeObject:_gradCertificate forKey:kTalentTeacherModelGradCertificate];
+    [aCoder encodeObject:_degreeCertificate forKey:kTalentTeacherModelDegreeCertificate];
+    [aCoder encodeObject:_teacherCertificate forKey:kTalentTeacherModelTeacherCertificate];
+    [aCoder encodeObject:_tag forKey:kTalentTeacherModelTag];
+    [aCoder encodeObject:_educationBackground forKey:kTalentTeacherModelEducationBackground];
+    [aCoder encodeObject:_membershipEndTime forKey:kTalentTeacherModelMembershipEndTime];
+    [aCoder encodeBool:_living forKey:kTalentTeacherModelLiving];
+    [aCoder encodeObject:_updateTime forKey:kTalentTeacherModelUpdateTime];
+    [aCoder encodeObject:_musicianDate forKey:kTalentTeacherModelMusicianDate];
+    [aCoder encodeObject:_degreeDate forKey:kTalentTeacherModelDegreeDate];
+    [aCoder encodeObject:_musicDate forKey:kTalentTeacherModelMusicDate];
+    [aCoder encodeObject:_introduction forKey:kTalentTeacherModelIntroduction];
+    [aCoder encodeObject:_teacherFlag forKey:kTalentTeacherModelTeacherFlag];
+    [aCoder encodeObject:_subjectId forKey:kTalentTeacherModelSubjectId];
+    [aCoder encodeObject:_entryAuthDate forKey:kTalentTeacherModelEntryAuthDate];
+    [aCoder encodeObject:_degreeFlag forKey:kTalentTeacherModelDegreeFlag];
+    [aCoder encodeDouble:_browse forKey:kTalentTeacherModelBrowse];
+    [aCoder encodeObject:_avatar forKey:kTalentTeacherModelAvatar];
+    [aCoder encodeObject:_username forKey:kTalentTeacherModelUsername];
+    [aCoder encodeObject:_entryFlag forKey:kTalentTeacherModelEntryFlag];
+    [aCoder encodeObject:_createTime forKey:kTalentTeacherModelCreateTime];
+    [aCoder encodeObject:_musicianFlag forKey:kTalentTeacherModelMusicianFlag];
+    [aCoder encodeObject:_liveFlag forKey:kTalentTeacherModelLiveFlag];
+    [aCoder encodeObject:_videoDate forKey:kTalentTeacherModelVideoDate];
+    [aCoder encodeObject:_technicalTitles forKey:kTalentTeacherModelTechnicalTitles];
+    [aCoder encodeObject:_styleDate forKey:kTalentTeacherModelStyleDate];
+    [aCoder encodeObject:_memo forKey:kTalentTeacherModelMemo];
+    [aCoder encodeObject:_liveDate forKey:kTalentTeacherModelLiveDate];
+    [aCoder encodeDouble:_userId forKey:kTalentTeacherModelUserId];
+    [aCoder encodeObject:_membershipStartTime forKey:kTalentTeacherModelMembershipStartTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    TalentTeacherModel *copy = [[TalentTeacherModel alloc] init];
+    
+    if (copy) {
+
+        copy.lockFlag = [self.lockFlag copyWithZone:zone];
+        copy.teacherDate = [self.teacherDate copyWithZone:zone];
+        copy.graduateSchool = [self.graduateSchool copyWithZone:zone];
+        copy.workUnit = [self.workUnit copyWithZone:zone];
+        copy.subject = [self.subject copyWithZone:zone];
+        copy.memberRankSettingId = self.memberRankSettingId;
+        copy.gradCertificate = [self.gradCertificate copyWithZone:zone];
+        copy.degreeCertificate = [self.degreeCertificate copyWithZone:zone];
+        copy.teacherCertificate = [self.teacherCertificate copyWithZone:zone];
+        copy.tag = [self.tag copyWithZone:zone];
+        copy.educationBackground = [self.educationBackground copyWithZone:zone];
+        copy.membershipEndTime = [self.membershipEndTime copyWithZone:zone];
+        copy.living = self.living;
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.musicianDate = [self.musicianDate copyWithZone:zone];
+        copy.degreeDate = [self.degreeDate copyWithZone:zone];
+        copy.musicDate = [self.musicDate copyWithZone:zone];
+        copy.introduction = [self.introduction copyWithZone:zone];
+        copy.teacherFlag = [self.teacherFlag copyWithZone:zone];
+        copy.subjectId = [self.subjectId copyWithZone:zone];
+        copy.entryAuthDate = [self.entryAuthDate copyWithZone:zone];
+        copy.degreeFlag = [self.degreeFlag copyWithZone:zone];
+        copy.browse = self.browse;
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.username = [self.username copyWithZone:zone];
+        copy.entryFlag = [self.entryFlag copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.musicianFlag = [self.musicianFlag copyWithZone:zone];
+        copy.liveFlag = [self.liveFlag copyWithZone:zone];
+        copy.videoDate = [self.videoDate copyWithZone:zone];
+        copy.technicalTitles = [self.technicalTitles copyWithZone:zone];
+        copy.styleDate = [self.styleDate copyWithZone:zone];
+        copy.memo = [self.memo copyWithZone:zone];
+        copy.liveDate = [self.liveDate copyWithZone:zone];
+        copy.userId = self.userId;
+        copy.membershipStartTime = [self.membershipStartTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerCell.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerCell.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerCell.m → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerCell.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerCell.xib → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerCell.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerView.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerView.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerView.m → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerView.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBannerView.xib → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeBanner/HomeBannerView.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButtonView.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/HomeButtonView.h


+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButtonView.m → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/HomeButtonView.m

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

+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButtonView.xib → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/HomeButtonView.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSHomeButton.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/KSHomeButton.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSHomeButton.m → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/KSHomeButton.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSHomeButton.xib → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeButton/KSHomeButton.xib


+ 31 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.h

@@ -0,0 +1,31 @@
+//
+//  HomeNavSearchView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, HOMENAV_TAG) {
+    HOMENAV_TAG_SEARCH,      // 搜索
+    HOMENAV_TAG_MESSAGE,     // 消息
+    HOMENAV_TAG_SCAN,        // 扫一扫
+};
+
+typedef void(^HomeNavSearchCallback)(HOMENAV_TAG action);
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeNavSearchView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *dotView;
+
++ (instancetype)shareInstance;
+
+- (void)homeNavSearchAction:(HomeNavSearchCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 55 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.m

@@ -0,0 +1,55 @@
+//
+//  HomeNavSearchView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeNavSearchView.h"
+
+@interface HomeNavSearchView ()
+
+@property (nonatomic, copy) HomeNavSearchCallback callback;
+
+@end
+
+@implementation HomeNavSearchView
+
++ (instancetype)shareInstance {
+    HomeNavSearchView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeNavSearchView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)homeNavSearchAction:(HomeNavSearchCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)toMessaegCenter:(id)sender {
+    if (self.callback) {
+        self.callback(HOMENAV_TAG_MESSAGE);
+    }
+}
+
+- (IBAction)scanAction:(id)sender {
+    if (self.callback) {
+        self.callback(HOMENAV_TAG_SCAN);
+    }
+}
+
+- (IBAction)searchAction:(id)sender {
+    if (self.callback) {
+        self.callback(HOMENAV_TAG_SEARCH);
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 143 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.xib

@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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="HomeNavSearchView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="88"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_icon" translatesAutoresizingMaskIntoConstraints="NO" id="gIj-iP-RBu">
+                    <rect key="frame" x="15" y="45.5" width="59" height="35"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="59" id="HRU-0T-gsV"/>
+                        <constraint firstAttribute="height" constant="35" id="LKm-hv-VhJ"/>
+                    </constraints>
+                </imageView>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ppo-1q-gi4">
+                    <rect key="frame" x="91" y="48" width="229" height="30"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_search" translatesAutoresizingMaskIntoConstraints="NO" id="13W-5h-GPV">
+                            <rect key="frame" x="17" y="7" width="16" height="16"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="16" id="eMW-9v-Vsn"/>
+                                <constraint firstAttribute="height" constant="16" id="pTU-Ek-vmG"/>
+                            </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="ulN-Yy-Ry7">
+                            <rect key="frame" x="49" y="7.5" width="99" height="15"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                            <color key="textColor" red="0.80000000000000004" green="0.80000000000000004" blue="0.80000000000000004" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" red="0.97254901960784312" green="0.97254901960784312" blue="0.97254901960784312" alpha="1" colorSpace="calibratedRGB"/>
+                    <gestureRecognizers/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="30" id="7GW-0L-tNH"/>
+                        <constraint firstItem="13W-5h-GPV" firstAttribute="leading" secondItem="Ppo-1q-gi4" secondAttribute="leading" constant="17" id="9CM-jJ-mQG"/>
+                        <constraint firstItem="ulN-Yy-Ry7" firstAttribute="leading" secondItem="13W-5h-GPV" secondAttribute="trailing" constant="16" id="E6M-nx-D3S"/>
+                        <constraint firstItem="ulN-Yy-Ry7" firstAttribute="centerY" secondItem="13W-5h-GPV" secondAttribute="centerY" id="um3-UC-4yI"/>
+                        <constraint firstItem="13W-5h-GPV" firstAttribute="centerY" secondItem="Ppo-1q-gi4" secondAttribute="centerY" id="x8W-fN-uTW"/>
+                        <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="ulN-Yy-Ry7" secondAttribute="trailing" constant="12" id="y5c-Qu-ywk"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="15"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <outletCollection property="gestureRecognizers" destination="1L4-Pr-sIj" appends="YES" id="mdp-7R-RWo"/>
+                    </connections>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nBF-8h-DYQ">
+                    <rect key="frame" x="394" y="51" width="8" height="8"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nBs-S3-tat">
+                            <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 firstAttribute="width" constant="8" id="APR-fL-1jT"/>
+                        <constraint firstAttribute="height" constant="8" id="EOH-sT-TOJ"/>
+                        <constraint firstAttribute="trailing" secondItem="nBs-S3-tat" secondAttribute="trailing" constant="1" id="GXA-NZ-SPp"/>
+                        <constraint firstItem="nBs-S3-tat" firstAttribute="leading" secondItem="nBF-8h-DYQ" secondAttribute="leading" constant="1" id="Tmy-fS-IRV"/>
+                        <constraint firstItem="nBs-S3-tat" firstAttribute="top" secondItem="nBF-8h-DYQ" secondAttribute="top" constant="1" id="goy-Df-oBK"/>
+                        <constraint firstAttribute="bottom" secondItem="nBs-S3-tat" secondAttribute="bottom" constant="1" id="jVL-5y-n1I"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="4"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Zhb-6r-b1M">
+                    <rect key="frame" x="368" y="43" width="40" height="40"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="40" id="72M-gM-uIB"/>
+                        <constraint firstAttribute="width" constant="40" id="mxy-bu-wfI"/>
+                    </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="uMe-lU-cdQ"/>
+                    </connections>
+                </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="A0l-AI-PtC">
+                    <rect key="frame" x="328" y="43" width="40" height="40"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="40" id="BUx-f5-lRU"/>
+                        <constraint firstAttribute="width" constant="40" id="jyK-IA-BuW"/>
+                    </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="bLx-hp-jSo"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="A0l-AI-PtC" firstAttribute="centerY" secondItem="gIj-iP-RBu" secondAttribute="centerY" id="4tF-aV-nbt"/>
+                <constraint firstItem="gIj-iP-RBu" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="15" id="5Yl-QV-qYb"/>
+                <constraint firstItem="Ppo-1q-gi4" firstAttribute="centerY" secondItem="gIj-iP-RBu" secondAttribute="centerY" id="6Lc-jj-Nxz"/>
+                <constraint firstAttribute="bottom" secondItem="Zhb-6r-b1M" secondAttribute="bottom" constant="5" id="6yI-GK-Ap7"/>
+                <constraint firstItem="Zhb-6r-b1M" firstAttribute="centerY" secondItem="A0l-AI-PtC" secondAttribute="centerY" id="Ars-4w-xec"/>
+                <constraint firstAttribute="trailing" secondItem="Zhb-6r-b1M" secondAttribute="trailing" constant="6" id="cUx-Pf-S6e"/>
+                <constraint firstItem="nBF-8h-DYQ" firstAttribute="top" secondItem="Zhb-6r-b1M" secondAttribute="top" constant="8" id="dCc-0Q-exj"/>
+                <constraint firstItem="A0l-AI-PtC" firstAttribute="leading" secondItem="Ppo-1q-gi4" secondAttribute="trailing" constant="8" id="eHb-Mb-igF"/>
+                <constraint firstItem="Zhb-6r-b1M" firstAttribute="leading" secondItem="A0l-AI-PtC" secondAttribute="trailing" id="o7j-29-Kuq"/>
+                <constraint firstAttribute="trailing" secondItem="nBF-8h-DYQ" secondAttribute="trailing" constant="12" id="ohe-LD-x1V"/>
+                <constraint firstItem="Ppo-1q-gi4" firstAttribute="leading" secondItem="gIj-iP-RBu" secondAttribute="trailing" constant="17" id="vZv-cq-kip"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="128.98550724637681" y="-177.45535714285714"/>
+        </view>
+        <tapGestureRecognizer id="1L4-Pr-sIj">
+            <connections>
+                <action selector="searchAction:" destination="iN0-l3-epB" id="crB-kh-lAE"/>
+            </connections>
+        </tapGestureRecognizer>
+    </objects>
+    <resources>
+        <image name="home_icon" width="59" height="35"/>
+        <image name="home_message" width="23" height="23"/>
+        <image name="home_scan" width="22" height="22"/>
+        <image name="home_search" width="16" height="16"/>
+    </resources>
+</document>

+ 25 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageHeaderView.h

@@ -0,0 +1,25 @@
+//
+//  HomePageHeaderView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, HOMEPAGETYPE) {
+    HOMEPAGETYPE_STYLE,  // 达人风采
+    HOMEPAGETYPE_INFORMATION, // 热门资讯
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomePageHeaderView : UIView
+
++ (instancetype)shareIntance;
+
+//- (void)
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageHeaderView.m

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

+ 84 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageHeaderView.xib

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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="HomePageHeaderView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="70"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EFQ-sU-OX3">
+                    <rect key="frame" x="28" y="43" width="63" height="12"/>
+                    <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="12" id="Wk0-p8-p3u"/>
+                        <constraint firstAttribute="width" constant="63" id="XFl-9i-NHM"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="6"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="N8E-y9-yqS">
+                    <rect key="frame" x="24" y="17" width="73.5" height="44"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="达人风采" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rqY-Ic-uRa">
+                            <rect key="frame" x="0.0" y="9.5" width="73.5" height="25"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="25" id="HlN-dw-dei"/>
+                            </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>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="6EV-xH-zv5"/>
+                        <constraint firstItem="rqY-Ic-uRa" firstAttribute="leading" secondItem="N8E-y9-yqS" secondAttribute="leading" id="EcW-MU-COT"/>
+                        <constraint firstAttribute="trailing" secondItem="rqY-Ic-uRa" secondAttribute="trailing" id="SRF-bC-MRf"/>
+                        <constraint firstItem="rqY-Ic-uRa" firstAttribute="centerY" secondItem="N8E-y9-yqS" secondAttribute="centerY" id="Vmc-zd-LB3"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZXa-K0-qKa">
+                    <rect key="frame" x="133.5" y="17" width="74" height="44"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="热门资讯" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GiV-R4-72D">
+                            <rect key="frame" x="0.0" y="11" width="74" height="22"/>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
+                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="C1k-4K-K7v"/>
+                        <constraint firstAttribute="trailing" secondItem="GiV-R4-72D" secondAttribute="trailing" id="GkY-JB-ltu"/>
+                        <constraint firstItem="GiV-R4-72D" firstAttribute="leading" secondItem="ZXa-K0-qKa" secondAttribute="leading" id="MXC-1b-Hpu"/>
+                        <constraint firstItem="GiV-R4-72D" firstAttribute="centerY" secondItem="ZXa-K0-qKa" secondAttribute="centerY" id="eiy-jH-QML"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="EFQ-sU-OX3" firstAttribute="bottom" secondItem="N8E-y9-yqS" secondAttribute="bottom" constant="-6" id="Ebg-DT-eTJ"/>
+                <constraint firstAttribute="bottom" secondItem="EFQ-sU-OX3" secondAttribute="bottom" constant="15" id="Gva-jv-Os9"/>
+                <constraint firstItem="EFQ-sU-OX3" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="28" id="U7v-yd-NDF"/>
+                <constraint firstItem="ZXa-K0-qKa" firstAttribute="centerY" secondItem="N8E-y9-yqS" secondAttribute="centerY" id="kMH-Nc-Rv2"/>
+                <constraint firstItem="ZXa-K0-qKa" firstAttribute="leading" secondItem="N8E-y9-yqS" secondAttribute="trailing" constant="36" id="xJd-zf-aBY"/>
+                <constraint firstItem="N8E-y9-yqS" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="24" id="y4k-PO-7Iv"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="131.8840579710145" y="29.129464285714285"/>
+        </view>
+    </objects>
+</document>

+ 16 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.h

@@ -0,0 +1,16 @@
+//
+//  HomeInformationBodyView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "KSJXBodyView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeInformationBodyView : KSJXBodyView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.m

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

+ 16 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomePageBodyView.h

@@ -0,0 +1,16 @@
+//
+//  HomePageBodyView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "kSJXCollectionView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomePageBodyView : kSJXCollectionView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomePageBodyView.m

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

+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeHotAlbumCell.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeHotAlbumCell.m → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeHotAlbumCell.xib → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeHotAlbumView.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.h


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

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

+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeHotAlbumView.xib → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumView.xib


+ 20 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCell.h

@@ -0,0 +1,20 @@
+//
+//  HomeHotLiveCell.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+#import "HomeLiveGroupModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeHotLiveCell : UICollectionViewCell
+
+- (void)configWithSource:(HomeLiveGroupModel *)source;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 48 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCell.m

@@ -0,0 +1,48 @@
+//
+//  HomeHotLiveCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeHotLiveCell.h"
+
+@interface HomeHotLiveCell ()
+    
+@property (weak, nonatomic) IBOutlet UIImageView *coverImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseName;
+
+@property (weak, nonatomic) IBOutlet UILabel *teacherName;
+
+@property (weak, nonatomic) IBOutlet UILabel *subjectLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *countLabel;
+
+@end
+
+@implementation HomeHotLiveCell
+
+- (void)configWithSource:(HomeLiveGroupModel *)source {
+    
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[source.backgroundPic getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    self.courseName.text = [NSString returnNoNullStringWithString:source.courseGroupName];
+    
+    if ([NSString isEmptyString:source.teacherName]) {
+        self.teacherName.text = [NSString stringWithFormat:@"游客%@",source.teacherId];
+    }
+    else {
+        self.teacherName.text = [NSString stringWithFormat:@"%@",source.teacherName];
+    }
+    
+    self.countLabel.text = [NSString stringWithFormat:@"%zd人在学",source.buyCount];
+    
+    self.subjectLabel.text = [NSString returnNoNullStringWithString:source.subjectName];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+@end

+ 153 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCell.xib

@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="HomeHotLiveCell">
+            <rect key="frame" x="0.0" y="0.0" width="240" height="155"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="240" height="155"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleAspectFit" translatesAutoresizingMaskIntoConstraints="NO" id="lc6-Bv-qBL">
+                        <rect key="frame" x="2" y="2" width="236" height="151"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="8qF-78-gZ4">
+                                <rect key="frame" x="0.0" y="0.0" width="236" height="95"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="95" id="w9J-f7-oTD"/>
+                                </constraints>
+                            </imageView>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZPa-8U-6df">
+                                <rect key="frame" x="6" y="6" width="28.5" height="13"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="长笛" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="X47-or-On0">
+                                        <rect key="frame" x="5" y="0.0" width="18.5" height="13"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="13" id="5J6-Su-Z2G"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="system" pointSize="9"/>
+                                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="0.37647058823529411" green="0.37647058823529411" blue="0.37647058823529411" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="X47-or-On0" secondAttribute="trailing" constant="5" id="mwk-Uc-8dW"/>
+                                    <constraint firstItem="X47-or-On0" firstAttribute="leading" secondItem="ZPa-8U-6df" secondAttribute="leading" constant="5" id="oGP-0q-ev4"/>
+                                    <constraint firstItem="X47-or-On0" firstAttribute="top" secondItem="ZPa-8U-6df" secondAttribute="top" id="pR9-ha-0qt"/>
+                                    <constraint firstAttribute="bottom" secondItem="X47-or-On0" secondAttribute="bottom" id="tjY-eR-Z9u"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="3"/>
+                                    </userDefinedRuntimeAttribute>
+                                </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="IMu-ha-W8x">
+                                <rect key="frame" x="11" y="102" width="214" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="uED-yd-pUh"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="749" text="小酷老师" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Xi-wQ-A7O">
+                                <rect key="frame" x="11" y="128" width="49.5" height="15"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tVF-Pj-Vlw">
+                                <rect key="frame" x="151" y="133.5" width="4" height="4"/>
+                                <color key="backgroundColor" red="1" green="0.53725490200000003" blue="0.0039215686269999999" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="4" id="dKn-jh-6Re"/>
+                                    <constraint firstAttribute="width" constant="4" id="ghy-fK-sNr"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="2"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1422人在学" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="inb-f4-5Eo">
+                                <rect key="frame" x="159" y="128" width="65" height="15"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <color key="textColor" red="1" green="0.53725490200000003" blue="0.0039215686269999999" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="8qF-78-gZ4" secondAttribute="trailing" id="69s-Cd-NHl"/>
+                            <constraint firstItem="tVF-Pj-Vlw" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1Xi-wQ-A7O" secondAttribute="trailing" constant="4" id="6ub-oH-jt2"/>
+                            <constraint firstItem="tVF-Pj-Vlw" firstAttribute="centerY" secondItem="1Xi-wQ-A7O" secondAttribute="centerY" id="87b-ID-bac"/>
+                            <constraint firstItem="inb-f4-5Eo" firstAttribute="centerY" secondItem="tVF-Pj-Vlw" secondAttribute="centerY" id="GjT-YS-DJm"/>
+                            <constraint firstItem="inb-f4-5Eo" firstAttribute="leading" secondItem="tVF-Pj-Vlw" secondAttribute="trailing" constant="4" id="Hju-Ef-d9s"/>
+                            <constraint firstItem="8qF-78-gZ4" firstAttribute="top" secondItem="lc6-Bv-qBL" secondAttribute="top" id="HrY-ey-iOD"/>
+                            <constraint firstItem="1Xi-wQ-A7O" firstAttribute="leading" secondItem="IMu-ha-W8x" secondAttribute="leading" id="QkT-uw-GDT"/>
+                            <constraint firstItem="1Xi-wQ-A7O" firstAttribute="top" secondItem="IMu-ha-W8x" secondAttribute="bottom" constant="6" id="bXp-zy-llh"/>
+                            <constraint firstItem="IMu-ha-W8x" firstAttribute="leading" secondItem="lc6-Bv-qBL" secondAttribute="leading" constant="11" id="cEH-so-SKL"/>
+                            <constraint firstItem="IMu-ha-W8x" firstAttribute="top" secondItem="8qF-78-gZ4" secondAttribute="bottom" constant="7" id="dlS-qO-XFT"/>
+                            <constraint firstItem="ZPa-8U-6df" firstAttribute="top" secondItem="lc6-Bv-qBL" secondAttribute="top" constant="6" id="dpf-7X-EUE"/>
+                            <constraint firstAttribute="trailing" secondItem="inb-f4-5Eo" secondAttribute="trailing" constant="12" id="fvZ-ej-DUd"/>
+                            <constraint firstItem="8qF-78-gZ4" firstAttribute="leading" secondItem="lc6-Bv-qBL" secondAttribute="leading" id="jFE-wG-CBu"/>
+                            <constraint firstItem="ZPa-8U-6df" firstAttribute="leading" secondItem="lc6-Bv-qBL" secondAttribute="leading" constant="6" id="kpf-t3-e4g"/>
+                            <constraint firstAttribute="trailing" secondItem="IMu-ha-W8x" secondAttribute="trailing" constant="11" id="sfi-Qt-rkh"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                                <real key="value" value="1"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                                <size key="value" width="0.0" height="2"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                                <color key="value" red="0.8980392157" green="0.8980392157" blue="0.8980392157" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="YES"/>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="lc6-Bv-qBL" secondAttribute="bottom" constant="2" id="4Ml-ji-H3G"/>
+                <constraint firstItem="lc6-Bv-qBL" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="2" id="SAd-7U-K2f"/>
+                <constraint firstAttribute="trailing" secondItem="lc6-Bv-qBL" secondAttribute="trailing" constant="2" id="URA-mo-kAf"/>
+                <constraint firstItem="lc6-Bv-qBL" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="2" id="uTP-Mf-LvS"/>
+            </constraints>
+            <size key="customSize" width="240" height="155"/>
+            <connections>
+                <outlet property="countLabel" destination="inb-f4-5Eo" id="xVv-C1-BaZ"/>
+                <outlet property="courseName" destination="IMu-ha-W8x" id="DPV-GN-WHW"/>
+                <outlet property="coverImage" destination="8qF-78-gZ4" id="Vfz-tO-2Rb"/>
+                <outlet property="subjectLabel" destination="X47-or-On0" id="g89-wl-Ehy"/>
+                <outlet property="teacherName" destination="1Xi-wQ-A7O" id="O0d-9s-wW0"/>
+            </connections>
+            <point key="canvasLocation" x="269.56521739130437" y="104.79910714285714"/>
+        </collectionViewCell>
+    </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 26 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCourseView.h

@@ -0,0 +1,26 @@
+//
+//  HomeHotLiveCourseView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+
+
+typedef void(^HomeMoreLiveBlock)(void);
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeHotLiveCourseView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *liveContentView;
+
++ (instancetype)shareInstance;
+
+- (void)homeLiveMore:(HomeMoreLiveBlock)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 41 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCourseView.m

@@ -0,0 +1,41 @@
+//
+//  HomeHotLiveCourseView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeHotLiveCourseView.h"
+
+@interface HomeHotLiveCourseView ()
+
+@property (nonatomic, copy) HomeMoreLiveBlock callback;
+
+@end
+
+
+@implementation HomeHotLiveCourseView
++ (instancetype)shareInstance {
+    HomeHotLiveCourseView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeHotLiveCourseView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)homeLiveMore:(HomeMoreLiveBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
++ (CGFloat)getViewHeight {
+    return 220.0f;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 108 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotLiveCourse/HomeHotLiveCourseView.xib

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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="HomeHotLiveCourseView">
+            <rect key="frame" x="0.0" y="0.0" width="700" height="240"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CPc-xV-zzJ">
+                    <rect key="frame" x="641" y="33.5" width="45" height="18"/>
+                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="Zgm-n4-wxD"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="9"/>
+                        </userDefinedRuntimeAttribute>
+                    </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="rgx-lE-LIf">
+                    <rect key="frame" x="24" y="30" width="92" height="25"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="25" id="Qv0-Dh-p2P"/>
+                    </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>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MZv-C6-cpr">
+                    <rect key="frame" x="0.0" y="67" width="700" height="153"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="153" id="ZcH-5F-lmM"/>
+                    </constraints>
+                </view>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more" translatesAutoresizingMaskIntoConstraints="NO" id="np5-vb-hbP">
+                    <rect key="frame" x="675" y="38.5" width="6" height="8"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="6" id="Uki-mb-hwr"/>
+                        <constraint firstAttribute="height" constant="8" id="sKi-cA-cNT"/>
+                    </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="tJa-YC-kmI">
+                    <rect key="frame" x="647" y="35.5" width="25" height="14.5"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4W2-m4-Hi6">
+                    <rect key="frame" x="647" y="27.5" width="34" height="30"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="30" id="8l9-2D-Tp8"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                    <state key="normal">
+                        <color key="titleColor" red="0.46666666670000001" green="0.46666666670000001" blue="0.46666666670000001" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                    </state>
+                </button>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="MKo-QN-cJI">
+                    <rect key="frame" x="14" y="36.5" width="4" height="12"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="12" id="3Q5-cg-akT"/>
+                        <constraint firstAttribute="width" constant="4" id="nJZ-TE-ZDC"/>
+                    </constraints>
+                </imageView>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="MKo-QN-cJI" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="4BM-0d-GWa"/>
+                <constraint firstItem="4W2-m4-Hi6" firstAttribute="centerY" secondItem="rgx-lE-LIf" secondAttribute="centerY" id="80v-rU-3ZJ"/>
+                <constraint firstItem="MZv-C6-cpr" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="AbI-ms-0zf"/>
+                <constraint firstAttribute="trailing" secondItem="MZv-C6-cpr" secondAttribute="trailing" id="DYT-wj-f75"/>
+                <constraint firstItem="tJa-YC-kmI" firstAttribute="leading" secondItem="CPc-xV-zzJ" secondAttribute="leading" constant="6" id="JI8-Az-zFC"/>
+                <constraint firstItem="rgx-lE-LIf" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="L4l-mn-HG0"/>
+                <constraint firstItem="np5-vb-hbP" firstAttribute="trailing" secondItem="CPc-xV-zzJ" secondAttribute="trailing" constant="-5" id="Nvq-cb-bZQ"/>
+                <constraint firstItem="np5-vb-hbP" firstAttribute="centerY" secondItem="rgx-lE-LIf" secondAttribute="centerY" id="OBn-m1-odi"/>
+                <constraint firstItem="rgx-lE-LIf" firstAttribute="leading" secondItem="MKo-QN-cJI" secondAttribute="trailing" constant="6" id="OOl-Sy-HRC"/>
+                <constraint firstItem="CPc-xV-zzJ" firstAttribute="centerY" secondItem="rgx-lE-LIf" secondAttribute="centerY" id="UG3-ud-d4W"/>
+                <constraint firstItem="tJa-YC-kmI" firstAttribute="leading" secondItem="4W2-m4-Hi6" secondAttribute="leading" id="ZZt-n7-GIs"/>
+                <constraint firstItem="rgx-lE-LIf" firstAttribute="centerY" secondItem="MKo-QN-cJI" secondAttribute="centerY" id="gbm-Nd-lG3"/>
+                <constraint firstItem="MZv-C6-cpr" firstAttribute="top" secondItem="rgx-lE-LIf" secondAttribute="bottom" constant="12" id="lAZ-gg-o8q"/>
+                <constraint firstItem="np5-vb-hbP" firstAttribute="leading" secondItem="tJa-YC-kmI" secondAttribute="trailing" constant="3" id="mSJ-cS-zI1"/>
+                <constraint firstItem="tJa-YC-kmI" firstAttribute="centerY" secondItem="rgx-lE-LIf" secondAttribute="centerY" id="sWO-DP-tbx"/>
+                <constraint firstAttribute="trailing" secondItem="CPc-xV-zzJ" secondAttribute="trailing" constant="14" id="u0g-g0-kNu"/>
+                <constraint firstItem="np5-vb-hbP" firstAttribute="trailing" secondItem="4W2-m4-Hi6" secondAttribute="trailing" id="yFz-up-wrP"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="liveContentView" destination="MZv-C6-cpr" id="CKK-O9-yoq"/>
+            </connections>
+            <point key="canvasLocation" x="339.13043478260875" y="-150"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="home_left" width="4" height="12"/>
+        <image name="home_more" width="6" height="8"/>
+    </resources>
+</document>

+ 23 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.h

@@ -0,0 +1,23 @@
+//
+//  HomeHotMusicCellView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/8/9.
+//
+
+#import <UIKit/UIKit.h>
+#import "HomeHotMusicModel.h"
+
+typedef void(^HotMusicDetailBlock)(NSString * _Nonnull songId);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeHotMusicCellView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(HotMusicDetailBlock)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 165 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.m

@@ -0,0 +1,165 @@
+//
+//  HomeHotMusicCellView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/8/9.
+//
+
+#import "HomeHotMusicCellView.h"
+
+@interface HomeHotMusicCellView ()
+
+@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
+@property (weak, nonatomic) IBOutlet UIView *statusView;
+@property (weak, nonatomic) IBOutlet UILabel *songNameLabel;
+@property (weak, nonatomic) IBOutlet UILabel *songAuth;
+@property (weak, nonatomic) IBOutlet UILabel *uploadName;
+
+@property (weak, nonatomic) IBOutlet UIView *tagView;
+@property (weak, nonatomic) IBOutlet UIView *lineView;
+
+@property (nonatomic, copy) HotMusicDetailBlock callback;
+
+@property (nonatomic, strong) HomeHotMusicModel *model;
+
+@end
+
+@implementation HomeHotMusicCellView
++ (instancetype)shareInstance {
+    HomeHotMusicCellView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeHotMusicCellView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(HotMusicDetailBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    self.model = sourceModel;
+    if ([NSString isEmptyString:sourceModel.musicSheetName]) {
+        self.songNameLabel.text = @"";
+    }
+    else {
+        NSString *musicName = @"";
+        if (sourceModel.musicSheetName.length > 10) {
+            musicName = [NSString stringWithFormat:@"%@...",[sourceModel.musicSheetName substringToIndex:9]];
+        }
+        else {
+            musicName = sourceModel.musicSheetName;
+        }
+        self.songNameLabel.text = musicName;
+    }
+    if ([NSString isEmptyString:sourceModel.composer]) {
+        self.songAuth.text = @"";
+    }
+    else {
+        NSString *songAuth = @"";
+        if (sourceModel.composer.length > 4) {
+            songAuth = [NSString stringWithFormat:@"-%@...",[sourceModel.composer substringToIndex:4]];
+        }
+        else {
+            songAuth = [NSString stringWithFormat:@"-%@",sourceModel.composer];
+        }
+        self.songAuth.text = songAuth;
+    }
+    NSArray *tagArray = nil;
+    if (![NSString isEmptyString:sourceModel.subjectNames]) {
+        tagArray = [sourceModel.subjectNames componentsSeparatedByString:@","];
+    }
+    
+    NSString *owner = @"";
+    if ([NSString isEmptyString:sourceModel.addName]) {
+        owner = [NSString stringWithFormat:@"上传者:游客%.0f",sourceModel.userId];
+    }
+    else {
+        owner = sourceModel.addName;
+        if (sourceModel.addName.length > 4) {
+            owner = [NSString stringWithFormat:@"上传者:%@...",[sourceModel.addName substringToIndex:4]];
+        }
+        else {
+            owner = [NSString stringWithFormat:@"上传者:%@",sourceModel.addName];
+        }
+    }
+    self.uploadName.text = owner;
+
+    CGFloat maxWidth = [self getTagViewMaxWidth:owner];
+    [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
+    self.lineView.hidden = hideLineView;
+    
+    if ([sourceModel.chargeType isEqualToString:@"VIP"]) {
+        self.statusView.layer.borderColor = HexRGB(0xCD863E).CGColor;
+        self.statusLabel.text = @"会员";
+        self.statusLabel.textColor = HexRGB(0xCD863E);
+    }
+    else if ([sourceModel.chargeType isEqualToString:@"CHARGE"]) {
+        self.statusView.layer.borderColor = HexRGB(0x3591CE).CGColor;
+        self.statusLabel.text = @"点播";
+        self.statusLabel.textColor = HexRGB(0x3591CE);
+    }
+    else {
+        self.statusView.layer.borderColor = HexRGB(0x01B84F).CGColor;
+        self.statusLabel.text = @"免费";
+        self.statusLabel.textColor = HexRGB(0x01B84F);
+    }
+}
+
+- (CGFloat)getTagViewMaxWidth:(NSString *)teacherName {
+    CGFloat width = [self getStringWidthInLabel:teacherName font:[UIFont systemFontOfSize:12.0f]];
+    return kScreenWidth*0.83 - 48 - width - 12;
+}
+
+- (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {
+    [self.tagView removeAllSubViews];
+    CGFloat width = maxWidth;
+    CGFloat xSpace = 0.0f;
+    for (NSInteger i = 0; i < tagArray.count; i++) {
+        NSString *tagString = tagArray[i];
+        CGFloat labelWidth = [self getStringWidthInLabel:tagString font:[UIFont systemFontOfSize:10.0f]];
+        CGFloat viewWidth = labelWidth + 10;
+        if (xSpace + viewWidth > width) {
+            return;
+        }
+        CGRect frame = CGRectMake(xSpace, 0, viewWidth, 16.0f);
+        [self createTagLabelViewWithName:tagString frame:frame];
+        xSpace += (viewWidth + 5);
+    }
+}
+
+- (CGFloat)getStringWidthInLabel:(NSString *)tagString font:(UIFont *)font {
+    CGFloat width = [tagString boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 16.0f) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil].size.width+1;
+    return width;
+}
+
+- (void)createTagLabelViewWithName:(NSString *)name frame:(CGRect)frame {
+    UIView *bgView = [[UIView alloc] initWithFrame:frame];
+    bgView.backgroundColor = HexRGB(0xEFFBF9);
+    bgView.layer.cornerRadius = 8.0f;
+    [self.tagView addSubview:bgView];
+    
+    UILabel *tagLabel = [[UILabel alloc] init];
+    tagLabel.text = name;
+    tagLabel.textColor = THEMECOLOR;
+    tagLabel.font = [UIFont systemFontOfSize:10.0f];
+    tagLabel.textAlignment = NSTextAlignmentCenter;
+    [bgView addSubview:tagLabel];
+    [tagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(bgView.mas_left).offset(5);
+        make.right.mas_equalTo(bgView.mas_right).offset(-5);
+        make.top.bottom.mas_equalTo(bgView);
+    }];
+}
+- (IBAction)buttonAction:(id)sender {
+    if (self.callback) {
+        NSString *songId = [NSString stringWithFormat:@"%.0f",self.model.internalBaseClassIdentifier];
+        self.callback(songId);
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 144 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.xib

@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeHotMusicCellView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="80"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="N1D-TV-iWW">
+                    <rect key="frame" x="11" y="19" width="31" height="17"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="免费" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Py1-eU-jUO">
+                            <rect key="frame" x="5" y="1" width="21" height="14"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="14" id="tlY-id-hEI"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="10"/>
+                            <color key="textColor" red="0.0039215686269999999" green="0.75686274509999996" blue="0.70980392160000005" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="4"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="Py1-eU-jUO" firstAttribute="leading" secondItem="N1D-TV-iWW" secondAttribute="leading" constant="5" id="DGu-KO-U8U"/>
+                        <constraint firstAttribute="width" constant="31" id="Fkh-p3-6cV"/>
+                        <constraint firstAttribute="trailing" secondItem="Py1-eU-jUO" secondAttribute="trailing" constant="5" id="PIY-vI-xI7"/>
+                        <constraint firstItem="Py1-eU-jUO" firstAttribute="top" secondItem="N1D-TV-iWW" secondAttribute="top" constant="1" id="TLG-Bf-Sdj"/>
+                        <constraint firstAttribute="bottom" secondItem="Py1-eU-jUO" secondAttribute="bottom" constant="2" id="rwb-d0-nEK"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="4"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                    </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="7xw-r5-qc1">
+                    <rect key="frame" x="48" y="17.5" width="98" height="20"/>
+                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" 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="jm2-P7-5K9">
+                    <rect key="frame" x="151" y="20" width="43" height="15"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" 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="yx5-8B-fUi">
+                    <rect key="frame" x="11" y="49.5" width="123" height="15"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_music_play" translatesAutoresizingMaskIntoConstraints="NO" id="6eO-qE-g8x">
+                    <rect key="frame" x="371" y="28" width="24" height="24"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="24" id="Yoa-d2-AUb"/>
+                        <constraint firstAttribute="height" constant="24" id="caE-x5-CQo"/>
+                    </constraints>
+                </imageView>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qrG-kH-VRz">
+                    <rect key="frame" x="146" y="49" width="220" height="16"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="16" id="Npf-cJ-8dW"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="28W-1K-xs7">
+                    <rect key="frame" x="11" y="79.5" width="390" height="0.5"/>
+                    <color key="backgroundColor" red="0.90980392160000001" green="0.90980392160000001" blue="0.90980392160000001" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="0.5" id="MXY-Ik-nnJ"/>
+                    </constraints>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fGG-J1-J8q">
+                    <rect key="frame" x="0.0" y="0.0" width="414" height="80"/>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <connections>
+                        <action selector="buttonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="fvd-A1-IJ7"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="7xw-r5-qc1" firstAttribute="leading" secondItem="N1D-TV-iWW" secondAttribute="trailing" constant="6" id="8oE-D5-SWI"/>
+                <constraint firstItem="6eO-qE-g8x" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="jm2-P7-5K9" secondAttribute="trailing" constant="10" id="BiV-XL-Qww"/>
+                <constraint firstAttribute="bottom" secondItem="28W-1K-xs7" secondAttribute="bottom" id="EEi-j6-bXC"/>
+                <constraint firstItem="N1D-TV-iWW" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="19" id="Gyv-2L-yeF"/>
+                <constraint firstItem="qrG-kH-VRz" firstAttribute="leading" secondItem="yx5-8B-fUi" secondAttribute="trailing" constant="12" id="Jbt-JJ-kdQ"/>
+                <constraint firstAttribute="trailing" secondItem="6eO-qE-g8x" secondAttribute="trailing" constant="19" id="OFX-bH-zcc"/>
+                <constraint firstItem="N1D-TV-iWW" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="Q0e-D9-JXV"/>
+                <constraint firstItem="6eO-qE-g8x" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="Rjr-rO-hGW"/>
+                <constraint firstItem="28W-1K-xs7" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="XMy-D4-KQK"/>
+                <constraint firstItem="qrG-kH-VRz" firstAttribute="centerY" secondItem="yx5-8B-fUi" secondAttribute="centerY" id="cMa-5P-a2v"/>
+                <constraint firstItem="6eO-qE-g8x" firstAttribute="leading" secondItem="qrG-kH-VRz" secondAttribute="trailing" constant="5" id="cPj-aW-vdE"/>
+                <constraint firstAttribute="trailing" secondItem="28W-1K-xs7" secondAttribute="trailing" constant="13" id="dez-R9-Ydg"/>
+                <constraint firstAttribute="trailing" secondItem="fGG-J1-J8q" secondAttribute="trailing" id="j3e-Gz-5as"/>
+                <constraint firstAttribute="bottom" secondItem="fGG-J1-J8q" secondAttribute="bottom" id="jNd-iF-vI9"/>
+                <constraint firstItem="fGG-J1-J8q" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="kze-In-Wh4"/>
+                <constraint firstItem="yx5-8B-fUi" firstAttribute="top" secondItem="7xw-r5-qc1" secondAttribute="bottom" constant="12" id="mYI-IW-FYA"/>
+                <constraint firstItem="jm2-P7-5K9" firstAttribute="leading" secondItem="7xw-r5-qc1" secondAttribute="trailing" constant="5" id="p5D-Tn-1Ab"/>
+                <constraint firstItem="jm2-P7-5K9" firstAttribute="centerY" secondItem="7xw-r5-qc1" secondAttribute="centerY" id="rq7-V0-xTf"/>
+                <constraint firstItem="yx5-8B-fUi" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="tKz-3F-Rw0"/>
+                <constraint firstItem="fGG-J1-J8q" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="vln-aR-Mmc"/>
+                <constraint firstItem="7xw-r5-qc1" firstAttribute="centerY" secondItem="N1D-TV-iWW" secondAttribute="centerY" id="xew-7a-geL"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="lineView" destination="28W-1K-xs7" id="4mk-r2-0Cz"/>
+                <outlet property="songAuth" destination="jm2-P7-5K9" id="rS6-tU-qwV"/>
+                <outlet property="songNameLabel" destination="7xw-r5-qc1" id="fzV-Mi-66B"/>
+                <outlet property="statusLabel" destination="Py1-eU-jUO" id="NYg-Iw-DCP"/>
+                <outlet property="statusView" destination="N1D-TV-iWW" id="wy9-ES-Lla"/>
+                <outlet property="tagView" destination="qrG-kH-VRz" id="za1-QD-1A2"/>
+                <outlet property="uploadName" destination="yx5-8B-fUi" id="WSv-Gx-SCl"/>
+            </connections>
+            <point key="canvasLocation" x="101.44927536231884" y="62.946428571428569"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="home_music_play" width="24" height="24"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Module/Live/View/HomeHotMusicCollectionCell.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCollectionCell.h

@@ -6,11 +6,14 @@
 //
 
 #import <UIKit/UIKit.h>
+#import "HomeHotMusicCellView.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface HomeHotMusicCollectionCell : UICollectionViewCell
 
+- (void)configWithSourceArray:(NSMutableArray *)songArray callback:(HotMusicDetailBlock)callback;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 47 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCollectionCell.m

@@ -0,0 +1,47 @@
+//
+//  HomeHotMusicCollectionCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeHotMusicCollectionCell.h"
+
+@interface HomeHotMusicCollectionCell ()
+
+@property (weak, nonatomic) IBOutlet UIView *containerView;
+
+@property (nonatomic, copy) HotMusicDetailBlock callback;
+
+@end
+
+@implementation HomeHotMusicCollectionCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)configWithSourceArray:(NSMutableArray *)songArray callback:(HotMusicDetailBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    [self.containerView removeAllSubViews];
+    CGFloat width = KPortraitWidth * 0.83;
+    for (NSInteger i = 0; i < songArray.count; i++) {
+        // 添加按钮
+        HomeHotMusicCellView *cell = [HomeHotMusicCellView shareInstance];
+        cell.frame = CGRectMake(0, 80 * i, width, 80);
+        BOOL hideLineView = i == songArray.count - 1 ? YES : NO;
+        MJWeakSelf;
+        [cell configWithMusicModel:songArray[i] hiddenLineView:hideLineView callback:^(NSString * _Nonnull songId) {
+            if (weakSelf.callback) {
+                weakSelf.callback(songId);
+            }
+        }];
+        [self.containerView addSubview:cell];
+    }
+    
+}
+
+@end

+ 57 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCollectionCell.xib

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="HomeHotMusicCollectionCell">
+            <rect key="frame" x="0.0" y="0.0" width="231" height="190"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="231" height="190"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Cgv-oN-4a7">
+                        <rect key="frame" x="0.0" y="0.0" width="231" height="190"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                                <size key="value" width="0.0" height="2"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                                <color key="value" red="0.8980392157" green="0.8980392157" blue="0.8980392157" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                                <real key="value" value="1"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                                <real key="value" value="2"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="Cgv-oN-4a7" secondAttribute="trailing" id="3rT-uf-3UQ"/>
+                <constraint firstItem="Cgv-oN-4a7" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="F4i-Cy-MEs"/>
+                <constraint firstItem="Cgv-oN-4a7" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="eNr-M2-uxB"/>
+                <constraint firstAttribute="bottom" secondItem="Cgv-oN-4a7" secondAttribute="bottom" id="hwr-7Y-2Sh"/>
+            </constraints>
+            <size key="customSize" width="231" height="190"/>
+            <connections>
+                <outlet property="containerView" destination="Cgv-oN-4a7" id="MKg-CN-TCa"/>
+            </connections>
+            <point key="canvasLocation" x="263.04347826086956" y="116.51785714285714"/>
+        </collectionViewCell>
+    </objects>
+</document>

+ 2 - 0
KulexiuForStudent/KulexiuForStudent/Module/Live/View/HomeHotMusicView.h → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.h

@@ -13,6 +13,8 @@ typedef void(^HomeMusicActionBlock)(void);
 
 @interface HomeHotMusicView : UIView
 
+@property (weak, nonatomic) IBOutlet UIView *musicContentView;
+
 + (instancetype)shareInstance;
 
 - (void)homeMusicMore:(HomeMusicActionBlock)callback;

+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Live/View/HomeHotMusicView.m → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.m


+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Module/Live/View/HomeHotMusicView.xib → KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicView.xib

@@ -100,6 +100,9 @@
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="musicContentView" destination="5PX-DV-Tle" id="82H-ul-c1D"/>
+            </connections>
             <point key="canvasLocation" x="100.00000000000001" y="-36.160714285714285"/>
         </view>
     </objects>

+ 19 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentCell.h

@@ -0,0 +1,19 @@
+//
+//  HomeHotTalentCell.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+#import "TalentTeacherModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeHotTalentCell : UICollectionViewCell
+
+- (void)configWithSource:(TalentTeacherModel *)sourceModel;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 48 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentCell.m

@@ -0,0 +1,48 @@
+//
+//  HomeHotTalentCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeHotTalentCell.h"
+
+@interface HomeHotTalentCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *teacherAvatar;
+
+@property (weak, nonatomic) IBOutlet UILabel *teacherName;
+
+@property (weak, nonatomic) IBOutlet UILabel *graduateSchool;
+
+@property (weak, nonatomic) IBOutlet UIView *liveView;
+
+@property (weak, nonatomic) IBOutlet UIView *liveColorView;
+
+@end
+
+@implementation HomeHotTalentCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)configWithSource:(TalentTeacherModel *)sourceModel {
+    if (sourceModel.living) {
+        self.liveView.hidden = NO;
+    }
+    else {
+        self.liveView.hidden = YES;
+    }
+    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:[sourceModel.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    if ([NSString isEmptyString:sourceModel.username]) {
+        self.teacherName.text = [NSString stringWithFormat:@"游客%.0f",sourceModel.userId];
+    }
+    else {
+        self.teacherName.text = [NSString stringWithFormat:@"%@",sourceModel.username];
+    }
+    self.graduateSchool.text = [NSString returnNoNullStringWithString:sourceModel.graduateSchool];
+}
+
+@end

+ 153 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentCell.xib

@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="HomeHotTalentCell">
+            <rect key="frame" x="0.0" y="0.0" width="110" height="150"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="110" height="150"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QRJ-mO-zJO">
+                        <rect key="frame" x="2" y="2" width="106" height="146"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="AqF-It-spJ">
+                                <rect key="frame" x="24" y="17" width="58" height="58"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="58" id="Qhl-va-n5l"/>
+                                    <constraint firstAttribute="width" constant="58" id="fe8-Ou-Cwa"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                        <real key="value" value="2"/>
+                                    </userDefinedRuntimeAttribute>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="29"/>
+                                    </userDefinedRuntimeAttribute>
+                                    <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                        <color key="value" red="0.70588235294117641" green="1" blue="0.95294117647058818" alpha="1" colorSpace="calibratedRGB"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="月半二水" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PcD-yn-vxS">
+                                <rect key="frame" x="12" y="93" width="82" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="vjY-V4-Dql"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="中国音乐学院" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="S4c-t1-3Yg">
+                                <rect key="frame" x="12" y="117" width="82" height="17"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="17" id="L6R-xr-JHX"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0eq-MB-HnX">
+                                <rect key="frame" x="34.5" y="66" width="37" height="18"/>
+                                <subviews>
+                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CQV-RL-RU6">
+                                        <rect key="frame" x="2" y="2" width="33" height="14"/>
+                                        <subviews>
+                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="直播中" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="r9C-td-aZd">
+                                                <rect key="frame" x="4" y="2" width="25" height="10"/>
+                                                <fontDescription key="fontDescription" type="system" pointSize="8"/>
+                                                <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                        </subviews>
+                                        <color key="backgroundColor" systemColor="systemPinkColor"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="33" id="3DD-Nv-ZYj"/>
+                                            <constraint firstItem="r9C-td-aZd" firstAttribute="centerX" secondItem="CQV-RL-RU6" secondAttribute="centerX" id="CL3-oS-WR7"/>
+                                            <constraint firstItem="r9C-td-aZd" firstAttribute="centerY" secondItem="CQV-RL-RU6" secondAttribute="centerY" id="cSx-Se-dzB"/>
+                                            <constraint firstAttribute="height" constant="14" id="dso-lI-eUT"/>
+                                        </constraints>
+                                        <userDefinedRuntimeAttributes>
+                                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                                <real key="value" value="7"/>
+                                            </userDefinedRuntimeAttribute>
+                                        </userDefinedRuntimeAttributes>
+                                    </view>
+                                </subviews>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                <constraints>
+                                    <constraint firstItem="CQV-RL-RU6" firstAttribute="top" secondItem="0eq-MB-HnX" secondAttribute="top" constant="2" id="VUw-3e-QJc"/>
+                                    <constraint firstAttribute="trailing" secondItem="CQV-RL-RU6" secondAttribute="trailing" constant="2" id="Ysf-d1-Up9"/>
+                                    <constraint firstItem="CQV-RL-RU6" firstAttribute="leading" secondItem="0eq-MB-HnX" secondAttribute="leading" constant="2" id="rn4-jS-pvW"/>
+                                    <constraint firstAttribute="bottom" secondItem="CQV-RL-RU6" secondAttribute="bottom" constant="2" id="zpZ-UJ-it9"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="9"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eh3-qI-h6t">
+                                <rect key="frame" x="82" y="8" width="16" height="22"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            </imageView>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="0eq-MB-HnX" firstAttribute="centerX" secondItem="AqF-It-spJ" secondAttribute="centerX" id="4ha-lM-xOP"/>
+                            <constraint firstItem="0eq-MB-HnX" firstAttribute="centerY" secondItem="AqF-It-spJ" secondAttribute="bottom" id="4hu-TR-QAu"/>
+                            <constraint firstItem="AqF-It-spJ" firstAttribute="top" secondItem="QRJ-mO-zJO" secondAttribute="top" constant="17" id="8eB-CE-wKm"/>
+                            <constraint firstItem="S4c-t1-3Yg" firstAttribute="top" secondItem="PcD-yn-vxS" secondAttribute="bottom" constant="4" id="F0j-4p-Fhl"/>
+                            <constraint firstItem="PcD-yn-vxS" firstAttribute="top" secondItem="0eq-MB-HnX" secondAttribute="bottom" constant="9" id="L3T-P9-iJy"/>
+                            <constraint firstAttribute="trailing" secondItem="PcD-yn-vxS" secondAttribute="trailing" constant="12" id="N7b-Za-5rX"/>
+                            <constraint firstItem="S4c-t1-3Yg" firstAttribute="leading" secondItem="QRJ-mO-zJO" secondAttribute="leading" constant="12" id="Rii-NH-CrS"/>
+                            <constraint firstItem="PcD-yn-vxS" firstAttribute="leading" secondItem="QRJ-mO-zJO" secondAttribute="leading" constant="12" id="fs8-JQ-NPs"/>
+                            <constraint firstAttribute="trailing" secondItem="S4c-t1-3Yg" secondAttribute="trailing" constant="12" id="fyR-jX-nrb"/>
+                            <constraint firstItem="AqF-It-spJ" firstAttribute="centerX" secondItem="QRJ-mO-zJO" secondAttribute="centerX" id="ghn-5q-7fh"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="QRJ-mO-zJO" secondAttribute="trailing" constant="2" id="GGJ-tl-sHz"/>
+                <constraint firstAttribute="bottom" secondItem="QRJ-mO-zJO" secondAttribute="bottom" constant="2" id="Rkg-Is-p4l"/>
+                <constraint firstItem="QRJ-mO-zJO" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="2" id="Tav-DU-CyB"/>
+                <constraint firstItem="QRJ-mO-zJO" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="2" id="sMw-Nf-Q0v"/>
+            </constraints>
+            <size key="customSize" width="168" height="183"/>
+            <connections>
+                <outlet property="graduateSchool" destination="S4c-t1-3Yg" id="wYB-Bo-d7v"/>
+                <outlet property="liveColorView" destination="CQV-RL-RU6" id="SUB-wz-3UT"/>
+                <outlet property="liveView" destination="0eq-MB-HnX" id="G0f-AD-yCi"/>
+                <outlet property="teacherAvatar" destination="AqF-It-spJ" id="KPT-vM-DYm"/>
+                <outlet property="teacherName" destination="PcD-yn-vxS" id="nnY-pL-e95"/>
+            </connections>
+            <point key="canvasLocation" x="169.56521739130437" y="113.83928571428571"/>
+        </collectionViewCell>
+    </objects>
+    <resources>
+        <image name="user_default_avatal" width="52" height="52"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+        <systemColor name="systemPinkColor">
+            <color red="1" green="0.17647058823529413" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </systemColor>
+    </resources>
+</document>

+ 23 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentView.h

@@ -0,0 +1,23 @@
+//
+//  HomeHotTalentView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeHotTalentView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *talentContentView;
+
++ (instancetype)shareInstance;
+
+//- (void)homeAlbumMore:(HomeAlbumMoreBlock)callback;
+
++ (CGFloat)getViewHeight;
+@end
+
+NS_ASSUME_NONNULL_END

+ 27 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentView.m

@@ -0,0 +1,27 @@
+//
+//  HomeHotTalentView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeHotTalentView.h"
+
+@implementation HomeHotTalentView
++ (instancetype)shareInstance {
+    HomeHotTalentView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeHotTalentView" owner:nil options:nil] firstObject];
+    return view;
+}
+
++ (CGFloat)getViewHeight {
+    return 200;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 62 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotTalent/HomeHotTalentView.xib

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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="HomeHotTalentView">
+            <rect key="frame" x="0.0" y="0.0" width="623" height="233"/>
+            <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="ocF-cI-geX">
+                    <rect key="frame" x="24" y="30" width="73.5" height="22"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="22" id="cce-8F-ZTG"/>
+                    </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>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TvN-a5-fF0">
+                    <rect key="frame" x="0.0" y="66" width="623" height="146"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="146" id="Iwn-9Q-bda"/>
+                    </constraints>
+                </view>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="yk3-O1-fKs">
+                    <rect key="frame" x="14" y="35" width="4" height="12"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="12" id="5GX-jt-Phz"/>
+                        <constraint firstAttribute="width" constant="4" id="vXT-S1-5L3"/>
+                    </constraints>
+                </imageView>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="TvN-a5-fF0" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="c8p-em-0SR"/>
+                <constraint firstItem="ocF-cI-geX" firstAttribute="centerY" secondItem="yk3-O1-fKs" secondAttribute="centerY" id="d7f-tY-UGC"/>
+                <constraint firstItem="ocF-cI-geX" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="ddX-0C-PSD"/>
+                <constraint firstAttribute="trailing" secondItem="TvN-a5-fF0" secondAttribute="trailing" id="iPn-Om-Feh"/>
+                <constraint firstItem="TvN-a5-fF0" firstAttribute="top" secondItem="ocF-cI-geX" secondAttribute="bottom" constant="14" id="qVZ-Bi-MOx"/>
+                <constraint firstItem="yk3-O1-fKs" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="r3r-b1-RY9"/>
+                <constraint firstItem="ocF-cI-geX" firstAttribute="leading" secondItem="yk3-O1-fKs" secondAttribute="trailing" constant="6" id="s7t-ve-29J"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="talentContentView" destination="TvN-a5-fF0" id="yD2-CZ-Qhm"/>
+            </connections>
+            <point key="canvasLocation" x="63.04347826086957" y="-59.933035714285708"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="home_left" width="4" height="12"/>
+    </resources>
+</document>

+ 19 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCell.h

@@ -0,0 +1,19 @@
+//
+//  HomeHotVideoCell.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+#import "HomeVideoGroupModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeHotVideoCell : UICollectionViewCell
+
+- (void)configWithSource:(HomeVideoGroupModel *)source;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 45 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCell.m

@@ -0,0 +1,45 @@
+//
+//  HomeHotVideoCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeHotVideoCell.h"
+
+@interface HomeHotVideoCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *coverImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseName;
+
+@property (weak, nonatomic) IBOutlet UILabel *teacherName;
+
+@property (weak, nonatomic) IBOutlet UILabel *countLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *subjectLabel;
+
+@end
+
+@implementation HomeHotVideoCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)configWithSource:(HomeVideoGroupModel *)source {
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[source.lessonCoverUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    self.courseName.text = [NSString returnNoNullStringWithString:source.videoGroupName];
+    if ([NSString isEmptyString:source.teacherName]) {
+        self.teacherName.text = [NSString stringWithFormat:@"游客%@",source.teacherId];
+    }
+    else {
+        self.teacherName.text = [NSString stringWithFormat:@"%@",source.teacherName];
+    }
+    self.countLabel.text = [NSString stringWithFormat:@"%zd人在学",source.buyCount];
+    
+    self.subjectLabel.text = [NSString returnNoNullStringWithString:source.subjectName];
+}
+
+@end

+ 153 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCell.xib

@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="HomeHotVideoCell">
+            <rect key="frame" x="0.0" y="0.0" width="168" height="153"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="168" height="153"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleAspectFit" translatesAutoresizingMaskIntoConstraints="NO" id="Z9Y-DS-o2S">
+                        <rect key="frame" x="2" y="2" width="164" height="149"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="wTC-8E-ugs">
+                                <rect key="frame" x="0.0" y="0.0" width="164" height="95"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="95" id="1MD-pj-b6f"/>
+                                </constraints>
+                            </imageView>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iEG-bR-UaR">
+                                <rect key="frame" x="6" y="6" width="28.5" height="13"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="长笛" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t7Q-dI-DuS">
+                                        <rect key="frame" x="5" y="0.0" width="18.5" height="13"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="13" id="X64-z5-Rol"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="system" pointSize="9"/>
+                                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="0.37647058823529411" green="0.37647058823529411" blue="0.37647058823529411" alpha="0.59999999999999998" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="bottom" secondItem="t7Q-dI-DuS" secondAttribute="bottom" id="To8-wX-JuA"/>
+                                    <constraint firstItem="t7Q-dI-DuS" firstAttribute="top" secondItem="iEG-bR-UaR" secondAttribute="top" id="bTC-uv-MHS"/>
+                                    <constraint firstItem="t7Q-dI-DuS" firstAttribute="leading" secondItem="iEG-bR-UaR" secondAttribute="leading" constant="5" id="mSr-sM-8gc"/>
+                                    <constraint firstAttribute="trailing" secondItem="t7Q-dI-DuS" secondAttribute="trailing" constant="5" id="whh-ZK-qOD"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="3"/>
+                                    </userDefinedRuntimeAttribute>
+                                </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="4KZ-pa-CpR">
+                                <rect key="frame" x="11" y="102" width="142" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="lao-V8-wfX"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="749" text="小酷老师" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Ny-Ee-haR">
+                                <rect key="frame" x="11" y="128" width="50" height="15"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NHm-Ob-jBe">
+                                <rect key="frame" x="79" y="133.5" width="4" height="4"/>
+                                <color key="backgroundColor" red="1" green="0.53725490196078429" blue="0.0039215686274509803" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="4" id="ZB8-4x-8jr"/>
+                                    <constraint firstAttribute="width" constant="4" id="gt1-F9-L6E"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="2"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1422人在学" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kAl-tc-ntC">
+                                <rect key="frame" x="87" y="128" width="65" height="15"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <color key="textColor" red="1" green="0.53725490200000003" blue="0.0039215686269999999" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="NHm-Ob-jBe" firstAttribute="centerY" secondItem="4Ny-Ee-haR" secondAttribute="centerY" id="0kg-0F-TKg"/>
+                            <constraint firstAttribute="trailing" secondItem="wTC-8E-ugs" secondAttribute="trailing" id="3D0-1L-YuS"/>
+                            <constraint firstItem="4Ny-Ee-haR" firstAttribute="leading" secondItem="4KZ-pa-CpR" secondAttribute="leading" id="4iA-XR-otT"/>
+                            <constraint firstItem="NHm-Ob-jBe" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="4Ny-Ee-haR" secondAttribute="trailing" constant="4" id="7Ia-I7-SEf"/>
+                            <constraint firstItem="4Ny-Ee-haR" firstAttribute="top" secondItem="4KZ-pa-CpR" secondAttribute="bottom" constant="6" id="7zK-KZ-Yb8"/>
+                            <constraint firstItem="4KZ-pa-CpR" firstAttribute="leading" secondItem="Z9Y-DS-o2S" secondAttribute="leading" constant="11" id="ARz-lR-bqo"/>
+                            <constraint firstItem="wTC-8E-ugs" firstAttribute="leading" secondItem="Z9Y-DS-o2S" secondAttribute="leading" id="Cz7-tf-l2g"/>
+                            <constraint firstItem="iEG-bR-UaR" firstAttribute="top" secondItem="Z9Y-DS-o2S" secondAttribute="top" constant="6" id="ESb-5A-bp8"/>
+                            <constraint firstItem="kAl-tc-ntC" firstAttribute="centerY" secondItem="NHm-Ob-jBe" secondAttribute="centerY" id="F1J-2K-d2x"/>
+                            <constraint firstItem="wTC-8E-ugs" firstAttribute="top" secondItem="Z9Y-DS-o2S" secondAttribute="top" id="HLD-wW-9Jh"/>
+                            <constraint firstItem="kAl-tc-ntC" firstAttribute="leading" secondItem="NHm-Ob-jBe" secondAttribute="trailing" constant="4" id="IJL-s1-EkX"/>
+                            <constraint firstItem="iEG-bR-UaR" firstAttribute="leading" secondItem="Z9Y-DS-o2S" secondAttribute="leading" constant="6" id="T2f-qa-HN9"/>
+                            <constraint firstAttribute="trailing" secondItem="kAl-tc-ntC" secondAttribute="trailing" constant="12" id="dYW-Ui-C47"/>
+                            <constraint firstItem="4KZ-pa-CpR" firstAttribute="top" secondItem="wTC-8E-ugs" secondAttribute="bottom" constant="7" id="n8d-1d-I45"/>
+                            <constraint firstAttribute="trailing" secondItem="4KZ-pa-CpR" secondAttribute="trailing" constant="11" id="xmO-bF-zUB"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                                <real key="value" value="1"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                                <size key="value" width="0.0" height="2"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                                <color key="value" red="0.89803921568627454" green="0.89803921568627454" blue="0.89803921568627454" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="YES"/>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="Z9Y-DS-o2S" secondAttribute="bottom" constant="2" id="6bd-bt-lLy"/>
+                <constraint firstItem="Z9Y-DS-o2S" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="2" id="8EY-rY-zVf"/>
+                <constraint firstItem="Z9Y-DS-o2S" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="2" id="D5y-CV-jga"/>
+                <constraint firstAttribute="trailing" secondItem="Z9Y-DS-o2S" secondAttribute="trailing" constant="2" id="ZB7-Gj-aCl"/>
+            </constraints>
+            <size key="customSize" width="294" height="193"/>
+            <connections>
+                <outlet property="countLabel" destination="kAl-tc-ntC" id="nlN-Js-BZG"/>
+                <outlet property="courseName" destination="4KZ-pa-CpR" id="FF1-fh-P98"/>
+                <outlet property="coverImage" destination="wTC-8E-ugs" id="z93-t8-kqz"/>
+                <outlet property="subjectLabel" destination="t7Q-dI-DuS" id="g1q-ZG-oNa"/>
+                <outlet property="teacherName" destination="4Ny-Ee-haR" id="KeA-wn-Vzl"/>
+            </connections>
+            <point key="canvasLocation" x="121.73913043478262" y="127.56696428571428"/>
+        </collectionViewCell>
+    </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 26 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCourseView.h

@@ -0,0 +1,26 @@
+//
+//  HomeHotVideoCourseView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^HomeMoreVideoBlock)(void);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeHotVideoCourseView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *videoContentView;
+
++ (instancetype)shareInstance;
+
+- (void)homeVideoMore:(HomeMoreVideoBlock)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 41 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCourseView.m

@@ -0,0 +1,41 @@
+//
+//  HomeHotVideoCourseView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/29.
+//
+
+#import "HomeHotVideoCourseView.h"
+
+@interface HomeHotVideoCourseView ()
+
+@property (nonatomic, copy) HomeMoreVideoBlock callback;
+
+@end
+
+@implementation HomeHotVideoCourseView
+
++ (instancetype)shareInstance {
+    HomeHotVideoCourseView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeHotVideoCourseView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)homeVideoMore:(HomeMoreVideoBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
++ (CGFloat)getViewHeight {
+    return 220.0f;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 108 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotVideoCourse/HomeHotVideoCourseView.xib

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <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="HomeHotVideoCourseView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="220"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ImZ-xL-12C">
+                    <rect key="frame" x="355" y="33.5" width="45" height="18"/>
+                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="AcK-bR-c3f"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="9"/>
+                        </userDefinedRuntimeAttribute>
+                    </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="EIe-qp-TsO">
+                    <rect key="frame" x="24" y="30" width="92" height="25"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="25" id="uPk-du-hdF"/>
+                    </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>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Kff-dl-GsO">
+                    <rect key="frame" x="0.0" y="67" width="414" height="153"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="153" id="drX-7K-Af3"/>
+                    </constraints>
+                </view>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more" translatesAutoresizingMaskIntoConstraints="NO" id="QNi-gh-Evy">
+                    <rect key="frame" x="389" y="38.5" width="6" height="8"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="8" id="GlH-pA-QXZ"/>
+                        <constraint firstAttribute="width" constant="6" id="Ukq-f5-bGl"/>
+                    </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="Nbu-3T-s6e">
+                    <rect key="frame" x="361" y="35.5" width="25" height="14.5"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oQF-oZ-Pbs">
+                    <rect key="frame" x="361" y="27.5" width="34" height="30"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="30" id="EY9-fK-W16"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                    <state key="normal">
+                        <color key="titleColor" red="0.46666666670000001" green="0.46666666670000001" blue="0.46666666670000001" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                    </state>
+                </button>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="tFO-hR-fSY">
+                    <rect key="frame" x="14" y="36.5" width="4" height="12"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="4" id="F2X-9W-Jbc"/>
+                        <constraint firstAttribute="height" constant="12" id="OWn-BU-LHJ"/>
+                    </constraints>
+                </imageView>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="QNi-gh-Evy" firstAttribute="leading" secondItem="Nbu-3T-s6e" secondAttribute="trailing" constant="3" id="0pg-lF-5ou"/>
+                <constraint firstItem="tFO-hR-fSY" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="A87-gJ-d0d"/>
+                <constraint firstItem="QNi-gh-Evy" firstAttribute="trailing" secondItem="ImZ-xL-12C" secondAttribute="trailing" constant="-5" id="Bti-gD-Ii3"/>
+                <constraint firstItem="Kff-dl-GsO" firstAttribute="top" secondItem="EIe-qp-TsO" secondAttribute="bottom" constant="12" id="Cgu-9X-JpY"/>
+                <constraint firstItem="oQF-oZ-Pbs" firstAttribute="centerY" secondItem="EIe-qp-TsO" secondAttribute="centerY" id="DOP-FW-z0s"/>
+                <constraint firstItem="Nbu-3T-s6e" firstAttribute="centerY" secondItem="EIe-qp-TsO" secondAttribute="centerY" id="Dov-kK-syB"/>
+                <constraint firstItem="EIe-qp-TsO" firstAttribute="leading" secondItem="tFO-hR-fSY" secondAttribute="trailing" constant="6" id="ETt-w1-ZU5"/>
+                <constraint firstItem="EIe-qp-TsO" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="J92-sS-Hwf"/>
+                <constraint firstItem="EIe-qp-TsO" firstAttribute="centerY" secondItem="tFO-hR-fSY" secondAttribute="centerY" id="ZdY-76-AKV"/>
+                <constraint firstItem="QNi-gh-Evy" firstAttribute="trailing" secondItem="oQF-oZ-Pbs" secondAttribute="trailing" id="dYU-KQ-3GP"/>
+                <constraint firstItem="ImZ-xL-12C" firstAttribute="centerY" secondItem="EIe-qp-TsO" secondAttribute="centerY" id="k4f-yA-IaN"/>
+                <constraint firstItem="Nbu-3T-s6e" firstAttribute="leading" secondItem="ImZ-xL-12C" secondAttribute="leading" constant="6" id="oaE-qX-yfy"/>
+                <constraint firstAttribute="trailing" secondItem="ImZ-xL-12C" secondAttribute="trailing" constant="14" id="p3s-MS-gkU"/>
+                <constraint firstAttribute="trailing" secondItem="Kff-dl-GsO" secondAttribute="trailing" id="pVp-yG-Xlz"/>
+                <constraint firstItem="Nbu-3T-s6e" firstAttribute="leading" secondItem="oQF-oZ-Pbs" secondAttribute="leading" id="sbR-d6-ncd"/>
+                <constraint firstItem="Kff-dl-GsO" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="u1y-W4-PXG"/>
+                <constraint firstItem="QNi-gh-Evy" firstAttribute="centerY" secondItem="EIe-qp-TsO" secondAttribute="centerY" id="yIg-fk-weo"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="videoContentView" destination="Kff-dl-GsO" id="fB7-RQ-UlM"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="-155.02232142857142"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="home_left" width="4" height="12"/>
+        <image name="home_more" width="6" height="8"/>
+    </resources>
+</document>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/PublicNoticeView.h

@@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)moreCallback:(NoticeMoreCallback)callback;
 
-- (CGFloat)getViewHeight;
++ (CGFloat)getViewHeight;
 
 @end
 

+ 2 - 2
KulexiuForStudent/KulexiuForStudent/Module/Home/View/PublicNoticeView.m

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

+ 7 - 11
KulexiuForStudent/KulexiuForStudent/Module/Home/View/PublicNoticeView.xib

@@ -4,25 +4,24 @@
     <dependencies>
         <deployment identifier="iOS"/>
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
         <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PublicNoticeView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="60"/>
+            <rect key="frame" x="0.0" y="0.0" width="414" height="68"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="18s-Im-HaS">
-                    <rect key="frame" x="14" y="8" width="386" height="44"/>
+                    <rect key="frame" x="14" y="12" width="386" height="44"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="notice_icon" translatesAutoresizingMaskIntoConstraints="NO" id="Emb-yN-fCJ">
-                            <rect key="frame" x="10" y="11" width="23" height="22"/>
+                            <rect key="frame" x="10" y="9" width="27" height="26"/>
                         </imageView>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FYH-Km-v6L">
-                            <rect key="frame" x="38" y="0.0" width="299" height="44"/>
-                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <rect key="frame" x="42" y="0.0" width="295" height="44"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         </view>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="l4x-1S-fJR">
                             <rect key="frame" x="342" y="0.0" width="44" height="44"/>
@@ -36,7 +35,7 @@
                             </connections>
                         </button>
                     </subviews>
-                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <color key="backgroundColor" red="0.99607843137254903" green="0.97647058823529409" blue="0.95686274509803915" alpha="1" colorSpace="calibratedRGB"/>
                     <constraints>
                         <constraint firstAttribute="bottom" secondItem="l4x-1S-fJR" secondAttribute="bottom" id="1Jd-Qb-ShD"/>
                         <constraint firstItem="Emb-yN-fCJ" firstAttribute="centerY" secondItem="18s-Im-HaS" secondAttribute="centerY" id="Cfw-Em-J6j"/>
@@ -85,10 +84,7 @@
         </view>
     </objects>
     <resources>
-        <image name="notice_icon" width="23" height="22"/>
+        <image name="notice_icon" width="27" height="26"/>
         <image name="notice_more" width="18" height="18"/>
-        <systemColor name="systemBackgroundColor">
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-        </systemColor>
     </resources>
 </document>

File diff suppressed because it is too large
+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/accomapny_animation.json


BIN
KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_0.png


BIN
KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_1.png


BIN
KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_2.png


BIN
KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/accomapny_animation_3.png


BIN
KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/live_animation_0.png


BIN
KulexiuForStudent/KulexiuForStudent/Module/Home/View/RecentCourse/AnimationSource/images/live_animation_1.png


Some files were not shown because too many files changed in this diff