Browse Source

首页功能

Steven 2 years ago
parent
commit
ce51ffed16
25 changed files with 1018 additions and 116 deletions
  1. 40 0
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 45 93
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 17 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  5. 130 4
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m
  6. 1 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.h
  7. 7 4
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.m
  8. 25 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeTeacherLiveModel.h
  9. 130 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeTeacherLiveModel.m
  10. 15 12
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.xib
  11. 2 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.h
  12. 73 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.m
  13. 4 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomePageBodyView.h
  14. 120 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/HomePageBodyView.m
  15. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/TeacherStyleFlowLayout.h
  16. 12 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/TeacherStyleFlowLayout.m
  17. 8 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.m
  18. 1 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.xib
  19. 19 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeHotStyleCell.h
  20. 42 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeHotStyleCell.m
  21. 121 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeHotStyleCell.xib
  22. 19 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeTempLiveCell.h
  23. 41 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeTempLiveCell.m
  24. 130 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeTempLiveCell.xib
  25. 0 1
      KulexiuForStudent/KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m

+ 40 - 0
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -429,6 +429,10 @@
 		BC27A076280FF61300F91E27 /* AccompanyDetailBottomView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC27A075280FF61300F91E27 /* AccompanyDetailBottomView.xib */; };
 		BC27A079280FFA2200F91E27 /* EvaluateDetailModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC27A078280FFA2200F91E27 /* EvaluateDetailModel.m */; };
 		BC28582B2809036D0024697C /* StudentInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC28582A2809036D0024697C /* StudentInfoModel.m */; };
+		BC2DFF4B28BDFE740056105A /* HomeTeacherLiveModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2DFF4A28BDFE730056105A /* HomeTeacherLiveModel.m */; };
+		BC2DFF4E28BE068D0056105A /* TeacherStyleFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2DFF4D28BE068D0056105A /* TeacherStyleFlowLayout.m */; };
+		BC2DFF5728BE143A0056105A /* HomeTempLiveCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2DFF5528BE143A0056105A /* HomeTempLiveCell.m */; };
+		BC2DFF5828BE143A0056105A /* HomeTempLiveCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC2DFF5628BE143A0056105A /* HomeTempLiveCell.xib */; };
 		BC40B9F82811767A00DEC0D1 /* HotInformationHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40B9F72811767A00DEC0D1 /* HotInformationHeadView.m */; };
 		BC40B9FA2811768400DEC0D1 /* HotInformationHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC40B9F92811768400DEC0D1 /* HotInformationHeadView.xib */; };
 		BC40B9FE281177BD00DEC0D1 /* HomeInformationCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC40B9FC281177BD00DEC0D1 /* HomeInformationCell.m */; };
@@ -878,6 +882,8 @@
 		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 */; };
+		BCFDA66728BDF06E0022B497 /* HomeHotStyleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFDA66528BDF06E0022B497 /* HomeHotStyleCell.m */; };
+		BCFDA66828BDF06E0022B497 /* HomeHotStyleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFDA66628BDF06E0022B497 /* HomeHotStyleCell.xib */; };
 		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 */; };
@@ -1700,6 +1706,13 @@
 		BC27A078280FFA2200F91E27 /* EvaluateDetailModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EvaluateDetailModel.m; sourceTree = "<group>"; };
 		BC2858292809036C0024697C /* StudentInfoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StudentInfoModel.h; sourceTree = "<group>"; };
 		BC28582A2809036D0024697C /* StudentInfoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StudentInfoModel.m; sourceTree = "<group>"; };
+		BC2DFF4928BDFE730056105A /* HomeTeacherLiveModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeTeacherLiveModel.h; sourceTree = "<group>"; };
+		BC2DFF4A28BDFE730056105A /* HomeTeacherLiveModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeTeacherLiveModel.m; sourceTree = "<group>"; };
+		BC2DFF4C28BE068D0056105A /* TeacherStyleFlowLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TeacherStyleFlowLayout.h; sourceTree = "<group>"; };
+		BC2DFF4D28BE068D0056105A /* TeacherStyleFlowLayout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TeacherStyleFlowLayout.m; sourceTree = "<group>"; };
+		BC2DFF5428BE143A0056105A /* HomeTempLiveCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeTempLiveCell.h; sourceTree = "<group>"; };
+		BC2DFF5528BE143A0056105A /* HomeTempLiveCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeTempLiveCell.m; sourceTree = "<group>"; };
+		BC2DFF5628BE143A0056105A /* HomeTempLiveCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeTempLiveCell.xib; sourceTree = "<group>"; };
 		BC40B9F62811767A00DEC0D1 /* HotInformationHeadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HotInformationHeadView.h; sourceTree = "<group>"; };
 		BC40B9F72811767A00DEC0D1 /* HotInformationHeadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HotInformationHeadView.m; sourceTree = "<group>"; };
 		BC40B9F92811768400DEC0D1 /* HotInformationHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HotInformationHeadView.xib; sourceTree = "<group>"; };
@@ -2396,6 +2409,9 @@
 		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>"; };
+		BCFDA66428BDF06E0022B497 /* HomeHotStyleCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotStyleCell.h; sourceTree = "<group>"; };
+		BCFDA66528BDF06E0022B497 /* HomeHotStyleCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotStyleCell.m; sourceTree = "<group>"; };
+		BCFDA66628BDF06E0022B497 /* HomeHotStyleCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotStyleCell.xib; 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>"; };
@@ -2783,6 +2799,8 @@
 				BC802DA628BC62390079E350 /* HomeHotMusicModel.m */,
 				BCFDA66128BDC3640022B497 /* TalentTeacherModel.h */,
 				BCFDA66028BDC3630022B497 /* TalentTeacherModel.m */,
+				BC2DFF4928BDFE730056105A /* HomeTeacherLiveModel.h */,
+				BC2DFF4A28BDFE730056105A /* HomeTeacherLiveModel.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -2790,6 +2808,7 @@
 		275FA1F627E7356A00CFEA2E /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BCFDA66328BDF0530022B497 /* TeacherStyle */,
 				BCFDA65928BCAE7C0022B497 /* HomePageView */,
 				BCFDA63328BCA1850022B497 /* RecentCourse */,
 				BCFDA62728BC99410022B497 /* HomeBanner */,
@@ -5795,12 +5814,27 @@
 			children = (
 				BCFDA65A28BCAEB10022B497 /* HomePageBodyView.h */,
 				BCFDA65B28BCAEB10022B497 /* HomePageBodyView.m */,
+				BC2DFF4C28BE068D0056105A /* TeacherStyleFlowLayout.h */,
+				BC2DFF4D28BE068D0056105A /* TeacherStyleFlowLayout.m */,
 				BCFDA65D28BCAEC80022B497 /* HomeInformationBodyView.h */,
 				BCFDA65E28BCAEC80022B497 /* HomeInformationBodyView.m */,
 			);
 			path = HomePageView;
 			sourceTree = "<group>";
 		};
