Pārlūkot izejas kodu

直播倒计时功能

Steven 3 gadi atpakaļ
vecāks
revīzija
c7fd27f236
67 mainītis faili ar 990 papildinājumiem un 199 dzēšanām
  1. 27 1
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 51 146
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 10 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  5. 19 1
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  6. 19 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m
  7. 2 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m
  8. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.xib
  9. 0 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m
  10. 133 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m
  11. 5 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/Controller/MyIncomeViewController.m
  12. 46 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMessageModel.h
  13. 281 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMessageModel.m
  14. 30 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeButtonView.h
  15. 28 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeButtonView.m
  16. 77 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeButtonView.xib
  17. 25 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/KSHomeButton.h
  18. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/KSHomeButton.m
  19. 65 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/KSHomeButton.xib
  20. 31 20
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m
  21. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/LiveroomTimeManager.h
  22. 71 8
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/LiveroomTimeManager.m
  23. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/AnimationView/LiveAnimationView.h
  24. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/AnimationView/LiveAnimationView.m
  25. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/CreateLiveBodyView.h
  26. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/CreateLiveBodyView.m
  27. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/CreateLiveBodyView.xib
  28. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/Cell/BaseEmoji.plist
  29. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/Cell/KSChatEmojiCollectionCell.h
  30. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/Cell/KSChatEmojiCollectionCell.m
  31. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatEmojiBoardView.h
  32. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatEmojiBoardView.m
  33. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputBarControl.h
  34. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputBarControl.m
  35. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputView.h
  36. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputView.m
  37. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSBeautySettingView.h
  38. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSBeautySettingView.m
  39. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSBeautySettingView.xib
  40. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSChatroomTextCell.h
  41. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSChatroomTextCell.m
  42. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveMoreDisplayView.h
  43. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveMoreDisplayView.m
  44. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveMoreDisplayView.xib
  45. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LivePreviewBodyView.h
  46. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LivePreviewBodyView.m
  47. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LivePreviewBodyView.xib
  48. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomAlertView.h
  49. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomAlertView.m
  50. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomBottomView.h
  51. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomBottomView.m
  52. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomBottomView.xib
  53. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomHeadView.h
  54. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomHeadView.m
  55. 35 8
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomHeadView.xib
  56. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomLikeLayer.h
  57. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomLikeLayer.m
  58. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyCell.h
  59. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyCell.m
  60. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyCell.xib
  61. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyView.h
  62. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyView.m
  63. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyView.xib
  64. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatContentView.h
  65. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatContentView.m
  66. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatTipsView.h
  67. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatTipsView.m

+ 27 - 1
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -552,6 +552,9 @@
 		BC60E3BD287D294C00B05441 /* AccountDeleteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC60E3BC287D294C00B05441 /* AccountDeleteViewController.m */; };
 		BC60E3C0287D447F00B05441 /* DeleteAccountBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC60E3BF287D447F00B05441 /* DeleteAccountBodyView.m */; };
 		BC60E3C2287D448600B05441 /* DeleteAccountBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC60E3C1287D448600B05441 /* DeleteAccountBodyView.xib */; };
+		BC6BEA9F288A4C0A00022109 /* HomeMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC6BEA9D288A4C0900022109 /* HomeMessageModel.m */; };
+		BC6BEAA3288A4C2A00022109 /* KSHomeButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC6BEAA0288A4C2A00022109 /* KSHomeButton.xib */; };
+		BC6BEAA4288A4C2A00022109 /* KSHomeButton.m in Sources */ = {isa = PBXBuildFile; fileRef = BC6BEAA2288A4C2A00022109 /* KSHomeButton.m */; };
 		BC6C303A27F586A60044BC0F /* KSRCMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC6C303927F586A60044BC0F /* KSRCMessageModel.m */; };
 		BC71D1332887ADDA0010F14B /* teacher_refresh.json in Resources */ = {isa = PBXBuildFile; fileRef = BC71D1322887ADDA0010F14B /* teacher_refresh.json */; };
 		BC71D1A62887FDAC0010F14B /* LaunchAnimationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC71D1802887FDAB0010F14B /* LaunchAnimationViewController.m */; };
@@ -703,6 +706,8 @@
 		BCA9CE5127FD954800D558C6 /* AccompanyRemarkCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCA9CE4F27FD954800D558C6 /* AccompanyRemarkCell.xib */; };
 		BCAD01C02872F54F0002CC40 /* LiveVideoListView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAD01BF2872F54F0002CC40 /* LiveVideoListView.m */; };
 		BCAD01C22872F5560002CC40 /* LiveVideoListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCAD01C12872F5560002CC40 /* LiveVideoListView.xib */; };
+		BCB14112288A49710022C13A /* HomeButtonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCB14110288A49710022C13A /* HomeButtonView.xib */; };
+		BCB14113288A49710022C13A /* HomeButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB14111288A49710022C13A /* HomeButtonView.m */; };
 		BCB399AC27F946A200AFF376 /* CourseNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB399AB27F946A200AFF376 /* CourseNavView.m */; };
 		BCB399AE27F946AA00AFF376 /* CourseNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCB399AD27F946AA00AFF376 /* CourseNavView.xib */; };
 		BCB399B227F94B5A00AFF376 /* LTSCalendarBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB399B027F94B5A00AFF376 /* LTSCalendarBottomView.m */; };
@@ -1912,6 +1917,11 @@
 		BC60E3BE287D447F00B05441 /* DeleteAccountBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeleteAccountBodyView.h; sourceTree = "<group>"; };
 		BC60E3BF287D447F00B05441 /* DeleteAccountBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DeleteAccountBodyView.m; sourceTree = "<group>"; };
 		BC60E3C1287D448600B05441 /* DeleteAccountBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DeleteAccountBodyView.xib; sourceTree = "<group>"; };
+		BC6BEA9D288A4C0900022109 /* HomeMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeMessageModel.m; sourceTree = "<group>"; };
+		BC6BEA9E288A4C0900022109 /* HomeMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeMessageModel.h; sourceTree = "<group>"; };
+		BC6BEAA0288A4C2A00022109 /* KSHomeButton.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KSHomeButton.xib; sourceTree = "<group>"; };
+		BC6BEAA1288A4C2A00022109 /* KSHomeButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSHomeButton.h; sourceTree = "<group>"; };
+		BC6BEAA2288A4C2A00022109 /* KSHomeButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSHomeButton.m; sourceTree = "<group>"; };
 		BC6C303827F586A60044BC0F /* KSRCMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSRCMessageModel.h; sourceTree = "<group>"; };
 		BC6C303927F586A60044BC0F /* KSRCMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSRCMessageModel.m; sourceTree = "<group>"; };
 		BC71D1322887ADDA0010F14B /* teacher_refresh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = teacher_refresh.json; sourceTree = "<group>"; };
@@ -2132,6 +2142,9 @@
 		BCAD01BE2872F54F0002CC40 /* LiveVideoListView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveVideoListView.h; sourceTree = "<group>"; };
 		BCAD01BF2872F54F0002CC40 /* LiveVideoListView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveVideoListView.m; sourceTree = "<group>"; };
 		BCAD01C12872F5560002CC40 /* LiveVideoListView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LiveVideoListView.xib; sourceTree = "<group>"; };
+		BCB1410F288A49710022C13A /* HomeButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeButtonView.h; sourceTree = "<group>"; };
+		BCB14110288A49710022C13A /* HomeButtonView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeButtonView.xib; sourceTree = "<group>"; };
+		BCB14111288A49710022C13A /* HomeButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeButtonView.m; sourceTree = "<group>"; };
 		BCB399AA27F946A200AFF376 /* CourseNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CourseNavView.h; sourceTree = "<group>"; };
 		BCB399AB27F946A200AFF376 /* CourseNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CourseNavView.m; sourceTree = "<group>"; };
 		BCB399AD27F946AA00AFF376 /* CourseNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseNavView.xib; sourceTree = "<group>"; };
@@ -3768,6 +3781,8 @@
 		277935FC27E32BBF0010E277 /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				BC6BEA9E288A4C0900022109 /* HomeMessageModel.h */,
+				BC6BEA9D288A4C0900022109 /* HomeMessageModel.m */,
 				BC9473FC282A5E71004B3B27 /* NoticeSourceModel.h */,
 				BC9473FB282A5E71004B3B27 /* NoticeSourceModel.m */,
 				BCA193B4282A80A9004A585D /* RecentCourseModel.h */,
