Bladeren bron

精品曲目

Steven 2 jaren geleden
bovenliggende
commit
865c301f0e
30 gewijzigde bestanden met toevoegingen van 698 en 381 verwijderingen
  1. 59 33
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 4 4
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 1 1
      KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m
  5. 9 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  6. 21 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  7. 127 15
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m
  8. 0 24
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMuiscHeadView.h
  9. 0 46
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMuiscHeadView.m
  10. 0 26
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCell.h
  11. 0 149
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCell.xib
  12. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.h
  13. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.m
  14. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.xib
  15. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCollectionCell.h
  16. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCollectionCell.m
  17. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCollectionCell.xib
  18. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.h
  19. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.m
  20. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.xib
  21. 27 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.h
  22. 47 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.m
  23. 52 39
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.xib
  24. 23 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.h
  25. 35 43
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.m
  26. 154 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.xib
  27. 19 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.h
  28. 62 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.m
  29. 57 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.xib
  30. 1 1
      README.md

+ 59 - 33
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -574,13 +574,15 @@
 		BC4BCE7A2823AB6500522C8B /* KSAddressPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4BCE792823AB6500522C8B /* KSAddressPickerView.m */; };
 		BC4BCE7D2823B66000522C8B /* AddressDetailBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4BCE7C2823B66000522C8B /* AddressDetailBodyView.m */; };
 		BC4BCE7F2823B66A00522C8B /* AddressDetailBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4BCE7E2823B66A00522C8B /* AddressDetailBodyView.xib */; };
+		BC4CF28228D051C400961C61 /* HomeQualityMusic.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27A28D051C300961C61 /* HomeQualityMusic.m */; };
+		BC4CF28328D051C500961C61 /* HomeQualityMusicCollectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF27B28D051C400961C61 /* HomeQualityMusicCollectionCell.xib */; };
+		BC4CF28428D051C500961C61 /* HomeQualityMusicCollectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27D28D051C400961C61 /* HomeQualityMusicCollectionCell.m */; };
+		BC4CF28528D051C500961C61 /* HomeQualityMusicCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27F28D051C400961C61 /* HomeQualityMusicCellView.m */; };
+		BC4CF28628D051C500961C61 /* HomeQualityMusicCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF28028D051C400961C61 /* HomeQualityMusicCellView.xib */; };
+		BC4CF28728D051C500961C61 /* HomeQualityMusic.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF28128D051C400961C61 /* HomeQualityMusic.xib */; };
 		BC513E7A28A4D85F003F58C4 /* accomapny_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BC513E7928A4D85F003F58C4 /* accomapny_animation.json */; };
 		BC513E7C28A4D868003F58C4 /* musicRoom_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BC513E7B28A4D868003F58C4 /* musicRoom_animation.json */; };
 		BC513E7E28A4D874003F58C4 /* live_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BC513E7D28A4D874003F58C4 /* live_animation.json */; };
-		BC523B04289D00C000E9D66B /* HomeHotMusicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC523B02289D00C000E9D66B /* HomeHotMusicCell.m */; };
-		BC523B05289D00C000E9D66B /* HomeHotMusicCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC523B03289D00C000E9D66B /* HomeHotMusicCell.xib */; };
-		BC523B08289D015D00E9D66B /* HomeHotMuiscHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC523B07289D015D00E9D66B /* HomeHotMuiscHeadView.m */; };
-		BC523B0A289D016B00E9D66B /* HomeHotMuiscHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC523B09289D016B00E9D66B /* HomeHotMuiscHeadView.xib */; };
 		BC523B0D289D0FE300E9D66B /* HomeHotMusicModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC523B0B289D0FE300E9D66B /* HomeHotMusicModel.m */; };
 		BC523B1028A09F3000E9D66B /* MineHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC523B0F28A09F2F00E9D66B /* MineHeadView.m */; };
 		BC523B1228A09F3800E9D66B /* MineHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC523B1128A09F3800E9D66B /* MineHeadView.xib */; };
@@ -2055,15 +2057,18 @@
 		BC4BCE7B2823B66000522C8B /* AddressDetailBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddressDetailBodyView.h; sourceTree = "<group>"; };
 		BC4BCE7C2823B66000522C8B /* AddressDetailBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AddressDetailBodyView.m; sourceTree = "<group>"; };
 		BC4BCE7E2823B66A00522C8B /* AddressDetailBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AddressDetailBodyView.xib; sourceTree = "<group>"; };
+		BC4CF27928D051C300961C61 /* HomeQualityMusic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusic.h; sourceTree = "<group>"; };
+		BC4CF27A28D051C300961C61 /* HomeQualityMusic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusic.m; sourceTree = "<group>"; };
+		BC4CF27B28D051C400961C61 /* HomeQualityMusicCollectionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeQualityMusicCollectionCell.xib; sourceTree = "<group>"; };
+		BC4CF27C28D051C400961C61 /* HomeQualityMusicCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusicCellView.h; sourceTree = "<group>"; };
+		BC4CF27D28D051C400961C61 /* HomeQualityMusicCollectionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusicCollectionCell.m; sourceTree = "<group>"; };
+		BC4CF27E28D051C400961C61 /* HomeQualityMusicCollectionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusicCollectionCell.h; sourceTree = "<group>"; };
+		BC4CF27F28D051C400961C61 /* HomeQualityMusicCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusicCellView.m; sourceTree = "<group>"; };
+		BC4CF28028D051C400961C61 /* HomeQualityMusicCellView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeQualityMusicCellView.xib; sourceTree = "<group>"; };
+		BC4CF28128D051C400961C61 /* HomeQualityMusic.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeQualityMusic.xib; sourceTree = "<group>"; };
 		BC513E7928A4D85F003F58C4 /* accomapny_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = accomapny_animation.json; sourceTree = "<group>"; };
 		BC513E7B28A4D868003F58C4 /* musicRoom_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = musicRoom_animation.json; sourceTree = "<group>"; };
 		BC513E7D28A4D874003F58C4 /* live_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = live_animation.json; sourceTree = "<group>"; };
-		BC523B01289D00C000E9D66B /* HomeHotMusicCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotMusicCell.h; sourceTree = "<group>"; };
-		BC523B02289D00C000E9D66B /* HomeHotMusicCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotMusicCell.m; sourceTree = "<group>"; };
-		BC523B03289D00C000E9D66B /* HomeHotMusicCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotMusicCell.xib; sourceTree = "<group>"; };
-		BC523B06289D015D00E9D66B /* HomeHotMuiscHeadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeHotMuiscHeadView.h; sourceTree = "<group>"; };
-		BC523B07289D015D00E9D66B /* HomeHotMuiscHeadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeHotMuiscHeadView.m; sourceTree = "<group>"; };
-		BC523B09289D016B00E9D66B /* HomeHotMuiscHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeHotMuiscHeadView.xib; sourceTree = "<group>"; };
 		BC523B0B289D0FE300E9D66B /* HomeHotMusicModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeHotMusicModel.m; sourceTree = "<group>"; };
 		BC523B0C289D0FE300E9D66B /* HomeHotMusicModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeHotMusicModel.h; sourceTree = "<group>"; };
 		BC523B0E28A09F2F00E9D66B /* MineHeadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MineHeadView.h; sourceTree = "<group>"; };
@@ -4062,6 +4067,8 @@
 		277935FD27E32BBF0010E277 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BC4CF27828D051B500961C61 /* HomeQuality */,
+				BC4CF27728D0515700961C61 /* HomeMusic */,
 				BCA1134F28A242FC007FAFB9 /* HomeBannerView.h */,
 				BCA1135128A242FC007FAFB9 /* HomeBannerView.m */,
 				BCA1135028A242FC007FAFB9 /* HomeBannerView.xib */,
@@ -4098,21 +4105,6 @@
 				BCDE3598289BC02100A9A560 /* HomeHotAlbumCell.h */,
 				BCDE3599289BC02100A9A560 /* HomeHotAlbumCell.m */,
 				BCDE3597289BC02100A9A560 /* HomeHotAlbumCell.xib */,