+		BCFDA66328BDF0530022B497 /* TeacherStyle */ = {
+			isa = PBXGroup;
+			children = (
+				BCFDA66428BDF06E0022B497 /* HomeHotStyleCell.h */,
+				BCFDA66528BDF06E0022B497 /* HomeHotStyleCell.m */,
+				BCFDA66628BDF06E0022B497 /* HomeHotStyleCell.xib */,
+				BC2DFF5428BE143A0056105A /* HomeTempLiveCell.h */,
+				BC2DFF5528BE143A0056105A /* HomeTempLiveCell.m */,
+				BC2DFF5628BE143A0056105A /* HomeTempLiveCell.xib */,
+			);
+			path = TeacherStyle;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -6020,6 +6054,7 @@
 				BC8A45AF283DC33400094BBB /* SoundCheckView.xib in Resources */,
 				BCFDA63828BCA1C60022B497 /* HomeRecentCourseView.xib in Resources */,
 				BC119270280FAF7D00A716F7 /* AccompanyCourseInfoCell.xib in Resources */,
+				BC2DFF5828BE143A0056105A /* HomeTempLiveCell.xib in Resources */,
 				BCFDA65528BCA2000022B497 /* accomapny_animation_0.png in Resources */,
 				BCC583C828A9EC6400BAB4CF /* cloud_animation_10.png in Resources */,
 				BCC583C328A9EC6400BAB4CF /* cloud_animation_14.png in Resources */,
@@ -6168,6 +6203,7 @@
 				BC8A45B3283DC33400094BBB /* CloudFeedbackView.xib in Resources */,
 				BCFDA65228BCA2000022B497 /* musicRoom_animation_0.png in Resources */,
 				BCDE35882897B40000A9A560 /* shareImage@2x.png in Resources */,
+				BCFDA66828BDF06E0022B497 /* HomeHotStyleCell.xib in Resources */,
 				BC802D9E28BC546B0079E350 /* HomeHotMusicCollectionCell.xib in Resources */,
 				275E8AB327E18F8800DD3F6E /* Main.storyboard in Resources */,
 				BC8A45A8283DC33400094BBB /* KSCloudBeatView.xib in Resources */,
@@ -6335,6 +6371,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				BCFDA66728BDF06E0022B497 /* HomeHotStyleCell.m in Sources */,
 				2779354827E324A60010E277 /* NSObject+ReadDocument.m in Sources */,
 				277935CB27E324A90010E277 /* TAAbstractDotView.m in Sources */,
 				2723B5C627F157B100E0B90B /* GroupListViewCell.m in Sources */,
@@ -6629,6 +6666,7 @@
 				275FA22F27E7356B00CFEA2E /* ShopMallViewController.m in Sources */,
 				BCB6347227F6D29600ACFDCF /* KSChatInputView.m in Sources */,
 				275E8AAA27E18F8800DD3F6E /* AppDelegate.m in Sources */,
+				BC2DFF4B28BDFE740056105A /* HomeTeacherLiveModel.m in Sources */,
 				2779356427E324A70010E277 /* KSFullDatePicker.m in Sources */,
 				BC0D1F6D281013DF00C5D9E5 /* MyVideoCourseBodyView.m in Sources */,
 				2723B5CF27F157BE00E0B90B /* GroupMemberModel.m in Sources */,
@@ -6651,6 +6689,7 @@
 				BC542E612840A60E00633781 /* UseBodyView.m in Sources */,
 				2779351D27E324A60010E277 /* NSString+zh_SafeAccess.m in Sources */,
 				BC8A45A6283DC33400094BBB /* ScoreAnimationView.m in Sources */,
+				BC2DFF4E28BE068D0056105A /* TeacherStyleFlowLayout.m in Sources */,
 				2779351A27E324A60010E277 /* NSObject+AssociatedObject.m in Sources */,
 				BCB635A627F6D90600ACFDCF /* KSLiveEmptyView.m in Sources */,
 				2779359227E324A80010E277 /* WMPlayer.m in Sources */,
@@ -6868,6 +6907,7 @@
 				2723B5A327F1578300E0B90B /* KSChatListViewController.m in Sources */,
 				BC8A45A1283DC33400094BBB /* KSCloudSettingView.m in Sources */,
 				BC119271280FAF7D00A716F7 /* AccompanyCourseInfoCell.m in Sources */,
+				BC2DFF5728BE143A0056105A /* HomeTempLiveCell.m in Sources */,
 				BC8C2C592823F57100FBA5D5 /* AddressListModel.m in Sources */,
 				2779357527E324A70010E277 /* LifeButton.m in Sources */,
 				27F9032C27E87C2E00C08A19 /* KSNetworkAlert.m in Sources */,

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


+ 45 - 93
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -327,38 +327,6 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "8DB26C48-6635-4828-8D19-00B85EACBC87"
-            shouldBeEnabled = "No"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "388"
-            endingLineNumber = "388"
-            landmarkName = "-requestNotice"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "F28FC635-A864-490E-86E4-29EA85185C31"
-            shouldBeEnabled = "No"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "640"
-            endingLineNumber = "640"
-            landmarkName = "-requestTeacherStyle"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "FCB14E61-608A-420C-8647-6FA260784A4F"
             shouldBeEnabled = "No"
             ignoreCount = "0"
@@ -503,54 +471,6 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "84DE9E35-E62D-4C6B-AB45-37F619865FD1"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "754"
-            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
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "A8FC4392-7631-409C-A01A-EB2D3FF3209E"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
@@ -558,8 +478,8 @@
             filePath = "KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "842"
-            endingLineNumber = "842"
+            startingLineNumber = "841"
+            endingLineNumber = "841"
             landmarkName = "LiveVideoRoomViewController"
             landmarkType = "3">
          </BreakpointContent>
@@ -599,32 +519,64 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "DB683E1B-1189-43D8-B1E5-275D3E85EA08"
-            shouldBeEnabled = "No"
+            uuid = "370C1492-C81C-498B-86B4-0D7C6A78CD91"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "650"
+            endingLineNumber = "650"
+            landmarkName = "-requestLiveList"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "22467387-5679-4449-9BB9-501D91D23C0F"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "657"
+            endingLineNumber = "657"
+            landmarkName = "-requestLiveList"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "BEE7E2A1-DDA6-4112-8335-BB5135F0B33E"
+            shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m"
+            filePath = "KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "467"
-            endingLineNumber = "467"
-            landmarkName = "-requestCourseInfo"
+            startingLineNumber = "55"
+            endingLineNumber = "55"
+            landmarkName = "-tableView:numberOfRowsInSection:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "0C679378-30FF-4407-88BD-9771BEFD40F2"
+            uuid = "93CBB2C8-2270-4AAE-8188-10A6F79D324A"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m"
+            filePath = "KulexiuForStudent/Module/Home/View/HomePageView/HomeInformationBodyView.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "554"
-            endingLineNumber = "554"
-            landmarkName = "-requestTalentSource"
+            startingLineNumber = "60"
+            endingLineNumber = "60"
+            landmarkName = "-tableView:cellForRowAtIndexPath:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

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

@@ -353,8 +353,9 @@
     [self requestNewsList];
     [self requestNotice];
     [self requestCourseInfo];
-    [self requestTeacherStyle];
     [self requestHotAlbum];
+    [self requestTeacherStyle];
+    [self requestLiveList];
     
     dispatch_group_notify(self.requestGroup, dispatch_get_main_queue(), ^{
         [self removehub];
@@ -394,7 +395,6 @@
                 self.noticeArray = [NSMutableArray array];
                 self.noticeTitleArray = [NSMutableArray array];
             }
-            
         }
         else {
             [self MBPShow:MESSAGEKEY];
@@ -643,6 +643,21 @@
     }];
 }
 