@@ -3779,6 +3794,12 @@
 		277935FD27E32BBF0010E277 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BC6BEAA1288A4C2A00022109 /* KSHomeButton.h */,
+				BC6BEAA2288A4C2A00022109 /* KSHomeButton.m */,
+				BC6BEAA0288A4C2A00022109 /* KSHomeButton.xib */,
+				BCB1410F288A49710022C13A /* HomeButtonView.h */,
+				BCB14111288A49710022C13A /* HomeButtonView.m */,
+				BCB14110288A49710022C13A /* HomeButtonView.xib */,
 				2723B68527F1642B00E0B90B /* HomeBodyView.h */,
 				2723B68627F1642B00E0B90B /* HomeBodyView.m */,
 				2723B68827F1643B00E0B90B /* HomeBodyView.xib */,
@@ -3998,7 +4019,6 @@
 				275E3DAA27F45BBB0010EC30 /* LiveRoomMessage */,
 				27D83F4427F3EBAA00062476 /* Controller */,
 				27D83F4527F3EBAA00062476 /* Model */,
-				27D83F4627F3EBAA00062476 /* View */,
 			);
 			path = Live;
 			sourceTree = "<group>";
@@ -4025,6 +4045,7 @@
 				BCC9F35427F5F4FD00647449 /* LiveSeatMember.m */,
 				BCB6340727F6A35700ACFDCF /* LiveroomTimeManager.h */,
 				BCB6340827F6A35700ACFDCF /* LiveroomTimeManager.m */,
+				27D83F4627F3EBAA00062476 /* View */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -6384,6 +6405,7 @@
 				BC1365BD280D163200EB03E2 /* MyVideoSearchView.xib in Resources */,
 				2780A06B27E823D300447CFD /* MineBodyView.xib in Resources */,
 				27F9030127E864AE00C08A19 /* NetworkBodyView.xib in Resources */,
+				BCB14112288A49710022C13A /* HomeButtonView.xib in Resources */,
 				BC4BCE7F2823B66A00522C8B /* AddressDetailBodyView.xib in Resources */,
 				BCD457B62865651A0010B493 /* LiveMoreDisplayView.xib in Resources */,
 				BCB908FD2850C9CB00F5FF69 /* MusicChooseSearchView.xib in Resources */,
@@ -6427,6 +6449,7 @@
 				BCDB093F2805C0EF00D0BDAD /* NewClassPopCell.xib in Resources */,
 				BCAD01C22872F5560002CC40 /* LiveVideoListView.xib in Resources */,
 				275E3DE927F4679E0010EC30 /* LiveRoomHeadView.xib in Resources */,
+				BC6BEAA3288A4C2A00022109 /* KSHomeButton.xib in Resources */,
 				27D83F4E27F3EC2100062476 /* CreateLiveBodyView.xib in Resources */,
 				BCEA75282819103B00886A86 /* UnbindBodyView.xib in Resources */,
 				BC8B6E602856ED0600866917 /* WeiboSDK.bundle in Resources */,
@@ -6950,6 +6973,7 @@
 				BCEA75262819103300886A86 /* UnbindBodyView.m in Sources */,
 				BCB633FD27F6A18200ACFDCF /* ClassroomMainContainer.m in Sources */,
 				BC542E4328407AD200633781 /* UserSettingViewController.m in Sources */,
+				BCB14113288A49710022C13A /* HomeButtonView.m in Sources */,
 				2779321E27E30FC30010E277 /* LifeButton.m in Sources */,
 				277931E427E30FC20010E277 /* CALayer+Color.m in Sources */,
 				2779360C27E32BE50010E277 /* LoginViewController.m in Sources */,
@@ -7106,6 +7130,7 @@
 				2779322927E30FC30010E277 /* sortButton.m in Sources */,
 				BCDB093428058A8700D0BDAD /* LiveLessonModel.m in Sources */,
 				275E8A7A27E18F2800DD3F6E /* main.m in Sources */,
+				BC6BEA9F288A4C0A00022109 /* HomeMessageModel.m in Sources */,
 				2779329027E30FEB0010E277 /* MSSBrowseCollectionViewCell.m in Sources */,
 				277D432227E99EAC00107DB7 /* VeriCheckView.m in Sources */,
 				277931E927E30FC20010E277 /* pinyin.c in Sources */,
@@ -7139,6 +7164,7 @@
 				2779321827E30FC30010E277 /* SkipTextField.m in Sources */,
 				BCC9F41C27F69BD200647449 /* RecentSharedView.m in Sources */,
 				BCA353ED2859B4EC00377661 /* MusicRoomHomeworkStudentController.m in Sources */,
+				BC6BEAA4288A4C2A00022109 /* KSHomeButton.m in Sources */,
 				27A2F63027E70E57009E2380 /* UserInfo.m in Sources */,
 				BCEA751A2818D59300886A86 /* BankNameModel.m in Sources */,
 				277932E827E310070010E277 /* NSBundle+TZImagePicker.m in Sources */,

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


+ 51 - 146
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -170,8 +170,8 @@
             filePath = "KulexiuForTeacher/Module/Home/Income/Controller/MyIncomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "124"
-            endingLineNumber = "124"
+            startingLineNumber = "127"
+            endingLineNumber = "127"
             landmarkName = "-requestAccountDetail"
             landmarkType = "7">
          </BreakpointContent>
@@ -298,8 +298,8 @@
             filePath = "KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "682"
-            endingLineNumber = "682"
+            startingLineNumber = "698"
+            endingLineNumber = "698"
             landmarkName = "-submitFileWithMessage:uploadListener:"
             landmarkType = "7">
          </BreakpointContent>
@@ -438,8 +438,8 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1871"
-            endingLineNumber = "1871"
+            startingLineNumber = "1882"
+            endingLineNumber = "1882"
             landmarkName = "-showAnimationView:showMessag:"
             landmarkType = "7">
          </BreakpointContent>
@@ -569,8 +569,8 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "636"
-            endingLineNumber = "636"
+            startingLineNumber = "640"
+            endingLineNumber = "640"
             landmarkName = "-IMConnetedCallback"
             landmarkType = "7">
          </BreakpointContent>
@@ -658,54 +658,6 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "94CE73C4-2B00-4F52-83F1-11CEE46915D2"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1211"
-            endingLineNumber = "1211"
-            landmarkName = "-didReceiveMessageNotification:"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "94CE73C4-2B00-4F52-83F1-11CEE46915D2 - ffb5e0723c52bcff"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "-[LiveRoomViewController didReceiveMessageNotification:]"
-                  moduleName = "KulexiuForTeacher"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/wangzhi/DayaWorkspace/klx_teacher/KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "1221"
-                  endingLineNumber = "1221"
-                  offsetFromSymbolStart = "1104">
-               </Location>
-               <Location
-                  uuid = "94CE73C4-2B00-4F52-83F1-11CEE46915D2 - ffb5e0723c52bcff"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "-[LiveRoomViewController didReceiveMessageNotification:]"
-                  moduleName = "KulexiuForTeacher"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/wangzhi/DayaWorkspace/klx_teacher/KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "1221"
-                  endingLineNumber = "1221"
-                  offsetFromSymbolStart = "1108">
-               </Location>
-            </Locations>
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "02023139-0168-42A5-A715-1A21596EF07F"
             shouldBeEnabled = "No"
             ignoreCount = "0"
@@ -713,8 +665,8 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1116"
-            endingLineNumber = "1116"
+            startingLineNumber = "1122"
+            endingLineNumber = "1122"
             landmarkName = "-didReceiveMessageNotification:"
             landmarkType = "7">
          </BreakpointContent>
@@ -729,8 +681,8 @@
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "689"
-            endingLineNumber = "689"
+            startingLineNumber = "695"
+            endingLineNumber = "695"
             landmarkName = "-liveroomQuit"
             landmarkType = "7">
          </BreakpointContent>