-				BC523B06289D015D00E9D66B /* HomeHotMuiscHeadView.h */,
-				BC523B07289D015D00E9D66B /* HomeHotMuiscHeadView.m */,
-				BC523B09289D016B00E9D66B /* HomeHotMuiscHeadView.xib */,
-				BC14A62228A212C40086395C /* HomeHotMusicView.h */,
-				BC14A62328A212C50086395C /* HomeHotMusicView.m */,
-				BC14A62528A212CC0086395C /* HomeHotMusicView.xib */,
-				BCA1134528A22A66007FAFB9 /* HomeHotMusicCollectionCell.h */,
-				BCA1134628A22A66007FAFB9 /* HomeHotMusicCollectionCell.m */,
-				BCA1134728A22A66007FAFB9 /* HomeHotMusicCollectionCell.xib */,
-				BCA1134A28A23221007FAFB9 /* HomeHotMusicCellView.h */,
-				BCA1134B28A23221007FAFB9 /* HomeHotMusicCellView.m */,
-				BCA1134D28A23229007FAFB9 /* HomeHotMusicCellView.xib */,
-				BC523B01289D00C000E9D66B /* HomeHotMusicCell.h */,
-				BC523B02289D00C000E9D66B /* HomeHotMusicCell.m */,
-				BC523B03289D00C000E9D66B /* HomeHotMusicCell.xib */,
 				BC5756AF28B60095002302D8 /* HomeAuthAlertView.h */,
 				BC5756B028B60095002302D8 /* HomeAuthAlertView.m */,
 				BC5756B228B600A3002302D8 /* HomeAuthAlertView.xib */,