+- (void)requestLiveList {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager queryTeacherLivingListRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
 - (void)refreshTeachView {
     if (self.teacherArray.count) {
         self.teachViewHeight = [self.teacherView getViewHeightWithSourceCount:self.teacherArray.count];

+ 130 - 4
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/NewHomeViewController.m

@@ -7,6 +7,7 @@
 
 #import "NewHomeViewController.h"
 #import "KSBaseWKWebViewController.h"
+#import "InstrumentChooseViewController.h"
 #import "NotiferMessageViewController.h"
 #import "HomeNavSearchView.h"
 #import "KSScanViewController.h"
@@ -59,6 +60,9 @@
 #import "HomePageBodyView.h"
 #import "HomeInformationBodyView.h"
 
+#import "TeacherStyleModel.h"
+#import "HomeTeacherLiveModel.h"
+
 #define BUTTONWIDTH (65)
 #define BUTTONHEIGHT (80)
 
@@ -139,6 +143,11 @@
 
 @property (nonatomic, assign) CGFloat headViewHeight;
 
+
+@property (nonatomic, strong) NSMutableArray *teacherArray;
+@property (nonatomic, strong) NSMutableArray *liveListArray;
+@property (nonatomic, strong) NSMutableArray *informationArray;
+
 @end
 
 @implementation NewHomeViewController
@@ -151,7 +160,6 @@
     self.isFirstLoad = YES;
     [self configNavView];
     [self configUI];
-    [self requestData];
 }
 
 - (void)requestTrackAuth {
@@ -340,6 +348,7 @@
         [self requestUserInfo:YES];
     }
     [self requestUnreadCount];
+    
 }
 
 - (void)requestUnreadCount {
@@ -380,7 +389,7 @@
             if ([NSString isEmptyString:rongToken]) {
                 [USER_MANAGER queryUserInfoConnectRongCloud:YES];
             }
-//            [self refreshNavView:checkSubject];
+            [self refreshSource:checkSubject];
         }
         else {
             [self MBPShow:MESSAGEKEY];
@@ -390,6 +399,35 @@
     }];
 }
 
+- (void)refreshSource:(BOOL)checkSubject {
+    if (checkSubject) {
+        if ([NSString isEmptyString:self.mineInfo.subjectName]) {
+            [self showInstrumentView:YES];
+        }
+        else {
+            [self requestData];
+        }
+    }
+}
+
+- (void)showInstrumentView:(BOOL)hideBackButton {
+    InstrumentChooseViewController *ctrl = [[InstrumentChooseViewController alloc] init];
+    MJWeakSelf;
+    [ctrl chooseCallback:^{
+        [weakSelf requestUserInfo:NO];
+        [weakSelf requestData];
+    }];
+    if (hideBackButton) {
+        ctrl.isModalPresent = YES;
+        CustomNavViewController *navCrtl = [[CustomNavViewController alloc] initWithRootViewController:ctrl];
+        navCrtl.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self.navigationController presentViewController:navCrtl animated:YES completion:nil];
+    }
+    else {
+        [self.navigationController pushViewController:ctrl animated:YES];
+    }
+}
+
 - (void)requestNewsList {
     dispatch_group_enter(self.requestGroup);
     [KSNetworkingManager homeNewsList:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
@@ -427,7 +465,7 @@
                 HomeMessageModel *model = [[HomeMessageModel alloc] initWithDictionary:parm];
                 [informationInfoArray addObject:model];
             }
-            self.dataArray = [NSMutableArray arrayWithArray:informationInfoArray];
+            self.informationArray = [NSMutableArray arrayWithArray:informationInfoArray];
         }
         else {
             [self MBPShow:MESSAGEKEY];
@@ -516,7 +554,6 @@
                 self.noticeArray = [NSMutableArray array];
                 self.noticeTitleArray = [NSMutableArray array];
             }
-            
         }
         else {
             [self MBPShow:MESSAGEKEY];
@@ -568,6 +605,49 @@
     }];
 }
 