@@ -962,69 +914,6 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "61AA3787-16AE-4E8C-B899-77A2ECC1A215"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "132"
-            endingLineNumber = "132"
-            landmarkName = "-getGroupMessageNotiferStatus"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "61AA3787-16AE-4E8C-B899-77A2ECC1A215 - 737900fefcb90464"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "__58-[GroupSettingViewController getGroupMessageNotiferStatus]_block_invoke"
-                  moduleName = "KulexiuForTeacher"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/wangzhi/DayaWorkspace/klx_teacher/KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "132"
-                  endingLineNumber = "132"
-                  offsetFromSymbolStart = "36">
-               </Location>
-               <Location
-                  uuid = "61AA3787-16AE-4E8C-B899-77A2ECC1A215 - c162aa6c1e7534f9"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "__58-[GroupSettingViewController getGroupMessageNotiferStatus]_block_invoke_2"
-                  moduleName = "KulexiuForTeacher"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/wangzhi/DayaWorkspace/klx_teacher/KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "132"
-                  endingLineNumber = "132"
-                  offsetFromSymbolStart = "32">
-               </Location>
-               <Location
-                  uuid = "61AA3787-16AE-4E8C-B899-77A2ECC1A215 - e46668f71d054b32"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "__58-[GroupSettingViewController getGroupMessageNotiferStatus]_block_invoke.143"
-                  moduleName = "KulexiuForTeacher"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/wangzhi/DayaWorkspace/klx_teacher/KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "132"
-                  endingLineNumber = "132"
-                  offsetFromSymbolStart = "32">
-               </Location>
-            </Locations>
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "276A2758-356E-4520-8B01-40EAB4848862"
             shouldBeEnabled = "No"
             ignoreCount = "0"
@@ -1041,32 +930,16 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "2CE4F958-BC82-4B94-B003-CA6F197B6311"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1311"
-            endingLineNumber = "1311"
-            landmarkName = "-quitClassroomNotifer"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "451323DA-57B6-4068-B93A-B2EF3FD80E77"
-            shouldBeEnabled = "Yes"
+            shouldBeEnabled = "No"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "479"
-            endingLineNumber = "479"
-            landmarkName = "-judgeAutoClose"
+            startingLineNumber = "485"
+            endingLineNumber = "485"
+            landmarkName = "-configTimerManager"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
@@ -1074,14 +947,14 @@
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
             uuid = "A9C70FB1-D0B0-4589-BDEA-B52515FF7C15"
-            shouldBeEnabled = "Yes"
+            shouldBeEnabled = "No"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "KulexiuForTeacher/Module/Live/Model/KSEnterLiveroomManager.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "20"
-            endingLineNumber = "20"
+            startingLineNumber = "16"
+            endingLineNumber = "16"
             landmarkName = "+queryLiveroomConfig:callback:"
             landmarkType = "7">
          </BreakpointContent>
@@ -1150,5 +1023,37 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "9C80762C-C9B4-4929-860A-69A628EAC212"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/Controller/HomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "202"
+            endingLineNumber = "202"
+            landmarkName = "-requestHomeButton"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "44164F8D-AEE9-4B1A-9AFB-6E9F05102DF0"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "401"
+            endingLineNumber = "401"
+            landmarkName = "-setupLiveroomConfig:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 10 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h

@@ -314,6 +314,16 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)helpCenterContentListRequest:(NSString *)post success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-cms/news/app/home
+// 首页按钮
+
+/// 按钮
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeButtonList:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 // /api-teacher/courseSchedule/queryLiveAndVideo
 
 /// 首页最近课程

+ 19 - 1
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -762,6 +762,24 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
+// /api-cms/news/app/home
+// 首页按钮
+
+/// 按钮
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeButtonList:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-cms/news/app/home"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:version forKey:@"version"];
+    [parm setValue:@"ios-teacher" forKey:@"platform"];
+    [parm setValue:@"TEACHER" forKey:@"clientType"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
 // /api-teacher/courseSchedule/queryLiveAndVideo
 
 /// 首页最近课程
@@ -1214,7 +1232,7 @@
     [parm setValue:coverPic forKey:@"coverPic"];
     [parm setValue:liveRemark forKey:@"liveRemark"];
     [parm setValue:roomTitle forKey:@"roomTitle"];
-    [parm setValue:@(liveTime) forKey:@"liveTime"];
+    [parm setValue:@(1) forKey:@"liveTime"];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 

+ 19 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m

@@ -23,6 +23,8 @@
 #import "KSChatMusicShareCell.h"
 #import "KSChatMusicMessage.h"
 
+#import "KSPublicAlertView.h"
+
 #define SHARE_MUSIC_TAG (2001)
 
 @interface RCNaviDataInfo : NSObject
@@ -60,6 +62,9 @@
 
 @property (nonatomic, assign) BOOL isFirstLoad;
 
+@property (nonatomic, strong) KSPublicAlertView *alertView;
+
+
 @end
 
 @implementation KSChatConversationViewController
@@ -349,15 +354,26 @@
                 [[RCIM sharedRCIM] refreshGroupInfoCache:groupInfo withGroupId:self.targetId];
                 [self refreshTitle];
             }
-            else {
-                
+            else if ([dic integerValueForKey:@"code"] == 204) {
+                // 弹窗提示是否删除群组
+                MJWeakSelf;
+                self.alertView = [KSPublicAlertView shareInstanceWithTitle:@"提示" descMessage:@"当前群组已被解散,是否删除聊天记录?" leftTitle:@"取消" rightTitle:@"确定" cancelAction:^{
+                    
+                } sureAction:^{
+                    [weakSelf removeNoExistGroup];
+                }];
             }
         } faliure:^(NSError * _Nonnull error) {
             
         }];
         
     }
-    
+}
+
+
+- (void)removeNoExistGroup {
+    [[RCIMClient sharedRCIMClient] removeConversation:ConversationType_GROUP targetId:self.targetId];
+    [self.navigationController popToRootViewControllerAnimated:YES];
 }
 
 - (void)refreshTitle {

+ 2 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/Controller/GroupSettingViewController.m

@@ -214,10 +214,9 @@
             [self.navigationController pushViewController:ctrl animated:YES];
         }
             break;
-        case GROUPSETTING_DISMISS: // 解散群聊  暂不解散 直接返回发消息
+        case GROUPSETTING_DISMISS: // 解散群聊
         {
-            [self backAction];
-//            [self showDismissAlert];
+            [self showDismissAlert];
         }
             break;
         default:

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.xib

@@ -368,7 +368,7 @@
                     <constraints>
                         <constraint firstAttribute="height" constant="44" id="zlf-6G-YkC"/>
                     </constraints>
-                    <state key="normal" title="发消息"/>
+                    <state key="normal" title="解散群组"/>
                     <userDefinedRuntimeAttributes>
                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                             <real key="value" value="22"/>

+ 0 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m

@@ -1164,9 +1164,6 @@
         CGRect frame = [self getWBoardFrame];
         _wBoardCtrl = [[KSWhiteboardControl alloc] initWithDelegate:self viewFrame:frame];
         NSString *roomId = [ClassroomService sharedService].currentRoom.roomId;
-//        if ([roomId containsString:@"S"] || [roomId containsString:@"I"]) {
-//            roomId = [roomId substringFromIndex:1];
-//        }
         _wBoardCtrl.roomId = roomId;
         _wBoardCtrl.isRatationImage = self.isRorationImage;
         _wBoardCtrl.subjectId = self.subjectId;

+ 133 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m

@@ -33,7 +33,13 @@
 
 #import "UserSettingViewController.h"
 
-@interface HomeViewController ()<SDCycleScrollViewDelegate>
+#import "HomeMessageModel.h"
+#import "HomeButtonView.h"
+#import "KSHomeButton.h"
+
+#define BUTTONWIDTH (65)
+#define BUTTONHEIGHT (80)
+@interface HomeViewController ()<SDCycleScrollViewDelegate,UIScrollViewDelegate>
 
 @property (nonatomic, strong) HomeNavView *navView;
 
@@ -52,6 +58,13 @@
 
 @property (nonatomic, strong) HomeRecentCourseView *courseView;
 
+@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 高度
+
+
 @end
 
 @implementation HomeViewController
@@ -184,9 +197,86 @@
     [self.headView configMessage:self.mineInfo];
 }
 
+- (void)requestHomeButton {
+    [KSNetworkingManager homeButtonList:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
+            // 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];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        [self refreshButtonView];
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)refreshButtonView {
+    if (self.buttonArray.count) {
+        CGFloat buttonViewHeight = [HomeButtonView getViewHeight];
+        [self.buttonContainer mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.mas_equalTo(buttonViewHeight);
+        }];
+    }
+    else {
+        [self.buttonContainer mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.mas_equalTo(CGFLOAT_MIN);
+        }];
+    }
+    // 添加按钮
+    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(KPortraitWidth * pageCount, BUTTONHEIGHT);
+    }
+    else {
+        self.buttonContainer.buttonPageCtrl.hidden = YES;
+        self.buttonScrollView.contentSize = CGSizeMake(KPortraitWidth, BUTTONHEIGHT);
+    }
+        
+    self.buttonScrollView.contentOffset = CGPointMake(0, 0);
+    [self.buttonScrollView removeAllSubViews];
+    CGFloat buttonSpace = (KPortraitWidth - 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)configUI {
     UIImage *bgImage = [UIImage imageNamed:@"home_bg"];
-    CGFloat height = bgImage.size.height / bgImage.size.width * kScreenWidth;
+    CGFloat height = bgImage.size.height / bgImage.size.width * KPortraitWidth;
     UIImageView *imageView = [[UIImageView alloc] initWithImage:bgImage];
     [self.view addSubview:imageView];
     [imageView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -225,12 +315,20 @@
         make.height.mas_equalTo(headHeight);
     }];
     