@@ -5235,6 +5227,38 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		BC4CF27728D0515700961C61 /* HomeMusic */ = {
+			isa = PBXGroup;
+			children = (
+				BC14A62228A212C40086395C /* HomeHotMusicView.h */,
+				BC14A62328A212C50086395C /* HomeHotMusicView.m */,
+				BC14A62528A212CC0086395C /* HomeHotMusicView.xib */,
+				BCA1134528A22A66007FAFB9 /* HomeHotMusicCollectionCell.h */,
+				BCA1134628A22A66007FAFB9 /* HomeHotMusicCollectionCell.m */,
+				BCA1134728A22A66007FAFB9 /* HomeHotMusicCollectionCell.xib */,
+				BCA1134A28A23221007FAFB9 /* HomeHotMusicCellView.h */,
+				BCA1134B28A23221007FAFB9 /* HomeHotMusicCellView.m */,
+				BCA1134D28A23229007FAFB9 /* HomeHotMusicCellView.xib */,
+			);
+			path = HomeMusic;
+			sourceTree = "<group>";
+		};
+		BC4CF27828D051B500961C61 /* HomeQuality */ = {
+			isa = PBXGroup;
+			children = (
+				BC4CF27928D051C300961C61 /* HomeQualityMusic.h */,
+				BC4CF27A28D051C300961C61 /* HomeQualityMusic.m */,
+				BC4CF28128D051C400961C61 /* HomeQualityMusic.xib */,
+				BC4CF27C28D051C400961C61 /* HomeQualityMusicCellView.h */,
+				BC4CF27F28D051C400961C61 /* HomeQualityMusicCellView.m */,
+				BC4CF28028D051C400961C61 /* HomeQualityMusicCellView.xib */,
+				BC4CF27E28D051C400961C61 /* HomeQualityMusicCollectionCell.h */,
+				BC4CF27D28D051C400961C61 /* HomeQualityMusicCollectionCell.m */,
+				BC4CF27B28D051C400961C61 /* HomeQualityMusicCollectionCell.xib */,
+			);
+			path = HomeQuality;
+			sourceTree = "<group>";
+		};
 		BC513E7F28A4D9BA003F58C4 /* images */ = {
 			isa = PBXGroup;
 			children = (
@@ -6874,9 +6898,9 @@
 				BC8831052873D67C00C702A0 /* LiveVideoCollectionViewCell.xib in Resources */,
 				2755C08E27ED5DB2007D9070 /* GroupApplyChooseCell.xib in Resources */,
 				BCF61BE9280425DA0000ACFE /* InstrumentChooseCell.xib in Resources */,
-				BC523B0A289D016B00E9D66B /* HomeHotMuiscHeadView.xib in Resources */,
 				BC76146F280D57220080FD1F /* HomeworkVideoView.xib in Resources */,
 				BC71D1FD2887FDD40010F14B /* img_31.png in Resources */,
+				BC4CF28628D051C500961C61 /* HomeQualityMusicCellView.xib in Resources */,
 				277931CE27E30FC20010E277 /* KSPremissionAlert.xib in Resources */,
 				BC4058942863028C00111BC5 /* NotiferNavView.xib in Resources */,
 				BCA353CF2858A86200377661 /* MusicRoomCourseCell.xib in Resources */,
@@ -7011,6 +7035,7 @@
 				27D83F5927F4225D00062476 /* LivePreviewBodyView.xib in Resources */,
 				BC41104A2806706800800BD9 /* HomeworkListCell.xib in Resources */,
 				BCD457A72863196F0010B493 /* CourseTimeSegView.xib in Resources */,
+				BC4CF28328D051C500961C61 /* HomeQualityMusicCollectionCell.xib in Resources */,
 				BC9070A428C7159F00237958 /* MyStyleNavView.xib in Resources */,
 				2779362E27E33C360010E277 /* LoginBodyView.xib in Resources */,
 				BC8B6E6E285836B600866917 /* low_staff.png in Resources */,
@@ -7033,7 +7058,6 @@
 				27A54CF927E9BD8B007309A3 /* FeedbackBodyView.xib in Resources */,
 				BC542E4828407B4400633781 /* UseBodyView.xib in Resources */,
 				BCC5841628A9FA9D00BAB4CF /* AccompanyLoadingView.xib in Resources */,
-				BC523B05289D00C000E9D66B /* HomeHotMusicCell.xib in Resources */,
 				BC2456EA286BEF8000D1F7C0 /* MineEmptyGroupCell.xib in Resources */,
 				BCB6340527F6A2F000ACFDCF /* tock.wav in Resources */,
 				BCC03F9A2805681100461B7C /* MyLessonSearchView.xib in Resources */,
@@ -7083,6 +7107,7 @@
 				BC71D1FE2887FDD40010F14B /* img_19.png in Resources */,
 				277D431F27E999A000107DB7 /* ModifyBodyView.xib in Resources */,
 				BC3ACD9C2890D88E00060E97 /* IncomeRecordHeadView.xib in Resources */,
+				BC4CF28728D051C500961C61 /* HomeQualityMusic.xib in Resources */,
 				BCC5840328A9FA8100BAB4CF /* cloud_animation_14.png in Resources */,
 				BC14A61928A0B04A0086395C /* MineBottomView.xib in Resources */,
 				BC8B6E5D2856ED0600866917 /* README.txt in Resources */,
@@ -7240,6 +7265,7 @@
 				277931F327E30FC20010E277 /* UIView+Hints.m in Sources */,
 				2779321927E30FC30010E277 /* UITextView_Toolbar.m in Sources */,
 				BC285833280947BA0024697C /* EvaluateSortView.m in Sources */,
+				BC4CF28428D051C500961C61 /* HomeQualityMusicCollectionCell.m in Sources */,
 				BC32E109286AB142001434DD /* BaseAlertView.m in Sources */,
 				275E3DBF27F45EB90010EC30 /* KSLiveChatroomUserQuit.m in Sources */,
 				BCD6D16528195A91009A773E /* WithdrawApplyBodyView.m in Sources */,
@@ -7449,7 +7475,6 @@
 				277931FD27E30FC30010E277 /* AnimationContoller.m in Sources */,
 				277931FC27E30FC30010E277 /* KLTNavigationController.m in Sources */,
 				BC0A22A1284751F80065C1AB /* KSCloseCourseView.m in Sources */,
-				BC523B04289D00C000E9D66B /* HomeHotMusicCell.m in Sources */,
 				BCDE3591289A7E4900A9A560 /* KSGroupTagImageView.m in Sources */,
 				275E3DBC27F45E750010EC30 /* KSLiveChatroomLeave.m in Sources */,
 				27D83F5127F4036E00062476 /* KSNormalAlertView.m in Sources */,
@@ -7515,6 +7540,7 @@
 				BCB399BC27F9831D00AFF376 /* CourseForLiveCell.m in Sources */,
 				277932F127E310070010E277 /* TZLocationManager.m in Sources */,
 				275B172227EB1BE60081FDEF /* KSRCSearchBar.m in Sources */,
+				BC4CF28528D051C500961C61 /* HomeQualityMusicCellView.m in Sources */,
 				277932E927E310070010E277 /* TZPhotoPreviewController.m in Sources */,
 				BCC9F35527F5F4FD00647449 /* LiveSeatMember.m in Sources */,
 				277931DB27E30FC20010E277 /* UIButton+EnlargeEdge.m in Sources */,
@@ -7717,7 +7743,6 @@
 				275FA55827F30AE300EB6240 /* VideoCourseModel.m in Sources */,
 				275B172927EB26920081FDEF /* ChatAddressHeaderView.m in Sources */,
 				BC7CFFA22817D72200CAEB21 /* IncomeListModel.m in Sources */,
-				BC523B08289D015D00E9D66B /* HomeHotMuiscHeadView.m in Sources */,
 				BC0A22A9284751F80065C1AB /* FullVideoView.m in Sources */,
 				2755C06C27EC7F0E007D9070 /* KSChatComplainController.m in Sources */,
 				BC14A61728A0B0440086395C /* MineBottomView.m in Sources */,
@@ -7788,6 +7813,7 @@
 				275E3DC527F460030010EC30 /* KSLiveChatroomClose.m in Sources */,
 				277932B527E30FFE0010E277 /* SDCycleScrollView.m in Sources */,
 				BC063D842823CEFE000EB350 /* AddressListModel.m in Sources */,
+				BC4CF28228D051C400961C61 /* HomeQualityMusic.m in Sources */,
 				BCA353DB2858D97C00377661 /* MusicRoomListModel.m in Sources */,
 				2779323627E30FC30010E277 /* LLImageCache.m in Sources */,
 				277931D527E30FC20010E277 /* UIView+KSLayer.m in Sources */,
@@ -8092,7 +8118,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForTeacher/KulexiuForTeacher.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1.3.4;
+				CURRENT_PROJECT_VERSION = 1.3.6;
 				DEVELOPMENT_TEAM = B2AP53HHTU;
 				ENABLE_BITCODE = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -8138,7 +8164,7 @@
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/SocialLibraries/QQ",
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.4;
+				MARKETING_VERSION = 1.3.6;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForTeacher;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -8154,7 +8180,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForTeacher/KulexiuForTeacher.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1.3.4;
+				CURRENT_PROJECT_VERSION = 1.3.6;
 				DEVELOPMENT_TEAM = B2AP53HHTU;
 				ENABLE_BITCODE = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -8200,7 +8226,7 @@
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/SocialLibraries/QQ",
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.4;
+				MARKETING_VERSION = 1.3.6;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForTeacher;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;

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


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

@@ -110,10 +110,10 @@
             filePath = "KulexiuForTeacher/Common/Base/KSNetworkingManager.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1340"
-            endingLineNumber = "1340"
-            landmarkName = "+liveRoomSetMicApplyEnable:roomUid:whetherMic:success:faliure:"
-            landmarkType = "7">
+            startingLineNumber = "1361"
+            endingLineNumber = "1361"
+            landmarkName = "KSNetworkingManager"
+            landmarkType = "3">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m

@@ -93,7 +93,7 @@
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     // Override point for customization after application launch.
     [self networkEnableCheck];
-    [Bugly startWithAppId:@"9c0fc0b6b7"];
+    [Bugly startWithAppId:@"c0513c2cf4"];
     [self registerSDK];
     if (@available(iOS 13.0, *)) {
         [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;

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

@@ -576,6 +576,15 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)musicListRequest:(NSString *)post auditStatus:(NSString *)auditStatus page:(NSInteger)page rows:(NSInteger)rows search:(NSString *)search subjectIds:(NSString *)subjectIds success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-teacher/music/sheet/list
+
+/// 首页精品曲目查询
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeQualityMusicListRequest:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 
 // /api-teacher/music/sheet/list
 

+ 21 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -1196,6 +1196,27 @@
 
 // /api-teacher/music/sheet/list
 
+/// 首页精品曲目查询
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeQualityMusicListRequest:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/music/sheet/list"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@(NO) forKey:@"myself"];
+    [parm setValue:@"PASS" forKey:@"auditStatus"];
+    [parm setValue:@(1) forKey:@"page"];
+    [parm setValue:@(20) forKey:@"rows"];
+    [parm setValue:version forKey:@"version"];
+    [parm setValue:@"ios-teacher" forKey:@"platform"];
+    [parm setValue:@(1) forKey:@"exquisiteFlag"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+
+// /api-teacher/music/sheet/list
+
 /// 首页推荐曲谱查询
 /// @param post post
 /// @param version version

+ 127 - 15
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m

@@ -40,15 +40,18 @@
 #import "HomeAlbumView.h"
 #import "HomeAlbumModel.h"
 #import "HomeHotAlbumCell.h"
-#import "HomeHotMuiscHeadView.h"
-#import "HomeHotMusicCell.h"
 #import "HomeHotMusicModel.h"
 
+#import "HomeQualityMusic.h"
+#import "HomeQualityMusicCollectionCell.h"
+
 #import "KSPremissionAlert.h"
 #import "RecordCheckManager.h"
 #import "KSAccompanyWebViewController.h"
+
 #import "HomeHotMusicView.h"
 #import "HomeHotMusicCollectionCell.h"
+
 #import "HomeBannerView.h"
 #import <UIButton+WebCache.h>
 #import "TYCyclePagerView.h"
@@ -94,17 +97,21 @@
 @property (nonatomic, strong) HomeAlbumView *albumView;
 @property (nonatomic, strong) NSMutableArray *albumArray;  // 热门专辑
 @property (nonatomic, strong) UICollectionView *albumCollectionView; // 专辑容器
-
 @property (nonatomic, assign) CGFloat albumViewHeight; // album 高度
 
+// 精品曲谱
+@property (nonatomic, strong) HomeQualityMusic *qualityMusicView;
+@property (nonatomic, strong) UICollectionView *qualityMusicCollectionView; // 精品曲谱容器
+@property (nonatomic, strong) NSMutableArray *qualityMusicArray; // 精品曲谱数据
+@property (nonatomic, assign) CGFloat qualityMusicViewHeight; // 精品music高度
+
 @property (nonatomic, strong) dispatch_group_t requestGroup;
 
 @property (nonatomic, strong) RecentCourseModel *recentCourseModel;
 
+// 热门曲目
 @property (nonatomic, strong) HomeHotMusicView *hotMusicView;
-
 @property (nonatomic, strong) UICollectionView *musicCollectionView; // 曲谱容器
-
 @property (nonatomic, assign) CGFloat hotMusicHeight; // music 高度
 
 @property (nonatomic, strong) BadgeIntroduceView *intruduceAlert;
@@ -216,6 +223,7 @@
     [self refreshNotice];
     [self refreshCourseView:self.recentCourseModel];
     [self refreshAlbumView];
+    [self refreshQualityView];
     [self refreshMusicView];
     // 刷新排序
     [self refreshViewLocation];
@@ -422,10 +430,30 @@
     [self.albumCollectionView reloadData];
 }
 
+- (void)requestQualityMusic {
+    [KSNetworkingManager homeQualityMusicListRequest:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            NSMutableArray *musicArray = [NSMutableArray array];
+            for (NSDictionary *parm in sourceArray) {
+                HomeHotMusicModel *model = [[HomeHotMusicModel alloc] initWithDictionary:parm];
+                [musicArray addObject:model];
+            }
+            self.qualityMusicArray = [NSMutableArray arrayWithArray:musicArray];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
 - (void)requestHotMusicList {
     dispatch_group_enter(self.requestGroup);
     [KSNetworkingManager homeMusicListRequest:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
-        dispatch_group_leave(self.requestGroup);
+       
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
             NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
             NSMutableArray *musicArray = [NSMutableArray array];
@@ -438,11 +466,27 @@
         else {
             [self MBPShow:MESSAGEKEY];
         }
+        [self requestQualityMusic];
     } faliure:^(NSError * _Nonnull error) {
-        dispatch_group_leave(self.requestGroup);
+        [self requestQualityMusic];
     }];
 }
 
+- (void)refreshQualityView {
+    if (self.qualityMusicArray.count) {
+        self.qualityMusicViewHeight = [HomeQualityMusic getViewHeight];
+        self.qualityMusicView.hidden = NO;
+    }
+    else {
+        self.qualityMusicViewHeight = CGFLOAT_MIN;
+        self.qualityMusicView.hidden = YES;
+    }
+    [self.qualityMusicView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.qualityMusicViewHeight);
+    }];
+    [self.qualityMusicCollectionView reloadData];
+}
+
 - (void)refreshMusicView {
     if (self.dataArray.count) {
         self.hotMusicHeight = [HomeHotMusicView getViewHeight];
@@ -535,11 +579,19 @@
         make.height.mas_equalTo(self.albumViewHeight);
     }];
     
+    [self.scrollView addSubview:self.qualityMusicView];
+    self.qualityMusicViewHeight = [HomeQualityMusic getViewHeight];
+    [self.qualityMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.height.mas_equalTo(self.qualityMusicViewHeight);
+    }];
+    
     [self.scrollView addSubview:self.hotMusicView];
     CGFloat musicHeadHeight = [HomeHotMusicView getViewHeight];
     [self.hotMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.top.mas_equalTo(self.qualityMusicView.mas_bottom);
         make.height.mas_equalTo(musicHeadHeight);
         make.bottom.mas_equalTo(self.scrollView.mas_bottom).offset(-10);
     }];