+- (void)requestTeacherStyle {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager homeQueryTeacherStyle: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 *styleArray = [NSMutableArray array];
+            for (NSDictionary *parm in sourceArray) {
+                TeacherStyleModel *model = [[TeacherStyleModel alloc] initWithDictionary:parm];
+                [styleArray addObject:model];
+            }
+            self.teacherArray = [NSMutableArray arrayWithArray:styleArray];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        // 回调
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+- (void)requestLiveList {
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager queryTeacherLivingListRequest: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 *liveListArray = [NSMutableArray array];
+            for (NSDictionary *parm in sourceArray) {
+                HomeTeacherLiveModel *model = [[HomeTeacherLiveModel alloc] initWithDictionary:parm];
+                [liveListArray addObject:model];
+            }
+            self.liveListArray = [NSMutableArray arrayWithArray:liveListArray];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
 - (void)requestData {
     [self showhud];
     [self requestNewsList];
@@ -578,6 +658,8 @@
     [self requestHotAlbum];
     [self requestHotMusic];
     
+    [self requestTeacherStyle];
+    [self requestLiveList];
     dispatch_group_notify(self.requestGroup, dispatch_get_main_queue(), ^{
         [self removehub];
         [self.scrollView.mj_header endRefreshing];
@@ -601,6 +683,25 @@
     // 刷新排序
     [self refreshViewLocation];
     [self refreshHeadHeight];
+    
+    [self refreshPageView];
+}
+
+- (void)refreshPageView {
+    for (NSInteger i = 0; i < self.listViewArray.count; i++) {
+        id view = self.listViewArray[i];
+        if ([view isKindOfClass:[HomePageBodyView class]]) {
+            HomePageBodyView *styleView = (HomePageBodyView *)view;
+            styleView.styleArray = [self.teacherArray mutableCopy];
+            styleView.liveArray = [self.liveListArray mutableCopy];
+            [styleView beginFirstRefresh];
+        }
+        else if ([view isKindOfClass:[HomeInformationBodyView class]]) {
+            HomeInformationBodyView *informationView = (HomeInformationBodyView *)view;
+            informationView.informationArray = [self.informationArray mutableCopy];
+            [informationView beginFirstRefresh];
+        }
+    }
 }
 
 - (void)refreshTalentView {
@@ -831,6 +932,8 @@
         [self.listViewArray replaceObjectAtIndex:index withObject:listView];
         self.listViewArray[index] = listView;
         listView.selectIndex = index;
+        listView.styleArray = [self.teacherArray mutableCopy];
+        listView.liveArray = [self.liveListArray mutableCopy];
         [listView beginFirstRefresh];
         return listView;
     }
@@ -840,6 +943,7 @@
         [self.listViewArray replaceObjectAtIndex:index withObject:listView];
         self.listViewArray[index] = listView;
         listView.selectIndex = index;
+        listView.informationArray = [self.informationArray mutableCopy];
         [listView beginFirstRefresh];
         return listView;
     }
@@ -1556,6 +1660,28 @@
     ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/liveClass"];
     [self.navigationController pushViewController:ctrl animated:YES];
 }
+
+- (NSMutableArray *)informationArray {
+    if (!_informationArray) {
+        _informationArray = [NSMutableArray array];
+    }
+    return _informationArray;
+}
+
+- (NSMutableArray *)teacherArray {
+    if (!_teacherArray) {
+        _teacherArray = [NSMutableArray array];
+    }
+    return _teacherArray;
+}
+
+- (NSMutableArray *)liveListArray {
+    if (!_liveListArray) {
+        _liveListArray = [NSMutableArray array];
+    }
+    return _liveListArray;
+}
+
 /*
 #pragma mark - Navigation
 

+ 1 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.h

@@ -27,6 +27,7 @@
 @property (nonatomic, assign) NSInteger sortNumber;
 @property (nonatomic, strong) NSString *albumName;
 @property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *favorite;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 7 - 4
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.m

@@ -24,7 +24,7 @@ NSString *const kHomeAlbumModelHotFlag = @"hotFlag";
 NSString *const kHomeAlbumModelSortNumber = @"sortNumber";
 NSString *const kHomeAlbumModelAlbumName = @"albumName";
 NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
-
+NSString *const kHomeAlbumModelFavorite = @"favorite";
 
 @interface HomeAlbumModel ()
 
@@ -50,7 +50,7 @@ NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
 @synthesize sortNumber = _sortNumber;
 @synthesize albumName = _albumName;
 @synthesize updateTime = _updateTime;
-
+@synthesize favorite = _favorite;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
 {
@@ -80,7 +80,7 @@ NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
             self.sortNumber = [[self objectOrNilForKey:kHomeAlbumModelSortNumber fromDictionary:dict] integerValue];
             self.albumName = [self objectOrNilForKey:kHomeAlbumModelAlbumName fromDictionary:dict];
             self.updateTime = [self objectOrNilForKey:kHomeAlbumModelUpdateTime fromDictionary:dict];
-
+            self.favorite = [self objectOrNilForKey:kHomeAlbumModelFavorite fromDictionary:dict];
     }
     
     return self;
@@ -106,7 +106,7 @@ NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
     [mutableDict setValue:[NSNumber numberWithInteger:self.sortNumber] forKey:kHomeAlbumModelSortNumber];
     [mutableDict setValue:self.albumName forKey:kHomeAlbumModelAlbumName];
     [mutableDict setValue:self.updateTime forKey:kHomeAlbumModelUpdateTime];
-
+    [mutableDict setValue:self.favorite forKey:kHomeAlbumModelFavorite];
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
@@ -149,6 +149,7 @@ NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
     self.sortNumber = [aDecoder decodeIntegerForKey:kHomeAlbumModelSortNumber];
     self.albumName = [aDecoder decodeObjectForKey:kHomeAlbumModelAlbumName];
     self.updateTime = [aDecoder decodeObjectForKey:kHomeAlbumModelUpdateTime];
+    self.favorite = [aDecoder decodeObjectForKey:kHomeAlbumModelFavorite];
     return self;
 }
 
@@ -171,6 +172,7 @@ NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
     [aCoder encodeInteger:_sortNumber forKey:kHomeAlbumModelSortNumber];
     [aCoder encodeObject:_albumName forKey:kHomeAlbumModelAlbumName];
     [aCoder encodeObject:_updateTime forKey:kHomeAlbumModelUpdateTime];
+    [aCoder encodeObject:_favorite forKey:kHomeAlbumModelFavorite];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -195,6 +197,7 @@ NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
         copy.sortNumber = self.sortNumber;
         copy.albumName = [self.albumName copyWithZone:zone];
         copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.favorite = [self.favorite copyWithZone:zone];
     }
     
     return copy;

+ 25 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeTeacherLiveModel.h

@@ -0,0 +1,25 @@
+//
+//  HomeTeacherLiveModel.h
+//
+//  Created by Steven  on 2022/8/30
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface HomeTeacherLiveModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *username;
+@property (nonatomic, strong) NSString *liveCoverImg;
+@property (nonatomic, strong) NSString *liveTitle;
+@property (nonatomic, strong) NSString *roomUid;
+@property (nonatomic, strong) NSString *teacherId;
+@property (nonatomic, strong) NSString *avatar;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 130 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeTeacherLiveModel.m

@@ -0,0 +1,130 @@
+//
+//  HomeTeacherLiveModel.m
+//
+//  Created by Steven  on 2022/8/30
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "HomeTeacherLiveModel.h"
+
+
+NSString *const kHomeTeacherLiveModelUsername = @"username";
+NSString *const kHomeTeacherLiveModelLiveCoverImg = @"liveCoverImg";
+NSString *const kHomeTeacherLiveModelLiveTitle = @"liveTitle";
+NSString *const kHomeTeacherLiveModelRoomUid = @"roomUid";
+NSString *const kHomeTeacherLiveModelTeacherId = @"teacherId";
+NSString *const kHomeTeacherLiveModelAvatar = @"avatar";
+
+
+@interface HomeTeacherLiveModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation HomeTeacherLiveModel
+
+@synthesize username = _username;
+@synthesize liveCoverImg = _liveCoverImg;
+@synthesize liveTitle = _liveTitle;
+@synthesize roomUid = _roomUid;
+@synthesize teacherId = _teacherId;
+@synthesize avatar = _avatar;
+
+
++ (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.username = [self objectOrNilForKey:kHomeTeacherLiveModelUsername fromDictionary:dict];
+            self.liveCoverImg = [self objectOrNilForKey:kHomeTeacherLiveModelLiveCoverImg fromDictionary:dict];
+            self.liveTitle = [self objectOrNilForKey:kHomeTeacherLiveModelLiveTitle fromDictionary:dict];
+            self.roomUid = [self objectOrNilForKey:kHomeTeacherLiveModelRoomUid fromDictionary:dict];
+            self.teacherId = [self objectOrNilForKey:kHomeTeacherLiveModelTeacherId fromDictionary:dict];
+            self.avatar = [self objectOrNilForKey:kHomeTeacherLiveModelAvatar fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.username forKey:kHomeTeacherLiveModelUsername];
+    [mutableDict setValue:self.liveCoverImg forKey:kHomeTeacherLiveModelLiveCoverImg];
+    [mutableDict setValue:self.liveTitle forKey:kHomeTeacherLiveModelLiveTitle];
+    [mutableDict setValue:self.roomUid forKey:kHomeTeacherLiveModelRoomUid];
+    [mutableDict setValue:self.teacherId forKey:kHomeTeacherLiveModelTeacherId];
+    [mutableDict setValue:self.avatar forKey:kHomeTeacherLiveModelAvatar];
+
+    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];
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.username = [aDecoder decodeObjectForKey:kHomeTeacherLiveModelUsername];
+    self.liveCoverImg = [aDecoder decodeObjectForKey:kHomeTeacherLiveModelLiveCoverImg];
+    self.liveTitle = [aDecoder decodeObjectForKey:kHomeTeacherLiveModelLiveTitle];
+    self.roomUid = [aDecoder decodeObjectForKey:kHomeTeacherLiveModelRoomUid];
+    self.teacherId = [aDecoder decodeObjectForKey:kHomeTeacherLiveModelTeacherId];
+    self.avatar = [aDecoder decodeObjectForKey:kHomeTeacherLiveModelAvatar];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_username forKey:kHomeTeacherLiveModelUsername];
+    [aCoder encodeObject:_liveCoverImg forKey:kHomeTeacherLiveModelLiveCoverImg];
+    [aCoder encodeObject:_liveTitle forKey:kHomeTeacherLiveModelLiveTitle];
+    [aCoder encodeObject:_roomUid forKey:kHomeTeacherLiveModelRoomUid];
+    [aCoder encodeObject:_teacherId forKey:kHomeTeacherLiveModelTeacherId];
+    [aCoder encodeObject:_avatar forKey:kHomeTeacherLiveModelAvatar];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    HomeTeacherLiveModel *copy = [[HomeTeacherLiveModel alloc] init];
+    
+    if (copy) {
+
+        copy.username = [self.username copyWithZone:zone];
+        copy.liveCoverImg = [self.liveCoverImg copyWithZone:zone];
+        copy.liveTitle = [self.liveTitle copyWithZone:zone];
+        copy.roomUid = [self.roomUid copyWithZone:zone];
+        copy.teacherId = [self.teacherId copyWithZone:zone];
+        copy.avatar = [self.avatar copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 15 - 12
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomeNav/HomeNavSearchView.xib

@@ -56,6 +56,18 @@
                         <outletCollection property="gestureRecognizers" destination="1L4-Pr-sIj" appends="YES" id="mdp-7R-RWo"/>
                     </connections>
                 </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>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nBF-8h-DYQ">
                     <rect key="frame" x="394" y="51" width="8" height="8"/>
                     <subviews>
@@ -84,18 +96,6 @@
                         </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>
@@ -126,6 +126,9 @@
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="dotView" destination="nBF-8h-DYQ" id="H3g-ir-TQZ"/>
+            </connections>
             <point key="canvasLocation" x="128.98550724637681" y="-177.45535714285714"/>
         </view>
         <tapGestureRecognizer id="1L4-Pr-sIj">

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

@@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface HomeInformationBodyView : KSJXBodyView
 
+@property (nonatomic, strong) NSMutableArray *informationArray;
+
 @end
 
 NS_ASSUME_NONNULL_END

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

@@ -6,9 +6,82 @@
 //
 
 #import "HomeInformationBodyView.h"
+#import "HomeInformationCell.h"
+#import "HomeMessageModel.h"
+#import "KSBaseWKWebViewController.h"
+
+@interface HomeInformationBodyView ()<UITableViewDelegate,UITableViewDataSource>
+
+
+@end
 
 @implementation HomeInformationBodyView
 
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = [UIColor clearColor];
+        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStylePlain];
+        self.tableView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.showsVerticalScrollIndicator = NO;
+        self.tableView.showsHorizontalScrollIndicator = NO;
+        self.tableView.dataSource = self;
+        self.tableView.delegate = self;
+        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        self.tableView.rowHeight = 90;
+        
+        UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        headView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.tableHeaderView = headView;
+        
+        [self addSubview:self.tableView];
+        [self.tableView registerNib:[UINib nibWithNibName:@"HomeInformationCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"HomeInformationCell"];
+    }
+    return self;
+}
+
+- (void)beginFirstRefresh {
+    [self.tableView reloadData];
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    self.tableView.frame = self.bounds;
+}
+
+#pragma mark - UITableViewDataSource
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.informationArray.count;
+}
+
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    HomeMessageModel *model = self.informationArray[indexPath.row];
+    HomeInformationCell *cell = [tableView dequeueReusableCellWithIdentifier:@"HomeInformationCell"];
+    ROWINDEX rowIndex = ROWINDEX_MIDDLE;
+    if (indexPath.row == 0 && self.informationArray.count == 1) {
+        rowIndex = ROWINDEX_TOP_BOTTOM;
+    }
+    else if (indexPath.row == 0) {
+        rowIndex = ROWINDEX_TOP;
+    }
+    else if (indexPath.row == self.informationArray.count - 1) {
+        rowIndex = ROWINDEX_BOTTOM;
+    }
+    [cell configCellWithSource:model rowIndex:rowIndex];
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    HomeMessageModel *model = self.informationArray[indexPath.row];
+    // 跳转
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@%@%@",WEBHOST,@"/#/specialdetail?id=",model.internalBaseClassIdentifier];
+    [self.naviController pushViewController:webCtrl animated:YES];
+}
+
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

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

@@ -11,6 +11,10 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface HomePageBodyView : kSJXCollectionView
 
+@property (nonatomic, strong) NSMutableArray *liveArray;
+
+@property (nonatomic, strong) NSMutableArray *styleArray;
+
 @end
 
 NS_ASSUME_NONNULL_END

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

@@ -6,9 +6,129 @@
 //
 
 #import "HomePageBodyView.h"
+#import "HomeHotStyleCell.h"
+#import "HomeTeacherLiveModel.h"
+#import "TeacherStyleModel.h"
+#import "KSBaseWKWebViewController.h"
+#import "KSEnterLiveroomManager.h"
+#import "MBProgressHUD+KSShow.h"
+#import "HomeTempLiveCell.h"
+
+@interface HomePageBodyView ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
+
+@property (nonatomic, strong) NSMutableArray *sourceArray;
+
+@end
 
 @implementation HomePageBodyView
 
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = HexRGB(0xf6f8f9);
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(14, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+        self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) collectionViewLayout:layout];
+        self.collectionView.backgroundColor = HexRGB(0xf6f8f9);
+        self.collectionView.delegate = self;
+        self.collectionView.dataSource = self;
+        self.collectionView.showsVerticalScrollIndicator = NO;
+        self.collectionView.showsHorizontalScrollIndicator = NO;
+        [self.collectionView registerNib:[UINib nibWithNibName:@"HomeHotStyleCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotStyleCell"];
+        [self.collectionView registerNib:[UINib nibWithNibName:@"HomeTempLiveCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeTempLiveCell"];
+        [self addSubview:self.collectionView];
+    }
+    return self;
+}
+
+- (void)beginFirstRefresh {
+    self.sourceArray = [NSMutableArray arrayWithArray:self.liveArray];
+    [self.sourceArray addObjectsFromArray:self.styleArray];
+    [self.collectionView reloadData];
+}
+
+- (void)selectCellAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (self.lastSelectedIndexPath == indexPath) {
+        return;
+    }
+    if (self.lastSelectedIndexPath != nil) {
+        UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:self.lastSelectedIndexPath];
+        [cell setSelected:NO];
+    }
+    UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];
+    [cell setSelected:YES];
+    self.lastSelectedIndexPath = indexPath;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    self.collectionView.frame = self.bounds;
+}
+
+#pragma mark ----- collection view
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return 1;
+}
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.sourceArray.count;
+}
+
+- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    id source = self.sourceArray[indexPath.item];
+    if ([source isKindOfClass:[TeacherStyleModel class]]) {
+        HomeHotStyleCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotStyleCell" forIndexPath:indexPath];
+        [cell configWithSource:source];
+        return cell;
+    }
+    else {
+        HomeTempLiveCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeTempLiveCell" forIndexPath:indexPath];
+        [cell configWithSource:source];
+        return cell;
+    }
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    id source = self.sourceArray[indexPath.item];
+    if ([source isKindOfClass:[HomeTeacherLiveModel class]]) {  // 进入直播间
+        HomeTeacherLiveModel *model = (HomeTeacherLiveModel *)source;
+        [self joinLiveRoom:model.roomUid];
+    }
+    else if ([source isKindOfClass:[TeacherStyleModel class]]) {
+        TeacherStyleModel *model = (TeacherStyleModel *)source;
+        [self displayTeacherStyle:model.userId];
+    }
+}
+
+- (void)joinLiveRoom:(NSString *)liveRoomId {
+    if ([NSString isEmptyString:liveRoomId]) {
+        return;
+    }
+    [MBProgressHUD ksShowHUDWithText:@""];
+    [KSEnterLiveroomManager joinLiveWithRoomId:liveRoomId inController:(CustomNavViewController *)self.naviController callback:^{
+        [MBProgressHUD ksHideHUD];
+    }];
+}
+
+- (void)displayTeacherStyle:(NSString *)teacherId {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/teacherHome?teacherId=",teacherId];
+    [self.naviController pushViewController:ctrl animated:YES];
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.item == 0) {
+        return CGSizeMake((kScreenWidth - 28 - 11) / 2.0f, 265);
+    }
+    else {
+        return CGSizeMake((kScreenWidth - 28 - 11) / 2.0f, 211);
+    }
+}
+//- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
+//    return 11.0f;
+//}
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

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

@@ -0,0 +1,16 @@
+//
+//  TeacherStyleFlowLayout.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/30.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TeacherStyleFlowLayout : UICollectionViewFlowLayout
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 12 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HomePageView/TeacherStyleFlowLayout.m

@@ -0,0 +1,12 @@
+//
+//  TeacherStyleFlowLayout.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/30.
+//
+
+#import "TeacherStyleFlowLayout.h"
+
+@implementation TeacherStyleFlowLayout
+
+@end

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

@@ -15,6 +15,8 @@
 
 @property (weak, nonatomic) IBOutlet UILabel *collectLabel;
 
+@property (weak, nonatomic) IBOutlet UIImageView *collectionImage;
+
 @end
 
 @implementation HomeHotAlbumCell
@@ -28,6 +30,12 @@
     [self.albumImage sd_setImageWithURL:[NSURL URLWithString:[model.albumCoverUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
     self.albumNameLabel.text = [NSString returnNoNullStringWithString:model.albumName];
     self.collectLabel.text = [NSString stringWithFormat:@"%zd人",model.albumFavoriteCount];
+    if ([model.favorite isEqualToString:@"1"]) {
+        [self.collectionImage setImage:[UIImage imageNamed:@"album_collected"]];
+    }
+    else {
+        [self.collectionImage setImage:[UIImage imageNamed:@"album_collect"]];
+    }
 }
 
 @end

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

@@ -98,6 +98,7 @@
                 <outlet property="albumImage" destination="mkp-8k-Rld" id="Hdo-Go-aYB"/>
                 <outlet property="albumNameLabel" destination="1bh-Zm-ov0" id="KrW-Bf-gSu"/>
                 <outlet property="collectLabel" destination="HyK-tc-JYn" id="NNp-Qk-B0u"/>
+                <outlet property="collectionImage" destination="2m8-Or-9p5" id="iXy-DP-NiM"/>
             </connections>
             <point key="canvasLocation" x="305.79710144927537" y="89.0625"/>
         </collectionViewCell>

+ 19 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeHotStyleCell.h

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

+ 42 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeHotStyleCell.m

@@ -0,0 +1,42 @@
+//
+//  HomeHotStyleCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/30.
+//
+
+#import "HomeHotStyleCell.h"
+
+@interface HomeHotStyleCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *coverImage;
+
+@property (weak, nonatomic) IBOutlet UIImageView *teacherAvatar;
+
+@property (weak, nonatomic) IBOutlet UILabel *teacherName;
+
+@property (weak, nonatomic) IBOutlet UILabel *countLabel;
+
+@end
+
+@implementation HomeHotStyleCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)configWithSource:(TeacherStyleModel *)source {
+    
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[source.cover getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:[source.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    if ([NSString isEmptyString:source.username]) {
+        self.teacherName.text = [NSString stringWithFormat:@"游客%@",source.userId];
+    }
+    else {
+        self.teacherName.text = [NSString stringWithFormat:@"%@",source.username];
+    }
+    self.countLabel.text = [NSString stringWithFormat:@"%@人观看",source.browse];
+}
+
+@end

+ 121 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeHotStyleCell.xib

@@ -0,0 +1,121 @@
+<?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="HomeHotStyleCell">
+            <rect key="frame" x="0.0" y="0.0" width="374" height="220"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="374" height="220"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qdq-ZR-K1t">
+                        <rect key="frame" x="2" y="2" width="370" height="216"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="7CW-8L-jwb">
+                                <rect key="frame" x="0.0" y="0.0" width="370" height="173"/>
+                            </imageView>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rx5-wy-C5C">
+                                <rect key="frame" x="0.0" y="173" width="370" height="43"/>
+                                <subviews>
+                                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="q26-31-k6x">
+                                        <rect key="frame" x="10" y="13.5" width="16" height="16"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="16" id="Qpi-G1-LPA"/>
+                                            <constraint firstAttribute="width" constant="16" id="d0W-T2-yjl"/>
+                                        </constraints>
+                                        <userDefinedRuntimeAttributes>
+                                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                                <real key="value" value="8"/>
+                                            </userDefinedRuntimeAttribute>
+                                        </userDefinedRuntimeAttributes>
+                                    </imageView>
+                                    <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="hHM-XF-ugi">
+                                        <rect key="frame" x="31" y="14" width="62" height="15"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                        <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" text="1112人观看" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qhl-Ee-eId">
+                                        <rect key="frame" x="299" y="14" width="61" 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>
+                                </subviews>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                <constraints>
+                                    <constraint firstItem="hHM-XF-ugi" firstAttribute="leading" secondItem="q26-31-k6x" secondAttribute="trailing" constant="5" id="gFh-me-uSt"/>
+                                    <constraint firstAttribute="trailing" secondItem="qhl-Ee-eId" secondAttribute="trailing" constant="10" id="hDQ-TD-GNl"/>
+                                    <constraint firstItem="hHM-XF-ugi" firstAttribute="centerY" secondItem="q26-31-k6x" secondAttribute="centerY" id="ifP-dJ-eA7"/>
+                                    <constraint firstAttribute="height" constant="43" id="o7d-Ey-Czt"/>
+                                    <constraint firstItem="qhl-Ee-eId" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="hHM-XF-ugi" secondAttribute="trailing" constant="10" id="rR4-6F-HZi"/>
+                                    <constraint firstItem="q26-31-k6x" firstAttribute="centerY" secondItem="Rx5-wy-C5C" secondAttribute="centerY" id="s4o-r8-dxl"/>
+                                    <constraint firstItem="qhl-Ee-eId" firstAttribute="centerY" secondItem="hHM-XF-ugi" secondAttribute="centerY" id="wzF-ha-ioq"/>
+                                    <constraint firstItem="q26-31-k6x" firstAttribute="leading" secondItem="Rx5-wy-C5C" secondAttribute="leading" constant="10" id="xxn-ix-hEl"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstAttribute="bottom" secondItem="Rx5-wy-C5C" secondAttribute="bottom" id="07z-7m-yGT"/>
+                            <constraint firstAttribute="trailing" secondItem="7CW-8L-jwb" secondAttribute="trailing" id="0v7-x3-QYP"/>
+                            <constraint firstItem="Rx5-wy-C5C" firstAttribute="leading" secondItem="Qdq-ZR-K1t" secondAttribute="leading" id="SXQ-oh-Pwy"/>
+                            <constraint firstItem="7CW-8L-jwb" firstAttribute="top" secondItem="Qdq-ZR-K1t" secondAttribute="top" id="dSj-OO-6Hx"/>
+                            <constraint firstItem="Rx5-wy-C5C" firstAttribute="top" secondItem="7CW-8L-jwb" secondAttribute="bottom" id="jWL-6a-3fF"/>
+                            <constraint firstItem="7CW-8L-jwb" firstAttribute="leading" secondItem="Qdq-ZR-K1t" secondAttribute="leading" id="m3u-PZ-lM4"/>
+                            <constraint firstAttribute="trailing" secondItem="Rx5-wy-C5C" secondAttribute="trailing" id="qVy-sU-dgV"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </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="number" keyPath="shadowRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                                <real key="value" value="1"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstItem="Qdq-ZR-K1t" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="2" id="Nc6-Qt-wLl"/>
+                <constraint firstItem="Qdq-ZR-K1t" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="2" id="QaO-zP-HzS"/>
+                <constraint firstAttribute="trailing" secondItem="Qdq-ZR-K1t" secondAttribute="trailing" constant="2" id="ooy-W3-fqr"/>
+                <constraint firstAttribute="bottom" secondItem="Qdq-ZR-K1t" secondAttribute="bottom" constant="2" id="qAV-we-39W"/>
+            </constraints>
+            <size key="customSize" width="374" height="220"/>
+            <connections>
+                <outlet property="countLabel" destination="qhl-Ee-eId" id="To1-a6-VoI"/>
+                <outlet property="coverImage" destination="7CW-8L-jwb" id="o4m-qy-8NI"/>
+                <outlet property="teacherAvatar" destination="q26-31-k6x" id="P3i-EB-Xob"/>
+                <outlet property="teacherName" destination="hHM-XF-ugi" id="IKt-pa-deo"/>
+            </connections>
+            <point key="canvasLocation" x="366.66666666666669" y="127.90178571428571"/>
+        </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>
+    </resources>
+</document>

+ 19 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeTempLiveCell.h

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

+ 41 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeTempLiveCell.m

@@ -0,0 +1,41 @@
+//
+//  HomeTempLiveCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/30.
+//
+
+#import "HomeTempLiveCell.h"
+
+@interface HomeTempLiveCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *coverImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *liveTitle;
+
+@property (weak, nonatomic) IBOutlet UIImageView *teacherAvatar;
+
+@property (weak, nonatomic) IBOutlet UILabel *teacherName;
+
+@end
+
+@implementation HomeTempLiveCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)configWithSource:(HomeTeacherLiveModel *)source {
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[source.liveCoverImg getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    self.liveTitle.text = [NSString returnNoNullStringWithString:source.liveTitle];
+    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:[source.avatar getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    if ([NSString isEmptyString:source.username]) {
+        self.teacherName.text = [NSString stringWithFormat:@"游客%@",source.teacherId];
+    }
+    else {
+        self.teacherName.text = [NSString stringWithFormat:@"%@",source.username];
+    }
+}
+
+@end

+ 130 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/TeacherStyle/HomeTempLiveCell.xib

@@ -0,0 +1,130 @@
+<?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="HomeTempLiveCell">
+            <rect key="frame" x="0.0" y="0.0" width="217" height="284"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="217" height="284"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Qa-Xp-aU3">
+                        <rect key="frame" x="2" y="2" width="213" height="280"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="dkD-Rj-Jac">
+                                <rect key="frame" x="0.0" y="0.0" width="213" height="190"/>
+                            </imageView>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rgs-pt-r0X">
+                                <rect key="frame" x="0.0" y="190" width="213" height="90"/>
+                                <subviews>
+                                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="UqS-fb-rXq">
+                                        <rect key="frame" x="10" y="60" width="16" height="16"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="16" id="C2I-Ix-13W"/>
+                                            <constraint firstAttribute="height" constant="16" id="TNu-jN-48x"/>
+                                        </constraints>
+                                        <userDefinedRuntimeAttributes>
+                                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                                <real key="value" value="8"/>
+                                            </userDefinedRuntimeAttribute>
+                                        </userDefinedRuntimeAttributes>
+                                    </imageView>
+                                    <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="zw4-4b-hQf">
+                                        <rect key="frame" x="31" y="60.5" width="62" height="15"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                        <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" text="正在直播" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KOn-hZ-b6S">
+                                        <rect key="frame" x="153.5" y="60.5" width="49.5" height="15"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                        <color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="长笛练习过程中的小技巧-换气法" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="okN-QS-lDq">
+                                        <rect key="frame" x="11" y="7" width="193" height="33.5"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                        <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                <constraints>
+                                    <constraint firstItem="KOn-hZ-b6S" firstAttribute="centerY" secondItem="zw4-4b-hQf" secondAttribute="centerY" id="15D-ul-srB"/>
+                                    <constraint firstItem="zw4-4b-hQf" firstAttribute="centerY" secondItem="UqS-fb-rXq" secondAttribute="centerY" id="5vG-cV-jVl"/>
+                                    <constraint firstItem="okN-QS-lDq" firstAttribute="leading" secondItem="Rgs-pt-r0X" secondAttribute="leading" constant="11" id="765-EY-90b"/>
+                                    <constraint firstAttribute="trailing" secondItem="okN-QS-lDq" secondAttribute="trailing" constant="9" id="BXi-dw-mrG"/>
+                                    <constraint firstAttribute="trailing" secondItem="KOn-hZ-b6S" secondAttribute="trailing" constant="10" id="PfN-K8-EyP"/>
+                                    <constraint firstItem="UqS-fb-rXq" firstAttribute="leading" secondItem="Rgs-pt-r0X" secondAttribute="leading" constant="10" id="YXR-2B-XnM"/>
+                                    <constraint firstItem="zw4-4b-hQf" firstAttribute="leading" secondItem="UqS-fb-rXq" secondAttribute="trailing" constant="5" id="Yis-ft-D6s"/>
+                                    <constraint firstAttribute="bottom" secondItem="UqS-fb-rXq" secondAttribute="bottom" constant="14" id="bfJ-PD-F2t"/>
+                                    <constraint firstAttribute="height" constant="90" id="lMv-ba-bx5"/>
+                                    <constraint firstItem="KOn-hZ-b6S" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="zw4-4b-hQf" secondAttribute="trailing" constant="10" id="oVz-8Q-svH"/>
+                                    <constraint firstItem="okN-QS-lDq" firstAttribute="top" secondItem="Rgs-pt-r0X" secondAttribute="top" constant="7" id="u1n-3R-3DM"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="Rgs-pt-r0X" secondAttribute="trailing" id="0JW-jt-v8i"/>
+                            <constraint firstAttribute="bottom" secondItem="Rgs-pt-r0X" secondAttribute="bottom" id="2w9-XB-DI2"/>
+                            <constraint firstAttribute="trailing" secondItem="dkD-Rj-Jac" secondAttribute="trailing" id="3Vp-um-Tp5"/>
+                            <constraint firstItem="dkD-Rj-Jac" firstAttribute="leading" secondItem="7Qa-Xp-aU3" secondAttribute="leading" id="Be7-Uf-891"/>
+                            <constraint firstItem="dkD-Rj-Jac" firstAttribute="top" secondItem="7Qa-Xp-aU3" secondAttribute="top" id="ckL-RL-TCG"/>
+                            <constraint firstItem="Rgs-pt-r0X" firstAttribute="leading" secondItem="7Qa-Xp-aU3" secondAttribute="leading" id="eZo-B4-eTR"/>
+                            <constraint firstItem="Rgs-pt-r0X" firstAttribute="top" secondItem="dkD-Rj-Jac" secondAttribute="bottom" id="jHX-oa-jdy"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </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="number" keyPath="shadowRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                                <real key="value" value="1"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="7Qa-Xp-aU3" secondAttribute="bottom" constant="2" id="Jcj-7F-4tS"/>
+                <constraint firstAttribute="trailing" secondItem="7Qa-Xp-aU3" secondAttribute="trailing" constant="2" id="Web-Nj-kBA"/>
+                <constraint firstItem="7Qa-Xp-aU3" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="2" id="rIE-IT-VWy"/>
+                <constraint firstItem="7Qa-Xp-aU3" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="2" id="vn6-SG-jiE"/>
+            </constraints>
+            <size key="customSize" width="217" height="284"/>
+            <connections>
+                <outlet property="coverImage" destination="dkD-Rj-Jac" id="f0m-uW-0Kh"/>
+                <outlet property="liveTitle" destination="okN-QS-lDq" id="hoG-vN-V8l"/>
+                <outlet property="teacherAvatar" destination="UqS-fb-rXq" id="CAa-qK-6Ke"/>
+                <outlet property="teacherName" destination="zw4-4b-hQf" id="yUh-e1-rHX"/>
+            </connections>
+            <point key="canvasLocation" x="252.89855072463769" y="155.35714285714286"/>
+        </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>
+    </resources>
+</document>

+ 0 - 1
KulexiuForStudent/KulexiuForStudent/Module/Live/Controller/LiveVideoRoomViewController.m

@@ -750,7 +750,6 @@ static int clickPraiseBtnTimes  = 0;
                 make.left.right.bottom.top.mas_equalTo(self.videoView);
             }];
         }
-
     }
     
     [self changeEmptyStatusView];