+    [self.scrollView addSubview:self.buttonContainer];
+    [self.buttonContainer mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.headView.mas_bottom);
+        make.height.mas_equalTo(CGFLOAT_MIN);
+    }];
+    
     [self.scrollView addSubview:self.noticeView];
     [self.noticeView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.headView.mas_bottom);
+        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);
@@ -262,6 +360,7 @@
     [self requestRecentCourse];
     [self requestUnreadCount];
     [self requestTrackAuth];
+    [self requestHomeButton];
 }
 
 // track
@@ -553,6 +652,37 @@
     }
 }
 
+#pragma mark ---- scroll view delegate
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (scrollView == self.buttonScrollView) {
+        NSInteger index = (NSInteger)(scrollView.contentOffset.x / KPortraitWidth);
+        
+        [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 - Navigation
 

+ 5 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Income/Controller/MyIncomeViewController.m

@@ -13,6 +13,7 @@
 #import "KSFullDatePicker.h"
 #import "IncomeListModel.h"
 #import "IncomeCountViewController.h"
+#import "KSBaseWKWebViewController.h"
 
 @interface MyIncomeViewController ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -54,8 +55,10 @@
 }
 
 - (void)rightBtnClick {
-    IncomeCountViewController *countCtrl = [[IncomeCountViewController alloc] init];
-    [self.navigationController pushViewController:countCtrl animated:YES];
+    // web
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/incomeConsus"];
+    [self.navigationController pushViewController:ctrl animated:YES];
 }
 
 - (void)configUI {

+ 46 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMessageModel.h

@@ -0,0 +1,46 @@
+//
+//  HomeMessageModel.h
+//
+//  Created by Steven  on 2022/4/25
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface HomeMessageModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, strong) NSString *subType;
+@property (nonatomic, assign) double status;
+@property (nonatomic, strong) NSString *title;
+@property (nonatomic, strong) NSString *typeName;
+@property (nonatomic, strong) NSString *subTypeName;
+@property (nonatomic, strong) NSString *offlineTime;
+@property (nonatomic, strong) NSString *updateName;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *onlineTime;
+@property (nonatomic, strong) NSString *memo;
+@property (nonatomic, strong) NSString *subjectName;
+@property (nonatomic, assign) BOOL delFlag;
+@property (nonatomic, assign) double type;
+@property (nonatomic, strong) NSString *subjectIdList;
+@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *hrefTarget;
+@property (nonatomic, strong) NSString *coverImage;
+@property (nonatomic, assign) double showTime;
+@property (nonatomic, assign) double createBy;
+@property (nonatomic, assign) double updateBy;
+@property (nonatomic, strong) NSString *linkUrl;
+@property (nonatomic, strong) NSString *videoCoverImage;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, assign) double order;
+@property (nonatomic, strong) NSString *attribute1;
+@property (nonatomic, strong) NSString *content;
+@property (nonatomic, strong) NSString *attribute2;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 281 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMessageModel.m