@@ -854,11 +906,6 @@
         webCtrl.url = [NSString stringWithFormat:@"%@/#/helpCenterDetail?id=%@",WEBHOST, bannerModel.internalBaseClassIdentifier];
         [self.navigationController pushViewController:webCtrl animated:YES];
     }
-    /*
-    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
-    webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/helpCenter?catalogType=2"];
-    [self.navigationController pushViewController:webCtrl animated:YES];*/
-    
 }
 
 - (HomeRecentCourseView *)courseView {
@@ -1021,6 +1068,11 @@
     if (collectionView == self.albumCollectionView) {
         return self.albumArray.count;
     }
+    else if (collectionView == self.qualityMusicCollectionView) { // 精品曲目
+        NSInteger lastRowCount = (self.qualityMusicArray.count % 3) > 0 ? 1 : 0;
+        NSInteger count = self.qualityMusicArray.count / 3 + lastRowCount;
+        return count;
+    }
     else {
         NSInteger lastRowCount = (self.dataArray.count % 4) > 0 ? 1 : 0;
         NSInteger count = self.dataArray.count / 4 + lastRowCount;
@@ -1035,6 +1087,19 @@
         [cell configWithAlbumModel:model];
         return cell;
     }
+    else if (collectionView == self.qualityMusicCollectionView) {
+        NSMutableArray *songArray = [NSMutableArray array];
+        NSInteger length = indexPath.item * 3 + 3 > self.qualityMusicArray.count ? self.qualityMusicArray.count - indexPath.item * 3: 3;
+        NSRange range = NSMakeRange(indexPath.item * 3, length);
+        
+        songArray = [NSMutableArray arrayWithArray:[self.qualityMusicArray subarrayWithRange:range]];
+        HomeQualityMusicCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeQualityMusicCollectionCell" forIndexPath:indexPath];
+        MJWeakSelf;
+        [cell configWithSourceArray:songArray callback:^(NSString * _Nonnull songId) {
+            [weakSelf displaySongDetail:songId];
+        }];
+        return cell;
+    }
     else {
         NSMutableArray *songArray = [NSMutableArray array];
         NSInteger length = indexPath.item * 4 + 4 > self.dataArray.count ? self.dataArray.count - indexPath.item * 4: 4;
@@ -1066,6 +1131,9 @@
         return CGSizeMake(100, 140);
 
     }
+    else if (collectionView == self.qualityMusicCollectionView) {
+        return CGSizeMake(KPortraitWidth * 0.83, 240);
+    }
     else {
         return CGSizeMake(KPortraitWidth * 0.83, 320);
     }
@@ -1125,13 +1193,56 @@
     ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-album"];
     [self.navigationController pushViewController:ctrl animated:YES];
 }