@@ -0,0 +1,281 @@
+//
+//  HomeMessageModel.m
+//
+//  Created by Steven  on 2022/4/25
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "HomeMessageModel.h"
+
+
+NSString *const kHomeMessageModelSubType = @"subType";
+NSString *const kHomeMessageModelStatus = @"status";
+NSString *const kHomeMessageModelTitle = @"title";
+NSString *const kHomeMessageModelTypeName = @"typeName";
+NSString *const kHomeMessageModelSubTypeName = @"subTypeName";
+NSString *const kHomeMessageModelOfflineTime = @"offlineTime";
+NSString *const kHomeMessageModelUpdateName = @"updateName";
+NSString *const kHomeMessageModelUpdateTime = @"updateTime";
+NSString *const kHomeMessageModelOnlineTime = @"onlineTime";
+NSString *const kHomeMessageModelMemo = @"memo";
+NSString *const kHomeMessageModelSubjectName = @"subjectName";
+NSString *const kHomeMessageModelDelFlag = @"delFlag";
+NSString *const kHomeMessageModelType = @"type";
+NSString *const kHomeMessageModelSubjectIdList = @"subjectIdList";
+NSString *const kHomeMessageModelId = @"id";
+NSString *const kHomeMessageModelHrefTarget = @"hrefTarget";
+NSString *const kHomeMessageModelCoverImage = @"coverImage";
+NSString *const kHomeMessageModelShowTime = @"showTime";
+NSString *const kHomeMessageModelCreateBy = @"createBy";
+NSString *const kHomeMessageModelUpdateBy = @"updateBy";
+NSString *const kHomeMessageModelLinkUrl = @"linkUrl";
+NSString *const kHomeMessageModelVideoCoverImage = @"videoCoverImage";
+NSString *const kHomeMessageModelCreateTime = @"createTime";
+NSString *const kHomeMessageModelOrder = @"order";
+NSString *const kHomeMessageModelAttribute1 = @"attribute1";
+NSString *const kHomeMessageModelContent = @"content";
+NSString *const kHomeMessageModelAttribute2 = @"attribute2";
+
+
+@interface HomeMessageModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation HomeMessageModel
+
+@synthesize subType = _subType;
+@synthesize status = _status;
+@synthesize title = _title;
+@synthesize typeName = _typeName;
+@synthesize subTypeName = _subTypeName;
+@synthesize offlineTime = _offlineTime;
+@synthesize updateName = _updateName;
+@synthesize updateTime = _updateTime;
+@synthesize onlineTime = _onlineTime;
+@synthesize memo = _memo;
+@synthesize subjectName = _subjectName;
+@synthesize delFlag = _delFlag;
+@synthesize type = _type;
+@synthesize subjectIdList = _subjectIdList;
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize hrefTarget = _hrefTarget;
+@synthesize coverImage = _coverImage;
+@synthesize showTime = _showTime;
+@synthesize createBy = _createBy;
+@synthesize updateBy = _updateBy;
+@synthesize linkUrl = _linkUrl;
+@synthesize videoCoverImage = _videoCoverImage;
+@synthesize createTime = _createTime;
+@synthesize order = _order;
+@synthesize attribute1 = _attribute1;
+@synthesize content = _content;
+@synthesize attribute2 = _attribute2;
+
+
++ (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.subType = [self objectOrNilForKey:kHomeMessageModelSubType fromDictionary:dict];
+            self.status = [[self objectOrNilForKey:kHomeMessageModelStatus fromDictionary:dict] doubleValue];
+            self.title = [self objectOrNilForKey:kHomeMessageModelTitle fromDictionary:dict];
+            self.typeName = [self objectOrNilForKey:kHomeMessageModelTypeName fromDictionary:dict];
+            self.subTypeName = [self objectOrNilForKey:kHomeMessageModelSubTypeName fromDictionary:dict];
+            self.offlineTime = [self objectOrNilForKey:kHomeMessageModelOfflineTime fromDictionary:dict];
+            self.updateName = [self objectOrNilForKey:kHomeMessageModelUpdateName fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kHomeMessageModelUpdateTime fromDictionary:dict];
+            self.onlineTime = [self objectOrNilForKey:kHomeMessageModelOnlineTime fromDictionary:dict];
+            self.memo = [self objectOrNilForKey:kHomeMessageModelMemo fromDictionary:dict];
+            self.subjectName = [self objectOrNilForKey:kHomeMessageModelSubjectName fromDictionary:dict];
+            self.delFlag = [[self objectOrNilForKey:kHomeMessageModelDelFlag fromDictionary:dict] boolValue];
+            self.type = [[self objectOrNilForKey:kHomeMessageModelType fromDictionary:dict] doubleValue];
+            self.subjectIdList = [self objectOrNilForKey:kHomeMessageModelSubjectIdList fromDictionary:dict];
+            self.internalBaseClassIdentifier = [self objectOrNilForKey:kHomeMessageModelId fromDictionary:dict];
+            self.hrefTarget = [self objectOrNilForKey:kHomeMessageModelHrefTarget fromDictionary:dict];
+            self.coverImage = [self objectOrNilForKey:kHomeMessageModelCoverImage fromDictionary:dict];
+            self.showTime = [[self objectOrNilForKey:kHomeMessageModelShowTime fromDictionary:dict] doubleValue];
+            self.createBy = [[self objectOrNilForKey:kHomeMessageModelCreateBy fromDictionary:dict] doubleValue];
+            self.updateBy = [[self objectOrNilForKey:kHomeMessageModelUpdateBy fromDictionary:dict] doubleValue];
+            self.linkUrl = [self objectOrNilForKey:kHomeMessageModelLinkUrl fromDictionary:dict];
+            self.videoCoverImage = [self objectOrNilForKey:kHomeMessageModelVideoCoverImage fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kHomeMessageModelCreateTime fromDictionary:dict];
+            self.order = [[self objectOrNilForKey:kHomeMessageModelOrder fromDictionary:dict] doubleValue];
+            self.attribute1 = [self objectOrNilForKey:kHomeMessageModelAttribute1 fromDictionary:dict];
+            self.content = [self objectOrNilForKey:kHomeMessageModelContent fromDictionary:dict];
+            self.attribute2 = [self objectOrNilForKey:kHomeMessageModelAttribute2 fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.subType forKey:kHomeMessageModelSubType];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.status] forKey:kHomeMessageModelStatus];
+    [mutableDict setValue:self.title forKey:kHomeMessageModelTitle];
+    [mutableDict setValue:self.typeName forKey:kHomeMessageModelTypeName];
+    [mutableDict setValue:self.subTypeName forKey:kHomeMessageModelSubTypeName];
+    [mutableDict setValue:self.offlineTime forKey:kHomeMessageModelOfflineTime];
+    [mutableDict setValue:self.updateName forKey:kHomeMessageModelUpdateName];
+    [mutableDict setValue:self.updateTime forKey:kHomeMessageModelUpdateTime];
+    [mutableDict setValue:self.onlineTime forKey:kHomeMessageModelOnlineTime];
+    [mutableDict setValue:self.memo forKey:kHomeMessageModelMemo];
+    [mutableDict setValue:self.subjectName forKey:kHomeMessageModelSubjectName];
+    [mutableDict setValue:[NSNumber numberWithBool:self.delFlag] forKey:kHomeMessageModelDelFlag];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.type] forKey:kHomeMessageModelType];
+    [mutableDict setValue:self.subjectIdList forKey:kHomeMessageModelSubjectIdList];
+    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kHomeMessageModelId];
+    [mutableDict setValue:self.hrefTarget forKey:kHomeMessageModelHrefTarget];
+    [mutableDict setValue:self.coverImage forKey:kHomeMessageModelCoverImage];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.showTime] forKey:kHomeMessageModelShowTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.createBy] forKey:kHomeMessageModelCreateBy];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.updateBy] forKey:kHomeMessageModelUpdateBy];
+    [mutableDict setValue:self.linkUrl forKey:kHomeMessageModelLinkUrl];
+    [mutableDict setValue:self.videoCoverImage forKey:kHomeMessageModelVideoCoverImage];
+    [mutableDict setValue:self.createTime forKey:kHomeMessageModelCreateTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.order] forKey:kHomeMessageModelOrder];
+    [mutableDict setValue:self.attribute1 forKey:kHomeMessageModelAttribute1];
+    [mutableDict setValue:self.content forKey:kHomeMessageModelContent];
+    [mutableDict setValue:self.attribute2 forKey:kHomeMessageModelAttribute2];
+
+    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.subType = [aDecoder decodeObjectForKey:kHomeMessageModelSubType];
+    self.status = [aDecoder decodeDoubleForKey:kHomeMessageModelStatus];
+    self.title = [aDecoder decodeObjectForKey:kHomeMessageModelTitle];
+    self.typeName = [aDecoder decodeObjectForKey:kHomeMessageModelTypeName];
+    self.subTypeName = [aDecoder decodeObjectForKey:kHomeMessageModelSubTypeName];
+    self.offlineTime = [aDecoder decodeObjectForKey:kHomeMessageModelOfflineTime];
+    self.updateName = [aDecoder decodeObjectForKey:kHomeMessageModelUpdateName];
+    self.updateTime = [aDecoder decodeObjectForKey:kHomeMessageModelUpdateTime];
+    self.onlineTime = [aDecoder decodeObjectForKey:kHomeMessageModelOnlineTime];
+    self.memo = [aDecoder decodeObjectForKey:kHomeMessageModelMemo];
+    self.subjectName = [aDecoder decodeObjectForKey:kHomeMessageModelSubjectName];
+    self.delFlag = [aDecoder decodeBoolForKey:kHomeMessageModelDelFlag];
+    self.type = [aDecoder decodeDoubleForKey:kHomeMessageModelType];
+    self.subjectIdList = [aDecoder decodeObjectForKey:kHomeMessageModelSubjectIdList];
+    self.internalBaseClassIdentifier = [aDecoder decodeObjectForKey:kHomeMessageModelId];
+    self.hrefTarget = [aDecoder decodeObjectForKey:kHomeMessageModelHrefTarget];
+    self.coverImage = [aDecoder decodeObjectForKey:kHomeMessageModelCoverImage];
+    self.showTime = [aDecoder decodeDoubleForKey:kHomeMessageModelShowTime];
+    self.createBy = [aDecoder decodeDoubleForKey:kHomeMessageModelCreateBy];
+    self.updateBy = [aDecoder decodeDoubleForKey:kHomeMessageModelUpdateBy];
+    self.linkUrl = [aDecoder decodeObjectForKey:kHomeMessageModelLinkUrl];
+    self.videoCoverImage = [aDecoder decodeObjectForKey:kHomeMessageModelVideoCoverImage];
+    self.createTime = [aDecoder decodeObjectForKey:kHomeMessageModelCreateTime];
+    self.order = [aDecoder decodeDoubleForKey:kHomeMessageModelOrder];
+    self.attribute1 = [aDecoder decodeObjectForKey:kHomeMessageModelAttribute1];
+    self.content = [aDecoder decodeObjectForKey:kHomeMessageModelContent];
+    self.attribute2 = [aDecoder decodeObjectForKey:kHomeMessageModelAttribute2];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_subType forKey:kHomeMessageModelSubType];
+    [aCoder encodeDouble:_status forKey:kHomeMessageModelStatus];
+    [aCoder encodeObject:_title forKey:kHomeMessageModelTitle];
+    [aCoder encodeObject:_typeName forKey:kHomeMessageModelTypeName];
+    [aCoder encodeObject:_subTypeName forKey:kHomeMessageModelSubTypeName];
+    [aCoder encodeObject:_offlineTime forKey:kHomeMessageModelOfflineTime];
+    [aCoder encodeObject:_updateName forKey:kHomeMessageModelUpdateName];
+    [aCoder encodeObject:_updateTime forKey:kHomeMessageModelUpdateTime];
+    [aCoder encodeObject:_onlineTime forKey:kHomeMessageModelOnlineTime];
+    [aCoder encodeObject:_memo forKey:kHomeMessageModelMemo];
+    [aCoder encodeObject:_subjectName forKey:kHomeMessageModelSubjectName];
+    [aCoder encodeBool:_delFlag forKey:kHomeMessageModelDelFlag];
+    [aCoder encodeDouble:_type forKey:kHomeMessageModelType];
+    [aCoder encodeObject:_subjectIdList forKey:kHomeMessageModelSubjectIdList];
+    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kHomeMessageModelId];
+    [aCoder encodeObject:_hrefTarget forKey:kHomeMessageModelHrefTarget];
+    [aCoder encodeObject:_coverImage forKey:kHomeMessageModelCoverImage];
+    [aCoder encodeDouble:_showTime forKey:kHomeMessageModelShowTime];
+    [aCoder encodeDouble:_createBy forKey:kHomeMessageModelCreateBy];
+    [aCoder encodeDouble:_updateBy forKey:kHomeMessageModelUpdateBy];
+    [aCoder encodeObject:_linkUrl forKey:kHomeMessageModelLinkUrl];
+    [aCoder encodeObject:_videoCoverImage forKey:kHomeMessageModelVideoCoverImage];
+    [aCoder encodeObject:_createTime forKey:kHomeMessageModelCreateTime];
+    [aCoder encodeDouble:_order forKey:kHomeMessageModelOrder];
+    [aCoder encodeObject:_attribute1 forKey:kHomeMessageModelAttribute1];
+    [aCoder encodeObject:_content forKey:kHomeMessageModelContent];
+    [aCoder encodeObject:_attribute2 forKey:kHomeMessageModelAttribute2];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    HomeMessageModel *copy = [[HomeMessageModel alloc] init];
+    
+    if (copy) {
+
+        copy.subType = [self.subType copyWithZone:zone];
+        copy.status = self.status;
+        copy.title = [self.title copyWithZone:zone];
+        copy.typeName = [self.typeName copyWithZone:zone];
+        copy.subTypeName = [self.subTypeName copyWithZone:zone];
+        copy.offlineTime = [self.offlineTime copyWithZone:zone];
+        copy.updateName = [self.updateName copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.onlineTime = [self.onlineTime copyWithZone:zone];
+        copy.memo = [self.memo copyWithZone:zone];
+        copy.subjectName = [self.subjectName copyWithZone:zone];
+        copy.delFlag = self.delFlag;
+        copy.type = self.type;
+        copy.subjectIdList = [self.subjectIdList copyWithZone:zone];
+        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.hrefTarget = [self.hrefTarget copyWithZone:zone];
+        copy.coverImage = [self.coverImage copyWithZone:zone];
+        copy.showTime = self.showTime;
+        copy.createBy = self.createBy;
+        copy.updateBy = self.updateBy;
+        copy.linkUrl = [self.linkUrl copyWithZone:zone];
+        copy.videoCoverImage = [self.videoCoverImage copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.order = self.order;
+        copy.attribute1 = [self.attribute1 copyWithZone:zone];
+        copy.content = [self.content copyWithZone:zone];
+        copy.attribute2 = [self.attribute2 copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 30 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeButtonView.h

@@ -0,0 +1,30 @@
+//
+//  HomeButtonView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/21.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeButtonView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *buttonContentView;
+
+@property (weak, nonatomic) IBOutlet UIView *buttonPageCtrl;
+
+@property (weak, nonatomic) IBOutlet UIView *pageDot;
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *buttonDotLeft;
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *buttonDotWidth;
+
++ (instancetype)shareInstance;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 28 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeButtonView.m

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

+ 77 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeButtonView.xib

@@ -0,0 +1,77 @@
+<?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="20037"/>
+        <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="HomeButtonView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="115"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FDF-ZT-TJx">
+                    <rect key="frame" x="0.0" y="10" width="414" height="100"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Hu0-Qz-IjA">
+                            <rect key="frame" x="189" y="86" width="36" height="4"/>
+                            <subviews>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9Qq-0N-maI">
+                                    <rect key="frame" x="0.0" y="0.0" width="18" height="4"/>
+                                    <color key="backgroundColor" red="0.0039215686269999999" green="0.75686274509999996" blue="0.70980392160000005" alpha="1" colorSpace="calibratedRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="18" id="HF0-79-ZOQ"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="2"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                            </subviews>
+                            <color key="backgroundColor" red="0.92156862750000001" green="0.92156862750000001" blue="0.92156862750000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstItem="9Qq-0N-maI" firstAttribute="top" secondItem="Hu0-Qz-IjA" secondAttribute="top" id="03a-hK-kLd"/>
+                                <constraint firstAttribute="bottom" secondItem="9Qq-0N-maI" secondAttribute="bottom" id="AOu-5X-e7N"/>
+                                <constraint firstAttribute="width" constant="36" id="Ftu-7O-gVM"/>
+                                <constraint firstItem="9Qq-0N-maI" firstAttribute="leading" secondItem="Hu0-Qz-IjA" secondAttribute="leading" id="Gbt-lz-MWl"/>
+                                <constraint firstAttribute="height" constant="4" id="SEn-Hw-wmX"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="2"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="Hu0-Qz-IjA" firstAttribute="centerX" secondItem="FDF-ZT-TJx" secondAttribute="centerX" id="Hsr-mg-qWh"/>
+                        <constraint firstAttribute="height" constant="100" id="NcO-ha-Gmb"/>
+                        <constraint firstAttribute="bottom" secondItem="Hu0-Qz-IjA" secondAttribute="bottom" constant="10" id="YkV-kK-CMd"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="FDF-ZT-TJx" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="D3O-sT-Grz"/>
+                <constraint firstItem="FDF-ZT-TJx" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="WkT-zx-U1t"/>
+                <constraint firstAttribute="trailing" secondItem="FDF-ZT-TJx" secondAttribute="trailing" id="vJG-sS-Gpn"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="buttonContentView" destination="FDF-ZT-TJx" id="736-Mg-5pC"/>
+                <outlet property="buttonDotLeft" destination="Gbt-lz-MWl" id="jQi-Dc-Y0g"/>
+                <outlet property="buttonDotWidth" destination="HF0-79-ZOQ" id="ogM-Ak-FDg"/>
+                <outlet property="buttonPageCtrl" destination="Hu0-Qz-IjA" id="VVs-D3-azH"/>
+                <outlet property="pageDot" destination="9Qq-0N-maI" id="Fa4-d7-dmt"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="37.834821428571423"/>
+        </view>
+    </objects>
+</document>

+ 25 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/KSHomeButton.h

@@ -0,0 +1,25 @@
+//
+//  KSHomeButton.h
+//  StudentDaya
+//
+//  Created by Kyle on 2020/9/25.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSHomeButton : UIView
+
+@property (weak, nonatomic) IBOutlet UIImageView *buttonImage;
+@property (weak, nonatomic) IBOutlet UILabel *buttonTitle;
+@property (weak, nonatomic) IBOutlet UIButton *actionButton;
+
+
++ (instancetype)shareInstance;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/KSHomeButton.m

@@ -0,0 +1,26 @@
+//
+//  KSHomeButton.m
+//  StudentDaya
+//
+//  Created by Kyle on 2020/9/25.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import "KSHomeButton.h"
+
+@implementation KSHomeButton
+
++ (instancetype)shareInstance {
+    KSHomeButton *view = [[[NSBundle mainBundle] loadNibNamed:@"KSHomeButton" owner:nil options:nil] firstObject];
+    return view;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 65 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/KSHomeButton.xib

@@ -0,0 +1,65 @@
+<?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="KSHomeButton">
+            <rect key="frame" x="0.0" y="0.0" width="80" height="80"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="专项训练" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1ld-By-usD">
+                    <rect key="frame" x="2" y="63" width="76" height="17"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="17" id="HmM-NJ-9X6"/>
+                    </constraints>
+                    <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>
+                <button opaque="NO" tag="1003" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Z8s-SG-JhM">
+                    <rect key="frame" x="8.5" y="0.0" width="63.5" height="80"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="63.5" id="JSo-aS-lFI"/>
+                    </constraints>
+                </button>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_accompany" translatesAutoresizingMaskIntoConstraints="NO" id="fGp-yj-UZk">
+                    <rect key="frame" x="14.5" y="5" width="51" height="51"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="51" id="a4B-wg-004"/>
+                        <constraint firstAttribute="height" constant="51" id="xmk-HE-99v"/>
+                    </constraints>
+                </imageView>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="Z8s-SG-JhM" secondAttribute="bottom" id="3uz-SX-3Fy"/>
+                <constraint firstItem="fGp-yj-UZk" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="6hu-0z-K7k"/>
+                <constraint firstItem="Z8s-SG-JhM" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="QJA-gE-y6C"/>
+                <constraint firstItem="1ld-By-usD" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="2" id="U4v-B2-GYo"/>
+                <constraint firstItem="1ld-By-usD" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="Zfj-98-cxn"/>
+                <constraint firstAttribute="trailing" secondItem="1ld-By-usD" secondAttribute="trailing" constant="2" id="bfB-Zj-nct"/>
+                <constraint firstItem="Z8s-SG-JhM" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="gyu-3P-I55"/>
+                <constraint firstItem="fGp-yj-UZk" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="5" id="t2k-gD-lM1"/>
+                <constraint firstAttribute="bottom" secondItem="1ld-By-usD" secondAttribute="bottom" id="ygh-pf-cwF"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="actionButton" destination="Z8s-SG-JhM" id="nuo-Py-54k"/>
+                <outlet property="buttonImage" destination="fGp-yj-UZk" id="HYi-AM-zku"/>
+                <outlet property="buttonTitle" destination="1ld-By-usD" id="XXN-y8-sA2"/>
+            </connections>
+            <point key="canvasLocation" x="46.376811594202906" y="4.3526785714285712"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="home_accompany" width="51" height="51"/>
+    </resources>
+</document>

+ 31 - 20
KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m

@@ -148,8 +148,8 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
 /// 直播课结束时间
 @property (nonatomic, strong) NSString *liveEndTime;
 
-/// 直播间自动关闭时间
-@property (nonatomic, assign) NSInteger expiredMinute;
+/// 直播间关闭延迟时间
+@property (nonatomic, assign) NSInteger expiredCloseMinute;
 
 @property (nonatomic, copy) LiveRoomBackAction callback;
 
@@ -420,8 +420,14 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
     self.isTempRoom = isTemp;
     if (isTemp == NO) {
         self.liveEndTime = [source stringValueForKey:@"liveEndTime"];
-        self.expiredMinute = [source integerValueForKey:@"expiredMinute"];
+        self.expiredCloseMinute = [source integerValueForKey:@"expiredCloseMinute"];
     }
+    else {
+        self.liveEndTime = [source stringValueForKey:@"liveEndTime"];
+        self.expiredCloseMinute = 0;
+    }
+    
+    
 }
 
 - (void)createLivePageViewDisplay {
@@ -470,14 +476,14 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
     
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appEnterBackground) name:@"appEnterBackground" object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appBecomeActive) name:@"appBecomeActive" object:nil];
-    [self judgeAutoClose];
+    [self configTimerManager];
 }
 
-- (void)judgeAutoClose {
-    if (self.isTempRoom == NO) {
-        self.timeManager.endClassTime = self.liveEndTime;
-        self.timeManager.autoCloseNetworkRoomTime = [self getCloseTime];
-    }
+- (void)configTimerManager {
+    
+    self.timeManager.endClassTime = self.liveEndTime;
+    self.timeManager.autoCloseNetworkRoomTime = [self getCloseTime];
+    self.timeManager.isTempRoom = self.isTempRoom;
 }
 
 #pragma mark ------ enter back ground
@@ -1306,13 +1312,22 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
 }
 
 #pragma mark ----- time manager delegate
-- (void)quitClassroomNotifer {
-    [self MBPShow:@"直播已结束!"];
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-        [self quitRoomBackPreView:NO];
-    });
+- (void)formatTime:(NSString *)timeString {
+    self.headView.timeLabel.text = timeString;
+}
+
+- (void)timeLabelAddAnimation:(CABasicAnimation *)animation {
+    self.headView.timeLabel.textColor = HexRGB(0x2DC7AA);
+//    [self.headView.timeLabel.layer addAnimation:animation forKey:nil];
 }
 
+//- (void)quitClassroomNotifer {
+//    [self MBPShow:@"直播已结束!"];
+//    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//        [self quitRoomBackPreView:NO];
+//    });
+//}
+
 #pragma mark - gesture and button action
 - (void)resetBottomGesture:(UIGestureRecognizer *)gestureRecognizer {
     if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
@@ -1823,12 +1838,8 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
 }
 
 - (NSInteger)getCloseTime {
-    NSDateFormatter *formatter = [NSObject getDateformatter];
-    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
-    NSDate *currentDate = [NSDate date];
-    NSDate *expireDate = [formatter dateFromString:self.liveEndTime];
-    NSTimeInterval timeInterval = [expireDate timeIntervalSinceDate:currentDate];
-    return self.expiredMinute * 60 + timeInterval;
+
+    return self.expiredCloseMinute * 60;
 }
 
 - (void)dealloc {

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/LiveroomTimeManager.h

@@ -10,6 +10,10 @@
 
 @protocol LiveroomTimeManagerDelegate <NSObject>
 
+- (void)formatTime:(NSString *_Nonnull)timeString;
+
+- (void)timeLabelAddAnimation:(CABasicAnimation *_Nonnull)animation;
+
 - (void)quitClassroomNotifer;
 
 @end
@@ -23,6 +27,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, assign) NSInteger autoCloseNetworkRoomTime;
 