+
+#pragma mark ----- 精品曲目
+- (HomeQualityMusic *)qualityMusicView {
+    if (!_qualityMusicView) {
+        _qualityMusicView = [HomeQualityMusic shareInstance];
+        MJWeakSelf;
+        [_qualityMusicView homeMusicMore:^{
+            [weakSelf moreHotMusic:YES];
+        }];
+        [_qualityMusicView.musicContentView addSubview:self.qualityMusicCollectionView];
+        [self.qualityMusicCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_qualityMusicView.musicContentView);
+        }];
+    }
+    return _qualityMusicView;
+}
+
+- (UICollectionView *)qualityMusicCollectionView {
+    if (!_qualityMusicCollectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _qualityMusicCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _qualityMusicCollectionView.backgroundColor = [UIColor clearColor];
+        _qualityMusicCollectionView.delegate = self;
+        _qualityMusicCollectionView.dataSource = self;
+        _qualityMusicCollectionView.showsVerticalScrollIndicator = NO;
+        _qualityMusicCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _qualityMusicCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _qualityMusicCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_qualityMusicCollectionView registerNib:[UINib nibWithNibName:@"HomeQualityMusicCollectionCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeQualityMusicCollectionCell"];
+    }
+    return _qualityMusicCollectionView;
+}
+
 #pragma mark ---- 更多曲目
 - (HomeHotMusicView *)hotMusicView {
     if (!_hotMusicView) {
         _hotMusicView = [HomeHotMusicView shareInstance];
         MJWeakSelf;
         [_hotMusicView homeMusicMore:^{
-            [weakSelf moreHotMusic];
+            [weakSelf moreHotMusic:NO];
         }];
         [_hotMusicView.musicContentView addSubview:self.musicCollectionView];
         [self.musicCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -1142,7 +1253,8 @@
 }
 
 
-- (void)moreHotMusic {
+- (void)moreHotMusic:(BOOL)isQuality {
+    NSString *type = isQuality ? @"?type=fine " : @"?type=list";
     KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
     ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-list"];
     [self.navigationController pushViewController:ctrl animated:YES];

+ 0 - 24
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMuiscHeadView.h

@@ -1,24 +0,0 @@
-//
-//  HomeHotMuiscHeadView.h
-//  KulexiuForTeacher
-//
-//  Created by 王智 on 2022/8/5.
-//
-
-#import <UIKit/UIKit.h>
-
-typedef void(^HotMusicCallback)(void);
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HomeHotMuiscHeadView : UIView
-
-+ (instancetype)shareInstance;
-
-- (void)moreHotMusicCallback:(HotMusicCallback)callback;
-
-+ (CGFloat)getViewHeight;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 46
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMuiscHeadView.m

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

+ 0 - 26
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCell.h

@@ -1,26 +0,0 @@
-//
-//  HomeHotMusicCell.h
-//  KulexiuForTeacher
-//
-//  Created by 王智 on 2022/8/5.
-//
-
-#import <UIKit/UIKit.h>
-#import "HomeHotMusicModel.h"
-
-typedef NS_ENUM(NSInteger, ROWINDEX) {
-    ROWINDEX_TOP,
-    ROWINDEX_MIDDLE,
-    ROWINDEX_BOTTOM,
-};
-
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HomeHotMusicCell : UITableViewCell
-
-- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel rowIndex:(ROWINDEX)rowIndex;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 149
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCell.xib

@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
-    <device id="retina6_1" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="127" id="KGk-i7-Jjw" customClass="HomeHotMusicCell">
-            <rect key="frame" x="0.0" y="0.0" width="398" height="80"/>
-            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
-                <rect key="frame" x="0.0" y="0.0" width="398" height="80"/>
-                <autoresizingMask key="autoresizingMask"/>
-                <subviews>
-                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jbh-Gn-fze">
-                        <rect key="frame" x="14" y="0.0" width="370" height="80"/>
-                        <subviews>
-                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jiT-jE-NaJ">
-                                <rect key="frame" x="11" y="19" width="31" height="17"/>
-                                <subviews>
-                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="免费" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qiv-ia-gYf">
-                                        <rect key="frame" x="5" y="1" width="21" height="14"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="14" id="gC9-cR-d1U"/>
-                                        </constraints>
-                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="10"/>
-                                        <color key="textColor" red="0.0039215686269999999" green="0.75686274509999996" blue="0.70980392160000005" alpha="1" colorSpace="calibratedRGB"/>
-                                        <nil key="highlightedColor"/>
-                                        <userDefinedRuntimeAttributes>
-                                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                                <real key="value" value="4"/>
-                                            </userDefinedRuntimeAttribute>
-                                        </userDefinedRuntimeAttributes>
-                                    </label>
-                                </subviews>
-                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                                <constraints>
-                                    <constraint firstAttribute="width" constant="31" id="05d-FZ-9jt"/>
-                                    <constraint firstItem="qiv-ia-gYf" firstAttribute="leading" secondItem="jiT-jE-NaJ" secondAttribute="leading" constant="5" id="BrL-dW-t72"/>
-                                    <constraint firstAttribute="trailing" secondItem="qiv-ia-gYf" secondAttribute="trailing" constant="5" id="aH8-N1-2Jn"/>
-                                    <constraint firstItem="qiv-ia-gYf" firstAttribute="top" secondItem="jiT-jE-NaJ" secondAttribute="top" constant="1" id="cIQ-E3-h7Z"/>
-                                    <constraint firstAttribute="bottom" secondItem="qiv-ia-gYf" secondAttribute="bottom" constant="2" id="s2A-0q-ogY"/>
-                                </constraints>
-                                <userDefinedRuntimeAttributes>
-                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                        <real key="value" value="4"/>
-                                    </userDefinedRuntimeAttribute>
-                                    <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
-                                        <real key="value" value="1"/>
-                                    </userDefinedRuntimeAttribute>
-                                </userDefinedRuntimeAttributes>
-                            </view>
-                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="最伟大的作品" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="slY-2s-ykS">
-                                <rect key="frame" x="48" y="17.5" width="98" height="20"/>
-                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
-                                <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="calibratedRGB"/>
-                                <nil key="highlightedColor"/>
-                            </label>
-                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-周杰伦" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SaW-0H-yog">
-                                <rect key="frame" x="151" y="20" width="43" height="15"/>
-                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
-                                <nil key="highlightedColor"/>
-                            </label>
-                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="上传者:一把剑走天涯" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="f5C-yS-JTf">
-                                <rect key="frame" x="11" y="49.5" width="123" height="15"/>
-                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
-                                <nil key="highlightedColor"/>
-                            </label>
-                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Eog-mn-h6y">
-                                <rect key="frame" x="146" y="49" width="214" height="16"/>
-                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                                <constraints>
-                                    <constraint firstAttribute="height" constant="16" id="Zxf-l8-cSV"/>
-                                </constraints>
-                            </view>
-                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_music_play" translatesAutoresizingMaskIntoConstraints="NO" id="5b7-oa-noB">
-                                <rect key="frame" x="335" y="28" width="24" height="24"/>
-                                <constraints>
-                                    <constraint firstAttribute="width" constant="24" id="NLF-ui-zhJ"/>
-                                    <constraint firstAttribute="height" constant="24" id="s8T-KO-7Yj"/>
-                                </constraints>
-                            </imageView>
-                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Vaz-zZ-P6l">
-                                <rect key="frame" x="11" y="79" width="349" height="1"/>
-                                <color key="backgroundColor" red="0.90980392156862744" green="0.90980392156862744" blue="0.90980392156862744" alpha="1" colorSpace="calibratedRGB"/>
-                                <constraints>
-                                    <constraint firstAttribute="height" constant="1" id="H9G-cp-eRQ"/>
-                                </constraints>
-                            </view>
-                        </subviews>
-                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                        <constraints>
-                            <constraint firstItem="jiT-jE-NaJ" firstAttribute="top" secondItem="jbh-Gn-fze" secondAttribute="top" constant="19" id="4Sz-RW-i9K"/>
-                            <constraint firstAttribute="trailing" secondItem="5b7-oa-noB" secondAttribute="trailing" constant="11" id="5Dc-NY-UNF"/>
-                            <constraint firstItem="5b7-oa-noB" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="SaW-0H-yog" secondAttribute="trailing" constant="10" id="7YX-nk-hY4"/>
-                            <constraint firstItem="5b7-oa-noB" firstAttribute="centerY" secondItem="jbh-Gn-fze" secondAttribute="centerY" id="7cw-W0-8ZG"/>
-                            <constraint firstItem="Eog-mn-h6y" firstAttribute="leading" secondItem="f5C-yS-JTf" secondAttribute="trailing" constant="12" id="EVe-Rf-Lvl"/>
-                            <constraint firstItem="f5C-yS-JTf" firstAttribute="top" secondItem="slY-2s-ykS" secondAttribute="bottom" constant="12" id="G1W-wI-eZ6"/>
-                            <constraint firstAttribute="trailing" secondItem="Vaz-zZ-P6l" secondAttribute="trailing" constant="10" id="OPd-Or-Xbx"/>
-                            <constraint firstItem="Eog-mn-h6y" firstAttribute="centerY" secondItem="f5C-yS-JTf" secondAttribute="centerY" id="ZLX-nz-rJo"/>
-                            <constraint firstItem="SaW-0H-yog" firstAttribute="centerY" secondItem="slY-2s-ykS" secondAttribute="centerY" id="azF-X0-LWZ"/>
-                            <constraint firstItem="slY-2s-ykS" firstAttribute="leading" secondItem="jiT-jE-NaJ" secondAttribute="trailing" constant="6" id="b4C-Mp-PB7"/>
-                            <constraint firstItem="Vaz-zZ-P6l" firstAttribute="leading" secondItem="jbh-Gn-fze" secondAttribute="leading" constant="11" id="c3i-D5-GaF"/>
-                            <constraint firstAttribute="trailing" secondItem="Eog-mn-h6y" secondAttribute="trailing" constant="10" id="dJD-a9-Oci"/>
-                            <constraint firstItem="f5C-yS-JTf" firstAttribute="leading" secondItem="jbh-Gn-fze" secondAttribute="leading" constant="11" id="htC-BK-SKl"/>
-                            <constraint firstAttribute="bottom" secondItem="Vaz-zZ-P6l" secondAttribute="bottom" id="ijx-UV-481"/>
-                            <constraint firstItem="slY-2s-ykS" firstAttribute="centerY" secondItem="jiT-jE-NaJ" secondAttribute="centerY" id="nxj-PA-6Hr"/>
-                            <constraint firstItem="SaW-0H-yog" firstAttribute="leading" secondItem="slY-2s-ykS" secondAttribute="trailing" constant="5" id="oYt-aA-sr2"/>
-                            <constraint firstItem="jiT-jE-NaJ" firstAttribute="leading" secondItem="jbh-Gn-fze" secondAttribute="leading" constant="11" id="zLF-au-d4x"/>
-                        </constraints>
-                    </view>
-                </subviews>
-                <constraints>
-                    <constraint firstItem="jbh-Gn-fze" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="4RZ-9b-5bO"/>
-                    <constraint firstItem="jbh-Gn-fze" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="8SL-2x-EC4"/>
-                    <constraint firstAttribute="bottom" secondItem="jbh-Gn-fze" secondAttribute="bottom" id="qKr-4W-ecH"/>
-                    <constraint firstAttribute="trailing" secondItem="jbh-Gn-fze" secondAttribute="trailing" constant="14" id="sQt-N0-m8g"/>
-                </constraints>
-            </tableViewCellContentView>
-            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
-            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-            <connections>
-                <outlet property="backView" destination="jbh-Gn-fze" id="Wn1-OA-edP"/>
-                <outlet property="lineView" destination="Vaz-zZ-P6l" id="bHf-OF-Q8B"/>
-                <outlet property="songAuth" destination="SaW-0H-yog" id="CEl-qx-DCr"/>
-                <outlet property="songNameLabel" destination="slY-2s-ykS" id="0vm-ok-WsY"/>
-                <outlet property="statusLabel" destination="qiv-ia-gYf" id="wxL-2B-Mm1"/>
-                <outlet property="statusView" destination="jiT-jE-NaJ" id="C5m-8A-qRD"/>
-                <outlet property="tagView" destination="Eog-mn-h6y" id="beK-Mc-w1Z"/>
-                <outlet property="uploadName" destination="f5C-yS-JTf" id="U3C-qv-ujD"/>
-            </connections>
-            <point key="canvasLocation" x="188.40579710144928" y="117.1875"/>
-        </tableViewCell>
-    </objects>
-    <resources>
-        <image name="home_music_play" width="24" height="24"/>
-        <systemColor name="systemBackgroundColor">
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-        </systemColor>
-    </resources>
-</document>

+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCellView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCellView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCellView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCollectionCell.h → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCollectionCell.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCollectionCell.m → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCollectionCell.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCollectionCell.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCollectionCell.xib


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicView.h → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.h


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicView.m → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.m


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.xib


+ 27 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.h

@@ -0,0 +1,27 @@
+//
+//  HomeQualityMusic.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/9/13.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^HomeQualityMusicBlock)(void);
+
+
+@interface HomeQualityMusic : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *musicContentView;
+
++ (instancetype)shareInstance;
+
+- (void)homeMusicMore:(HomeQualityMusicBlock)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 47 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.m

@@ -0,0 +1,47 @@
+//
+//  HomeQualityMusic.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/9/13.
+//
+
+#import "HomeQualityMusic.h"
+
+@interface HomeQualityMusic ()
+
+@property (nonatomic, copy) HomeQualityMusicBlock callback;
+
+@end
+
+@implementation HomeQualityMusic
+
++ (instancetype)shareInstance {
+    HomeQualityMusic *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeQualityMusic" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)homeMusicMore:(HomeQualityMusicBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)moreMusic:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
++ (CGFloat)getViewHeight {
+    return 304;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 52 - 39
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMuiscHeadView.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.xib

@@ -9,15 +9,15 @@
     <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="HomeHotMuiscHeadView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="50"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeQualityMusic">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="304"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="C1o-cd-QfL">
-                    <rect key="frame" x="355" y="12" width="45" height="18"/>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lPT-H8-gYH">
+                    <rect key="frame" x="355" y="32" width="45" height="18"/>
                     <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="18" id="FTO-uP-sA9"/>
+                        <constraint firstAttribute="height" constant="18" id="rqo-E9-b6q"/>
                     </constraints>
                     <userDefinedRuntimeAttributes>
                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -25,74 +25,87 @@
                         </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                 </view>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="热门曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VP1-m2-OLF">
-                    <rect key="frame" x="35" y="10" width="65.5" height="22"/>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="精品曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xtD-wk-lfc">
+                    <rect key="frame" x="24" y="30" width="73.5" height="22"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="22" id="w4R-gP-3NO"/>
+                        <constraint firstAttribute="height" constant="22" id="GCx-Ai-iPi"/>
                     </constraints>
-                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                     <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
-                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oxr-mK-Clp">
-                    <rect key="frame" x="361" y="6" width="34" height="30"/>
+                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w8u-6P-UD0">
+                    <rect key="frame" x="361" y="26" width="34" height="30"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="30" id="I0I-eS-BvM"/>
+                        <constraint firstAttribute="height" constant="30" id="z8P-gp-qVr"/>
                     </constraints>
                     <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                     <state key="normal">
                         <color key="titleColor" red="0.46666666670000001" green="0.46666666670000001" blue="0.46666666670000001" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
                     </state>
                     <connections>
-                        <action selector="moreHotMusic:" destination="iN0-l3-epB" eventType="touchUpInside" id="zUZ-Jt-z2c"/>
+                        <action selector="moreMusic:" destination="iN0-l3-epB" eventType="touchUpInside" id="u7G-43-8r5"/>
                     </connections>
                 </button>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="更多" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Z3Y-jO-Voe">
-                    <rect key="frame" x="361" y="14" width="25" height="14.5"/>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="更多" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hff-Ky-dYH">
+                    <rect key="frame" x="361" y="34" width="25" height="14.5"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
-                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more" translatesAutoresizingMaskIntoConstraints="NO" id="Zgz-3X-PpC">
-                    <rect key="frame" x="389" y="17" width="6" height="8"/>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more" translatesAutoresizingMaskIntoConstraints="NO" id="4ND-Zx-0De">
+                    <rect key="frame" x="389" y="37" width="6" height="8"/>
                     <constraints>
-                        <constraint firstAttribute="width" constant="6" id="EK2-Ya-BKO"/>
-                        <constraint firstAttribute="height" constant="8" id="rDJ-wy-ZSy"/>
+                        <constraint firstAttribute="width" constant="6" id="1cL-Os-olf"/>
+                        <constraint firstAttribute="height" constant="8" id="AA6-Yn-afz"/>
                     </constraints>
                 </imageView>
-                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="eCx-6l-gMb">
-                    <rect key="frame" x="25" y="12" width="4" height="18"/>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="A0I-27-Obf">
+                    <rect key="frame" x="14" y="32" width="4" height="18"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="18" id="fAK-U1-RXl"/>
-                        <constraint firstAttribute="width" constant="4" id="kv7-n2-tT1"/>
+                        <constraint firstAttribute="width" constant="4" id="tUz-af-bVs"/>
+                        <constraint firstAttribute="height" constant="18" id="x0h-NC-fZU"/>
                     </constraints>
                 </imageView>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fx6-Fa-y4K">
+                    <rect key="frame" x="0.0" y="64" width="414" height="240"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="240" id="iKE-PR-OQe"/>
+                    </constraints>
+                </view>
             </subviews>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
-                <constraint firstItem="Z3Y-jO-Voe" firstAttribute="centerY" secondItem="VP1-m2-OLF" secondAttribute="centerY" id="7Y7-M6-GSi"/>
-                <constraint firstItem="oxr-mK-Clp" firstAttribute="centerY" secondItem="VP1-m2-OLF" secondAttribute="centerY" id="Ann-Ye-E6U"/>
-                <constraint firstItem="eCx-6l-gMb" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="25" id="E73-Eg-YM7"/>
-                <constraint firstItem="Zgz-3X-PpC" firstAttribute="trailing" secondItem="C1o-cd-QfL" secondAttribute="trailing" constant="-5" id="FI4-b4-xqv"/>
-                <constraint firstItem="VP1-m2-OLF" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="Iz1-n8-G3D"/>
-                <constraint firstItem="Zgz-3X-PpC" firstAttribute="leading" secondItem="Z3Y-jO-Voe" secondAttribute="trailing" constant="3" id="KeO-aZ-8O9"/>
-                <constraint firstAttribute="trailing" secondItem="C1o-cd-QfL" secondAttribute="trailing" constant="14" id="Mxl-YS-g2f"/>
-                <constraint firstItem="Zgz-3X-PpC" firstAttribute="centerY" secondItem="VP1-m2-OLF" secondAttribute="centerY" id="MyW-jA-u60"/>
-                <constraint firstItem="C1o-cd-QfL" firstAttribute="centerY" secondItem="Z3Y-jO-Voe" secondAttribute="centerY" id="UMY-rE-gPY"/>
-                <constraint firstItem="Zgz-3X-PpC" firstAttribute="trailing" secondItem="oxr-mK-Clp" secondAttribute="trailing" id="VIA-Ta-zzj"/>
-                <constraint firstItem="Z3Y-jO-Voe" firstAttribute="leading" secondItem="oxr-mK-Clp" secondAttribute="leading" id="Ykj-VZ-vST"/>
-                <constraint firstItem="VP1-m2-OLF" firstAttribute="centerY" secondItem="eCx-6l-gMb" secondAttribute="centerY" id="bvE-cF-byo"/>
-                <constraint firstItem="Z3Y-jO-Voe" firstAttribute="leading" secondItem="C1o-cd-QfL" secondAttribute="leading" constant="6" id="kqA-ah-gkJ"/>
-                <constraint firstItem="VP1-m2-OLF" firstAttribute="leading" secondItem="eCx-6l-gMb" secondAttribute="trailing" constant="6" id="tcK-q2-KL3"/>
+                <constraint firstItem="hff-Ky-dYH" firstAttribute="centerY" secondItem="xtD-wk-lfc" secondAttribute="centerY" id="1gj-B1-ja3"/>
+                <constraint firstItem="4ND-Zx-0De" firstAttribute="centerY" secondItem="xtD-wk-lfc" secondAttribute="centerY" id="7l9-L0-3Uz"/>
+                <constraint firstItem="xtD-wk-lfc" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="AD4-Jl-yII"/>
+                <constraint firstItem="hff-Ky-dYH" firstAttribute="leading" secondItem="lPT-H8-gYH" secondAttribute="leading" constant="6" id="IE2-Rp-Rds"/>
+                <constraint firstAttribute="trailing" secondItem="lPT-H8-gYH" secondAttribute="trailing" constant="14" id="IwF-RJ-ca2"/>
+                <constraint firstAttribute="trailing" secondItem="fx6-Fa-y4K" secondAttribute="trailing" id="V8J-iY-IKF"/>
+                <constraint firstItem="w8u-6P-UD0" firstAttribute="centerY" secondItem="xtD-wk-lfc" secondAttribute="centerY" id="VUh-lm-mOL"/>
+                <constraint firstItem="4ND-Zx-0De" firstAttribute="leading" secondItem="hff-Ky-dYH" secondAttribute="trailing" constant="3" id="YPP-aj-QAe"/>
+                <constraint firstItem="A0I-27-Obf" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="a4e-J3-6Dc"/>
+                <constraint firstItem="fx6-Fa-y4K" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="hqs-f6-oXc"/>
+                <constraint firstItem="hff-Ky-dYH" firstAttribute="leading" secondItem="w8u-6P-UD0" secondAttribute="leading" id="i2q-4t-g9I"/>
+                <constraint firstItem="lPT-H8-gYH" firstAttribute="centerY" secondItem="hff-Ky-dYH" secondAttribute="centerY" id="i6d-23-f5H"/>
+                <constraint firstItem="xtD-wk-lfc" firstAttribute="centerY" secondItem="A0I-27-Obf" secondAttribute="centerY" id="jJn-Gv-pq4"/>
+                <constraint firstItem="4ND-Zx-0De" firstAttribute="trailing" secondItem="lPT-H8-gYH" secondAttribute="trailing" constant="-5" id="k7K-QU-8B2"/>
+                <constraint firstItem="xtD-wk-lfc" firstAttribute="leading" secondItem="A0I-27-Obf" secondAttribute="trailing" constant="6" id="lAX-HW-Nos"/>
+                <constraint firstItem="4ND-Zx-0De" firstAttribute="trailing" secondItem="w8u-6P-UD0" secondAttribute="trailing" id="uiR-an-LoO"/>
+                <constraint firstItem="fx6-Fa-y4K" firstAttribute="top" secondItem="xtD-wk-lfc" secondAttribute="bottom" constant="12" id="xbb-eK-wFh"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
-            <point key="canvasLocation" x="131.8840579710145" y="18.415178571428569"/>
+            <connections>
+                <outlet property="musicContentView" destination="fx6-Fa-y4K" id="8dC-xz-C7v"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="-122.54464285714285"/>
         </view>
     </objects>
     <resources>
-        <image name="home_left" width="4" height="18"/>
+        <image name="home_left" width="4" height="12"/>
         <image name="home_more" width="6" height="8"/>
     </resources>
 </document>

+ 23 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.h

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

+ 35 - 43
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeHotMusicCell.m → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.m

@@ -1,13 +1,13 @@
 //
-//  HomeHotMusicCell.m
-//  KulexiuForTeacher
+//  HomeQualityMusicCellView.m
+//  KulexiuForStudent
 //
-//  Created by 王智 on 2022/8/5.
+//  Created by 王智 on 2022/9/13.
 //
 
-#import "HomeHotMusicCell.h"
+#import "HomeQualityMusicCellView.h"
 
-@interface HomeHotMusicCell ()
+@interface HomeQualityMusicCellView ()
 
 @property (weak, nonatomic) IBOutlet UILabel *statusLabel;
 @property (weak, nonatomic) IBOutlet UIView *statusView;
@@ -16,20 +16,27 @@
 @property (weak, nonatomic) IBOutlet UILabel *uploadName;
 
 @property (weak, nonatomic) IBOutlet UIView *tagView;
-@property (weak, nonatomic) IBOutlet UIView *backView;
 @property (weak, nonatomic) IBOutlet UIView *lineView;
 
+@property (nonatomic, copy) QualityMusicDetailBlock callback;
+
+@property (nonatomic, strong) HomeHotMusicModel *model;
+
 @end
 
-@implementation HomeHotMusicCell
+@implementation HomeQualityMusicCellView
+
 
-- (void)awakeFromNib {
-    [super awakeFromNib];
-    // Initialization code
-    self.selectionStyle = UITableViewCellSelectionStyleNone;
++ (instancetype)shareInstance {
+    HomeQualityMusicCellView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeQualityMusicCellView" owner:nil options:nil] firstObject];
+    return view;
 }
 
-- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel rowIndex:(ROWINDEX)rowIndex {
+- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(QualityMusicDetailBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    self.model = sourceModel;
     if ([NSString isEmptyString:sourceModel.musicSheetName]) {
         self.songNameLabel.text = @"";
     }
@@ -49,10 +56,10 @@
     else {
         NSString *songAuth = @"";
         if (sourceModel.composer.length > 4) {
-            songAuth = [NSString stringWithFormat:@"%@...",[sourceModel.composer substringToIndex:4]];
+            songAuth = [NSString stringWithFormat:@"-%@...",[sourceModel.composer substringToIndex:4]];
         }
         else {
-            songAuth = sourceModel.composer;
+            songAuth = [NSString stringWithFormat:@"-%@",sourceModel.composer];
         }
         self.songAuth.text = songAuth;
     }
@@ -78,29 +85,7 @@
 
     CGFloat maxWidth = [self getTagViewMaxWidth:owner];
     [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
-    self.lineView.hidden = NO;
-    if (rowIndex == ROWINDEX_TOP) {
-        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, kScreenWidth - 28, 80) byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(8, 8)];
-        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
-        maskLayer.frame = self.backView.bounds;
-        maskLayer.path = maskPath.CGPath;
-        self.backView.layer.mask = maskLayer;
-    }
-    else if (rowIndex == ROWINDEX_BOTTOM) {
-        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, kScreenWidth - 28, 80) byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(8, 8)];
-        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
-        maskLayer.frame = self.backView.bounds;
-        maskLayer.path = maskPath.CGPath;
-        self.backView.layer.mask = maskLayer;
-        self.lineView.hidden = YES;
-    }
-    else {
-        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, kScreenWidth - 28, 80) byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(0, 0)];
-        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
-        maskLayer.frame = self.backView.bounds;
-        maskLayer.path = maskPath.CGPath;
-        self.backView.layer.mask = maskLayer;
-    }
+    self.lineView.hidden = hideLineView;
     
     if ([sourceModel.chargeType isEqualToString:@"VIP"]) {
         self.statusView.layer.borderColor = HexRGB(0xCD863E).CGColor;
@@ -121,7 +106,7 @@
 
 - (CGFloat)getTagViewMaxWidth:(NSString *)teacherName {
     CGFloat width = [self getStringWidthInLabel:teacherName font:[UIFont systemFontOfSize:12.0f]];
-    return kScreenWidth - 45  - 10 - 14 - width - 8;
+    return kScreenWidth*0.83 - 48 - width - 12;
 }
 
 - (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {
@@ -164,11 +149,18 @@
         make.top.bottom.mas_equalTo(bgView);
     }];
 }
-
-- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
-    [super setSelected:selected animated:animated];
-
-    // Configure the view for the selected state
+- (IBAction)buttonAction:(id)sender {
+    if (self.callback) {
+        NSString *songId = [NSString stringWithFormat:@"%.0f",self.model.internalBaseClassIdentifier];
+        self.callback(songId);
+    }
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
 }
+*/
 
 @end

+ 154 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.xib

@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeQualityMusicCellView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="76"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-周杰伦" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bMh-Ig-EXo">
+                    <rect key="frame" x="169" y="11" width="43" height="15"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="enw-Zc-6ly">
+                    <rect key="frame" x="11" y="75.5" width="390" height="0.5"/>
+                    <color key="backgroundColor" red="0.90980392160000001" green="0.90980392160000001" blue="0.90980392160000001" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="0.5" id="ffG-qD-zRD"/>
+                    </constraints>
+                </view>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="上传者:一把剑走天涯" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ooE-dG-95h">
+                    <rect key="frame" x="11" y="40.5" width="123" height="15"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="最伟大的作品" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lOd-BK-RpK">
+                    <rect key="frame" x="66" y="8.5" width="98" height="20"/>
+                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                    <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ezP-fo-Bd0">
+                    <rect key="frame" x="146" y="40" width="220" height="16"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="16" id="75t-8f-cek"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jKC-KV-7YE">
+                    <rect key="frame" x="11" y="10" width="31" height="17"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="免费" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dAJ-DA-DwA">
+                            <rect key="frame" x="5" y="1" width="21" height="14"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="14" id="M1C-DA-m9J"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="10"/>
+                            <color key="textColor" red="0.0039215686269999999" green="0.75686274509999996" blue="0.70980392160000005" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="4"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="dAJ-DA-DwA" secondAttribute="trailing" constant="5" id="74Q-AP-Va1"/>
+                        <constraint firstItem="dAJ-DA-DwA" firstAttribute="top" secondItem="jKC-KV-7YE" secondAttribute="top" constant="1" id="Mu5-cn-6Cj"/>
+                        <constraint firstAttribute="bottom" secondItem="dAJ-DA-DwA" secondAttribute="bottom" constant="2" id="NzK-AH-7RJ"/>
+                        <constraint firstAttribute="width" constant="31" id="Vwl-t7-akm"/>
+                        <constraint firstItem="dAJ-DA-DwA" firstAttribute="leading" secondItem="jKC-KV-7YE" secondAttribute="leading" constant="5" id="wfG-Nz-FIc"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="4"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_music_play" translatesAutoresizingMaskIntoConstraints="NO" id="Gee-ao-VvB">
+                    <rect key="frame" x="371" y="26" width="24" height="24"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="24" id="P0u-bD-AJp"/>
+                        <constraint firstAttribute="height" constant="24" id="TtK-xA-5DI"/>
+                    </constraints>
+                </imageView>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="quality_tag" translatesAutoresizingMaskIntoConstraints="NO" id="oej-cG-7t5">
+                    <rect key="frame" x="47" y="10" width="14" height="17"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="14" id="Kle-GR-r8s"/>
+                        <constraint firstAttribute="height" constant="17" id="nZC-ud-pC9"/>
+                    </constraints>
+                </imageView>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YDh-qy-4zR">
+                    <rect key="frame" x="0.0" y="0.0" width="414" height="76"/>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <connections>
+                        <action selector="buttonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="as6-4S-4Tg"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="lOd-BK-RpK" firstAttribute="centerY" secondItem="jKC-KV-7YE" secondAttribute="centerY" id="0Gc-uo-cn9"/>
+                <constraint firstAttribute="bottom" secondItem="YDh-qy-4zR" secondAttribute="bottom" id="5qF-hs-bvd"/>
+                <constraint firstItem="Gee-ao-VvB" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="61L-GU-EMs"/>
+                <constraint firstItem="ezP-fo-Bd0" firstAttribute="centerY" secondItem="ooE-dG-95h" secondAttribute="centerY" id="7dY-hB-AFe"/>
+                <constraint firstItem="ooE-dG-95h" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="7zN-kf-VRL"/>
+                <constraint firstAttribute="trailing" secondItem="enw-Zc-6ly" secondAttribute="trailing" constant="13" id="97n-rJ-kOK"/>
+                <constraint firstItem="ooE-dG-95h" firstAttribute="top" secondItem="lOd-BK-RpK" secondAttribute="bottom" constant="12" id="BGR-2w-rcI"/>
+                <constraint firstItem="lOd-BK-RpK" firstAttribute="leading" secondItem="oej-cG-7t5" secondAttribute="trailing" constant="5" id="CUS-LP-wWr"/>
+                <constraint firstItem="enw-Zc-6ly" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="Epj-gl-jOP"/>
+                <constraint firstItem="YDh-qy-4zR" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Ja4-dV-KwW"/>
+                <constraint firstAttribute="trailing" secondItem="YDh-qy-4zR" secondAttribute="trailing" id="QMx-PT-siH"/>
+                <constraint firstItem="bMh-Ig-EXo" firstAttribute="centerY" secondItem="lOd-BK-RpK" secondAttribute="centerY" id="Rsb-fE-N6e"/>
+                <constraint firstItem="ezP-fo-Bd0" firstAttribute="leading" secondItem="ooE-dG-95h" secondAttribute="trailing" constant="12" id="Sl7-ct-Oxa"/>
+                <constraint firstItem="YDh-qy-4zR" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="T8F-eW-soQ"/>
+                <constraint firstItem="Gee-ao-VvB" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="bMh-Ig-EXo" secondAttribute="trailing" constant="10" id="Toa-wC-w1H"/>
+                <constraint firstItem="jKC-KV-7YE" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="cRQ-EO-Crg"/>
+                <constraint firstItem="oej-cG-7t5" firstAttribute="centerY" secondItem="jKC-KV-7YE" secondAttribute="centerY" id="f8u-zC-Y9L"/>
+                <constraint firstItem="bMh-Ig-EXo" firstAttribute="leading" secondItem="lOd-BK-RpK" secondAttribute="trailing" constant="5" id="hLd-6k-q1I"/>
+                <constraint firstItem="jKC-KV-7YE" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="heC-iE-kkj"/>
+                <constraint firstAttribute="bottom" secondItem="enw-Zc-6ly" secondAttribute="bottom" id="kbn-HE-kEb"/>
+                <constraint firstItem="oej-cG-7t5" firstAttribute="leading" secondItem="jKC-KV-7YE" secondAttribute="trailing" constant="5" id="pAM-Oo-8N9"/>
+                <constraint firstItem="Gee-ao-VvB" firstAttribute="leading" secondItem="ezP-fo-Bd0" secondAttribute="trailing" constant="5" id="pfM-UG-4Bf"/>
+                <constraint firstAttribute="trailing" secondItem="Gee-ao-VvB" secondAttribute="trailing" constant="19" id="y4W-Sv-SPn"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="lineView" destination="enw-Zc-6ly" id="nhX-K3-ze4"/>
+                <outlet property="songAuth" destination="bMh-Ig-EXo" id="zNe-oZ-AtU"/>
+                <outlet property="songNameLabel" destination="lOd-BK-RpK" id="zCb-DL-R8W"/>
+                <outlet property="statusLabel" destination="dAJ-DA-DwA" id="x7Z-ju-8Y9"/>
+                <outlet property="statusView" destination="jKC-KV-7YE" id="QFY-7g-Bdg"/>
+                <outlet property="tagView" destination="ezP-fo-Bd0" id="MxV-R3-5Yi"/>
+                <outlet property="uploadName" destination="ooE-dG-95h" id="lTE-8T-VdF"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="-198.88392857142856"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="home_music_play" width="24" height="24"/>
+        <image name="quality_tag" width="14" height="17"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 19 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.h

@@ -0,0 +1,19 @@
+//
+//  HomeQualityMusicCollectionCell.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/9/13.
+//
+
+#import <UIKit/UIKit.h>
+#import "HomeQualityMusicCellView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeQualityMusicCollectionCell : UICollectionViewCell
+
+- (void)configWithSourceArray:(NSMutableArray *)songArray callback:(QualityMusicDetailBlock)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 62 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.m

@@ -0,0 +1,62 @@
+//
+//  HomeQualityMusicCollectionCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/9/13.
+//
+
+#import "HomeQualityMusicCollectionCell.h"
+
+@interface HomeQualityMusicCollectionCell ()
+
+@property (weak, nonatomic) IBOutlet UIView *containerView;
+
+@property (nonatomic, copy) QualityMusicDetailBlock callback;
+
+@end
+
+@implementation HomeQualityMusicCollectionCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    
+    CAGradientLayer *layer = [self createGradientLayerFromColor:HexRGB(0xFFF4EC) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0xFFFDFB) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, KPortraitWidth * 0.83, 240)];
+    layer.cornerRadius = 10.0f;
+    layer.masksToBounds = YES;
+    [self.containerView.layer addSublayer:layer];
+}
+
+- (CAGradientLayer *)createGradientLayerFromColor:(UIColor *)fromColor startPoint:(CGPoint)startPoint endColor:(UIColor *)endColor endPoint:(CGPoint)endPoint bounds:(CGRect)bounds {
+    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
+    gradientLayer.colors = @[(__bridge id)fromColor.CGColor, (__bridge id)endColor.CGColor];
+    gradientLayer.startPoint = startPoint;
+    gradientLayer.endPoint = endPoint;
+    gradientLayer.frame = bounds;
+    gradientLayer.locations = @[@(0),@(1.0f)];
+    return gradientLayer;
+}
+
+- (void)configWithSourceArray:(NSMutableArray *)songArray callback:(QualityMusicDetailBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    [self.containerView removeAllSubViews];
+    CGFloat width = KPortraitWidth * 0.83;
+    for (NSInteger i = 0; i < songArray.count; i++) {
+        // 添加按钮
+        HomeQualityMusicCellView *cell = [HomeQualityMusicCellView shareInstance];
+        cell.frame = CGRectMake(0, 80 * i, width, 80);
+        BOOL hideLineView = i == songArray.count - 1 ? YES : NO;
+        MJWeakSelf;
+        [cell configWithMusicModel:songArray[i] hiddenLineView:hideLineView callback:^(NSString * _Nonnull songId) {
+            if (weakSelf.callback) {
+                weakSelf.callback(songId);
+            }
+        }];
+        [self.containerView addSubview:cell];
+    }
+    
+}
+
+@end

+ 57 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.xib

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="HomeQualityMusicCollectionCell">
+            <rect key="frame" x="0.0" y="0.0" width="283" height="215"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="283" height="215"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nES-5a-lQe">
+                        <rect key="frame" x="0.0" y="0.0" width="283" height="215"/>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                                <size key="value" width="0.0" height="2"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                                <color key="value" red="0.8980392157" green="0.8980392157" blue="0.8980392157" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                                <real key="value" value="1"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                                <real key="value" value="2"/>
+                            </userDefinedRuntimeAttribute>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="nES-5a-lQe" secondAttribute="bottom" id="WCC-Kn-8Og"/>
+                <constraint firstItem="nES-5a-lQe" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="X5c-4T-rDj"/>
+                <constraint firstItem="nES-5a-lQe" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="ewL-RL-8Ll"/>
+                <constraint firstAttribute="trailing" secondItem="nES-5a-lQe" secondAttribute="trailing" id="qyi-0y-TNA"/>
+            </constraints>
+            <size key="customSize" width="283" height="215"/>
+            <connections>
+                <outlet property="containerView" destination="nES-5a-lQe" id="JDf-wS-K7C"/>
+            </connections>
+            <point key="canvasLocation" x="300.72463768115944" y="130.24553571428572"/>
+        </collectionViewCell>
+    </objects>
+</document>

+ 1 - 1
README.md

@@ -1,3 +1,3 @@
 #  Bugly 执行
 
-java -jar buglyqq-upload-symbol.jar -appid 9c0fc0b6b7 -appkey 3851db8a-41d7-41a3-8d06-43f28d8b93b3 -bundleid com.DayaMusic.TeachersDaya -version 3.5.1 -platform IOS -inputSymbol /Users/wangzhi/Desktop/管乐迷教师端.app.dSYM
+java -jar buglyqq-upload-symbol.jar -appid c0513c2cf4 -appkey 456be1d5-ce5b-4e7f-b5aa-8f4d27c4c2cd -bundleid com.Colexiu.KulexiuForTeacher -version 1.3.6 -platform IOS -inputSymbol /Users/wangzhi/Desktop/KulexiuForTeacher.app.dSYM