+@property (nonatomic, assign) BOOL isTempRoom;
+
 - (instancetype)initWithDelegate:(id <LiveroomTimeManagerDelegate>)delegate;
 
 - (void)stopDurationTimer;

+ 71 - 8
KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/LiveroomTimeManager.m

@@ -13,6 +13,10 @@
 
 @property (nonatomic, strong) NSTimer *timeTimer;
 
+@property (nonatomic, assign) BOOL isCountDown;
+
+@property (nonatomic, assign) BOOL showCloseTips;
+
 @property (nonatomic, weak) id <LiveroomTimeManagerDelegate>delegate;
 
 @end
@@ -28,21 +32,35 @@
     return self;
 }
 
+- (void)setEndClassTime:(NSString *)endClassTime {
+    _endClassTime = endClassTime;
+    NSDateFormatter *formatter = [NSObject getDateformatter];
+    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSDate *currentDate = [NSDate date];
+    NSDate *expireDate = [formatter dateFromString:endClassTime];
+    NSTimeInterval timeInterval = [expireDate timeIntervalSinceDate:currentDate];
+    self.duration = timeInterval;
+}
+
+- (void)setDuration:(NSInteger)duration {
+    _duration = duration;
+    if (_duration < 300 && self.isCountDown == NO) {
+        self.isCountDown = YES;
+        if (self.delegate && [self.delegate respondsToSelector:@selector(timeLabelAddAnimation:)]) {
+            [self.delegate timeLabelAddAnimation:[self opacityForeverAnimation:1.0f]];
+        }
+    }
+}
+
 - (void)setAutoCloseNetworkRoomTime:(NSInteger)autoCloseNetworkRoomTime {
     _autoCloseNetworkRoomTime = autoCloseNetworkRoomTime;
-    self.duration = autoCloseNetworkRoomTime;
     [self.timeTimer setFireDate:[NSDate distantPast]];
 }
 
 - (void)timeFunction:(NSTimer *)timer {
-    NSInteger durationInteger = self.duration;
-    if (durationInteger <= 0) {
-//        if (self.delegate && [self.delegate respondsToSelector:@selector(quitClassroomNotifer)]) {
-//            [self.delegate quitClassroomNotifer];
-//        }
-        [self stopDurationTimer];
+    if (self.delegate && [self.delegate respondsToSelector:@selector(formatTime:)]) {
+        [self.delegate formatTime:[self formatJoinTime]];
     }
-    self.duration--;
 }
 
 - (void)stopDurationTimer {
@@ -53,6 +71,37 @@
     }
 }
 
+
+- (NSString *)formatJoinTime {
+    if (self.duration <= 0 && self.showCloseTips == NO) {
+        self.duration = self.autoCloseNetworkRoomTime * 60;
+        self.showCloseTips = YES;
+        return @"00:00:00";
+    }
+    else if (self.duration <= 0 && self.showCloseTips) {
+        if (self.isTempRoom == NO) {
+            return @"直播关闭:00:00:00";
+        }
+        else {
+            return @"00:00:00";
+        }
+    }
+    NSInteger durationInteger = self.duration--;
+    NSInteger durationS = durationInteger % 60;
+    NSInteger durationM = ((durationInteger - durationS) / 60) % 60;
+    NSInteger durationH = (durationInteger - durationS - 60 * durationM) / 3600;
+    NSMutableArray * durationArr = [NSMutableArray new];
+    [durationArr addObject:[NSString stringWithFormat:@"%02ld", (long)durationH]];
+    [durationArr addObject:[NSString stringWithFormat:@"%02ld", (long)durationM]];
+    [durationArr addObject:[NSString stringWithFormat:@"%02ld", (long)durationS]];
+    if (self.showCloseTips && self.isTempRoom == NO) {
+        return [NSString stringWithFormat:@"直播关闭:%@",[durationArr componentsJoinedByString:@":"]];
+    }
+    else {
+        return [durationArr componentsJoinedByString:@":"];
+    }
+}
+
 #pragma mark --- lazying
 - (NSTimer *)timeTimer {
     if (_timeTimer == nil) {
@@ -67,4 +116,18 @@
     
     return _timeTimer;
 }
+
+#pragma mark === 永久闪烁的动画 ======
+- (CABasicAnimation *)opacityForeverAnimation:(CGFloat)time {
+    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
+    animation.fromValue = [NSNumber numberWithFloat:1.0f];
+    animation.toValue = [NSNumber numberWithFloat:0.0f];//这是透明度。
+    animation.autoreverses = YES;
+    animation.duration = time;
+    animation.repeatCount = MAXFLOAT;
+    animation.removedOnCompletion = NO;
+    animation.fillMode = kCAFillModeForwards;
+    animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
+    return animation;
+}
 @end

+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/AnimationView/LiveAnimationView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/AnimationView/LiveAnimationView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/AnimationView/LiveAnimationView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/AnimationView/LiveAnimationView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/CreateLiveBodyView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/CreateLiveBodyView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/CreateLiveBodyView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/CreateLiveBodyView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/CreateLiveBodyView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/CreateLiveBodyView.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/Cell/BaseEmoji.plist → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/Cell/BaseEmoji.plist


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/Cell/KSChatEmojiCollectionCell.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/Cell/KSChatEmojiCollectionCell.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/Cell/KSChatEmojiCollectionCell.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/Cell/KSChatEmojiCollectionCell.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/KSChatEmojiBoardView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatEmojiBoardView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/KSChatEmojiBoardView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatEmojiBoardView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/KSChatInputBarControl.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputBarControl.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/KSChatInputBarControl.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputBarControl.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/KSChatInputView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/InputBar/KSChatInputView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/InputBar/KSChatInputView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSBeautySettingView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSBeautySettingView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSBeautySettingView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSBeautySettingView.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSChatroomTextCell.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSChatroomTextCell.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/KSChatroomTextCell.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/KSChatroomTextCell.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveMoreDisplayView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveMoreDisplayView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveMoreDisplayView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveMoreDisplayView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveMoreDisplayView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveMoreDisplayView.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LivePreviewBodyView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LivePreviewBodyView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LivePreviewBodyView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LivePreviewBodyView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LivePreviewBodyView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LivePreviewBodyView.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomAlertView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomAlertView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomAlertView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomAlertView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomBottomView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomBottomView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomBottomView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomBottomView.xib


+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomHeadView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomHeadView.h

@@ -23,6 +23,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (weak, nonatomic) IBOutlet UILabel *msLabel;
 
+@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
+
 + (instancetype)shareInstance;
 
 

+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomHeadView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomHeadView.m


+ 35 - 8
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomHeadView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomHeadView.xib

@@ -11,10 +11,10 @@
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
         <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="LiveRoomHeadView">
             <rect key="frame" x="0.0" y="0.0" width="414" height="98"/>
-            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Bsy-0e-Kd6">
-                    <rect key="frame" x="12" y="10" width="100" height="38"/>
+                    <rect key="frame" x="12" y="5" width="100" height="38"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="dup-hE-LqC">
                             <rect key="frame" x="3" y="3" width="32" height="32"/>
@@ -55,7 +55,7 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vM0-gj-bnG">
-                    <rect key="frame" x="331" y="10" width="71" height="38"/>
+                    <rect key="frame" x="331" y="5" width="71" height="38"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="chatroom_member" translatesAutoresizingMaskIntoConstraints="NO" id="64B-QO-YKw">
                             <rect key="frame" x="9" y="7" width="24" height="24"/>
@@ -89,7 +89,7 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2Q6-aH-Lkg">
-                    <rect key="frame" x="12" y="56" width="99" height="22"/>
+                    <rect key="frame" x="12" y="47" width="99" height="22"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="like_logo" translatesAutoresizingMaskIntoConstraints="NO" id="WIX-dN-hSX">
                             <rect key="frame" x="7" y="4" width="14" height="14"/>
@@ -121,7 +121,7 @@
                     </userDefinedRuntimeAttributes>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SDz-hP-Rz5">
-                    <rect key="frame" x="343.5" y="56" width="58.5" height="22"/>
+                    <rect key="frame" x="343.5" y="47" width="58.5" height="22"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="live_networking_good" translatesAutoresizingMaskIntoConstraints="NO" id="6lE-F8-i7V">
                             <rect key="frame" x="7" y="3.5" width="20" height="15"/>
@@ -152,17 +152,43 @@
                         </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                 </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RAe-xG-ljz">
+                    <rect key="frame" x="12" y="74" width="66.5" height="22"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00:00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hWB-e1-YNx">
+                            <rect key="frame" x="7" y="3.5" width="52.5" height="15"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" red="0.039215686270000001" green="0.039215686270000001" blue="0.039215686270000001" alpha="0.25" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstItem="hWB-e1-YNx" firstAttribute="leading" secondItem="RAe-xG-ljz" secondAttribute="leading" constant="7" id="3YO-gv-Fyt"/>
+                        <constraint firstAttribute="height" constant="22" id="E8v-Fz-Gv2"/>
+                        <constraint firstItem="hWB-e1-YNx" firstAttribute="centerX" secondItem="RAe-xG-ljz" secondAttribute="centerX" id="mp8-fc-cgH"/>
+                        <constraint firstAttribute="trailing" secondItem="hWB-e1-YNx" secondAttribute="trailing" constant="7" id="sGJ-YY-SQh"/>
+                        <constraint firstItem="hWB-e1-YNx" firstAttribute="centerY" secondItem="RAe-xG-ljz" secondAttribute="centerY" id="toy-J5-S7T"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="11"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
             </subviews>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
-                <constraint firstItem="2Q6-aH-Lkg" firstAttribute="top" secondItem="Bsy-0e-Kd6" secondAttribute="bottom" constant="8" id="9DL-kc-PFQ"/>
+                <constraint firstItem="2Q6-aH-Lkg" firstAttribute="top" secondItem="Bsy-0e-Kd6" secondAttribute="bottom" constant="4" id="9DL-kc-PFQ"/>
                 <constraint firstItem="2Q6-aH-Lkg" firstAttribute="leading" secondItem="Bsy-0e-Kd6" secondAttribute="leading" id="Qdk-xr-AJa"/>
                 <constraint firstAttribute="trailing" secondItem="vM0-gj-bnG" secondAttribute="trailing" constant="12" id="Sda-ur-z0i"/>
-                <constraint firstItem="Bsy-0e-Kd6" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="ZLT-LB-QEi"/>
+                <constraint firstItem="RAe-xG-ljz" firstAttribute="top" secondItem="2Q6-aH-Lkg" secondAttribute="bottom" constant="5" id="T9h-lt-Lep"/>
+                <constraint firstItem="Bsy-0e-Kd6" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="5" id="ZLT-LB-QEi"/>
                 <constraint firstItem="Bsy-0e-Kd6" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="12" id="fTh-kx-C67"/>
                 <constraint firstItem="vM0-gj-bnG" firstAttribute="trailing" secondItem="SDz-hP-Rz5" secondAttribute="trailing" id="gA7-8Z-XjX"/>
                 <constraint firstItem="vM0-gj-bnG" firstAttribute="bottom" secondItem="Bsy-0e-Kd6" secondAttribute="bottom" id="geE-uz-o2E"/>
                 <constraint firstItem="vM0-gj-bnG" firstAttribute="top" secondItem="Bsy-0e-Kd6" secondAttribute="top" id="rdZ-if-E5c"/>
+                <constraint firstItem="RAe-xG-ljz" firstAttribute="leading" secondItem="2Q6-aH-Lkg" secondAttribute="leading" id="sqS-zm-pyo"/>
                 <constraint firstItem="SDz-hP-Rz5" firstAttribute="top" secondItem="2Q6-aH-Lkg" secondAttribute="top" id="zXN-bN-ThC"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
@@ -175,8 +201,9 @@
                 <outlet property="msLabel" destination="w1d-G4-cXa" id="Mjf-Ym-of1"/>
                 <outlet property="roomMemberCount" destination="Ah9-uZ-F6C" id="gkV-k9-V3Q"/>
                 <outlet property="rttImage" destination="6lE-F8-i7V" id="Hk3-gB-h1h"/>
+                <outlet property="timeLabel" destination="hWB-e1-YNx" id="Atp-Rp-vqC"/>
             </connections>
-            <point key="canvasLocation" x="131.8840579710145" y="19.419642857142858"/>
+            <point key="canvasLocation" x="135" y="16"/>
         </view>
     </objects>
     <resources>

+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomLikeLayer.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomLikeLayer.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveRoomLikeLayer.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveRoomLikeLayer.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveSeatApplyCell.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyCell.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveSeatApplyCell.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyCell.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveSeatApplyCell.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyCell.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveSeatApplyView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveSeatApplyView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/LiveSeatApplyView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/LiveSeatApplyView.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatContentView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatContentView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatContentView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatContentView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatTipsView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatTipsView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatTipsView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Live/Model/View/SeatTipsView.m