Browse Source

精品曲目

Steven 2 năm trước cách đây
mục cha
commit
357d0ea57e
19 tập tin đã thay đổi với 890 bổ sung12 xóa
  1. 42 4
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 2 2
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/quality_tag.imageset/Contents.json
  5. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/quality_tag.imageset/quality_tag@2x.png
  6. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/quality_tag.imageset/quality_tag@3x.png
  7. 9 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h
  8. 22 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m
  9. 126 5
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  10. 27 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusic.h
  11. 47 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusic.m
  12. 111 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusic.xib
  13. 23 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusicCellView.h
  14. 166 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusicCellView.m
  15. 154 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusicCellView.xib
  16. 19 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusicCollectionCell.h
  17. 62 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusicCollectionCell.m
  18. 57 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusicCollectionCell.xib
  19. 1 1
      README.md

+ 42 - 4
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -451,6 +451,12 @@
 		BC494A7D286958EC00CCD343 /* MusicRoomCourseInfoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC494A7B286958EC00CCD343 /* MusicRoomCourseInfoCell.xib */; };
 		BC494A8028696BC300CCD343 /* MusicRoomListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC494A7F28696BC300CCD343 /* MusicRoomListModel.m */; };
 		BC4CC417288FD689004AD8EC /* LaunchAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CC416288FD689004AD8EC /* LaunchAnimationView.m */; };
+		BC4CF26A28D025E200961C61 /* HomeQualityMusic.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF26928D025E200961C61 /* HomeQualityMusic.m */; };
+		BC4CF26C28D025EA00961C61 /* HomeQualityMusic.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF26B28D025EA00961C61 /* HomeQualityMusic.xib */; };
+		BC4CF27028D0283300961C61 /* HomeQualityMusicCollectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF26E28D0283300961C61 /* HomeQualityMusicCollectionCell.m */; };
+		BC4CF27128D0283300961C61 /* HomeQualityMusicCollectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF26F28D0283300961C61 /* HomeQualityMusicCollectionCell.xib */; };
+		BC4CF27428D0285400961C61 /* HomeQualityMusicCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27328D0285400961C61 /* HomeQualityMusicCellView.m */; };
+		BC4CF27628D0285A00961C61 /* HomeQualityMusicCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF27528D0285A00961C61 /* HomeQualityMusicCellView.xib */; };
 		BC50171227FC0D5600F8BCBC /* SubjectChooseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */; };
 		BC50171527FC0D8300F8BCBC /* SubjectChooseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */; };
 		BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */; };
@@ -1753,6 +1759,15 @@
 		BC494A7F28696BC300CCD343 /* MusicRoomListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MusicRoomListModel.m; sourceTree = "<group>"; };
 		BC4CC415288FD689004AD8EC /* LaunchAnimationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LaunchAnimationView.h; sourceTree = "<group>"; };
 		BC4CC416288FD689004AD8EC /* LaunchAnimationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LaunchAnimationView.m; sourceTree = "<group>"; };
+		BC4CF26828D025E200961C61 /* HomeQualityMusic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusic.h; sourceTree = "<group>"; };
+		BC4CF26928D025E200961C61 /* HomeQualityMusic.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusic.m; sourceTree = "<group>"; };
+		BC4CF26B28D025EA00961C61 /* HomeQualityMusic.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeQualityMusic.xib; sourceTree = "<group>"; };
+		BC4CF26D28D0283300961C61 /* HomeQualityMusicCollectionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusicCollectionCell.h; sourceTree = "<group>"; };
+		BC4CF26E28D0283300961C61 /* HomeQualityMusicCollectionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusicCollectionCell.m; sourceTree = "<group>"; };
+		BC4CF26F28D0283300961C61 /* HomeQualityMusicCollectionCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeQualityMusicCollectionCell.xib; sourceTree = "<group>"; };
+		BC4CF27228D0285400961C61 /* HomeQualityMusicCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusicCellView.h; sourceTree = "<group>"; };
+		BC4CF27328D0285400961C61 /* HomeQualityMusicCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusicCellView.m; sourceTree = "<group>"; };
+		BC4CF27528D0285A00961C61 /* HomeQualityMusicCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeQualityMusicCellView.xib; sourceTree = "<group>"; };
 		BC50171027FC0D5600F8BCBC /* SubjectChooseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseViewController.h; sourceTree = "<group>"; };
 		BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubjectChooseViewController.m; sourceTree = "<group>"; };
 		BC50171327FC0D8300F8BCBC /* SubjectChooseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseBodyView.h; sourceTree = "<group>"; };
@@ -2832,6 +2847,7 @@
 		275FA1F627E7356A00CFEA2E /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BC4CF26728D025CB00961C61 /* QualityMusic */,
 				BCFDA66328BDF0530022B497 /* TeacherStyle */,
 				BCFDA65928BCAE7C0022B497 /* HomePageView */,
 				BCFDA63328BCA1850022B497 /* RecentCourse */,
@@ -4376,6 +4392,22 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		BC4CF26728D025CB00961C61 /* QualityMusic */ = {
+			isa = PBXGroup;
+			children = (
+				BC4CF26828D025E200961C61 /* HomeQualityMusic.h */,
+				BC4CF26928D025E200961C61 /* HomeQualityMusic.m */,
+				BC4CF26B28D025EA00961C61 /* HomeQualityMusic.xib */,
+				BC4CF26D28D0283300961C61 /* HomeQualityMusicCollectionCell.h */,
+				BC4CF26E28D0283300961C61 /* HomeQualityMusicCollectionCell.m */,
+				BC4CF26F28D0283300961C61 /* HomeQualityMusicCollectionCell.xib */,
+				BC4CF27228D0285400961C61 /* HomeQualityMusicCellView.h */,
+				BC4CF27328D0285400961C61 /* HomeQualityMusicCellView.m */,
+				BC4CF27528D0285A00961C61 /* HomeQualityMusicCellView.xib */,
+			);
+			path = QualityMusic;
+			sourceTree = "<group>";
+		};
 		BC60E3C3287D552800B05441 /* DeleteAccount */ = {
 			isa = PBXGroup;
 			children = (
@@ -5995,6 +6027,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				BC4CF27128D0283300961C61 /* HomeQualityMusicCollectionCell.xib in Resources */,
 				BCC583CB28A9EC6400BAB4CF /* cloud_animation_7.png in Resources */,
 				BC71D1052881A2420010F14B /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
 				BC802DBF28BC8E350079E350 /* HomeHotLiveCourseView.xib in Resources */,
@@ -6117,6 +6150,7 @@
 				BC7663162827E49900C91A1D /* NotiferHeadView.xib in Resources */,
 				BC802D9928BC4FE90079E350 /* HomeHotMusicView.xib in Resources */,
 				BCB908F22850B08D00F5FF69 /* ShareMusicCellContentView.xib in Resources */,
+				BC4CF27628D0285A00961C61 /* HomeQualityMusicCellView.xib in Resources */,
 				BCC583CF28A9EC6400BAB4CF /* cloud_animation_1.png in Resources */,
 				2723B5C427F157B100E0B90B /* KSChatListSearchView.xib in Resources */,
 				BC8A459A283DC33400094BBB /* SubjectFinger.plist in Resources */,
@@ -6179,6 +6213,7 @@
 				BCFE53E82812765600AD6786 /* HomeHotAlbumCell.xib in Resources */,
 				BC119239280ED98E00A716F7 /* AccompanyCourseCell.xib in Resources */,
 				BC27A076280FF61300F91E27 /* AccompanyDetailBottomView.xib in Resources */,
+				BC4CF26C28D025EA00961C61 /* HomeQualityMusic.xib in Resources */,
 				BCBFDF4D28115C7A0052AFE5 /* HomeHotCourseView.xib in Resources */,
 				BC71D2892888083B0010F14B /* tabbar5.json in Resources */,
 				BC8A45B4283DC33400094BBB /* EvaluateResultAlert.xib in Resources */,
@@ -6562,6 +6597,7 @@
 				2723B62327F157D500E0B90B /* LFPopupMenuDefaultConfig.m in Sources */,
 				2779351627E324A60010E277 /* NSMutableArray+KSSafe.m in Sources */,
 				BC119247280EDA5800A716F7 /* kSJXCollectionView.m in Sources */,
+				BC4CF27028D0283300961C61 /* HomeQualityMusicCollectionCell.m in Sources */,
 				2779358927E324A80010E277 /* CoinModel.m in Sources */,
 				BCB9091728530E9C00F5FF69 /* KSShopCardView.m in Sources */,
 				275FA1EA27E7351900CFEA2E /* KSRCIMDataSource.m in Sources */,
@@ -6627,6 +6663,7 @@
 				277935B827E324A90010E277 /* FSCalendar.m in Sources */,
 				BCB6356C27F6D2A300ACFDCF /* Whiteboard.m in Sources */,
 				275FA23527E7356B00CFEA2E /* UserInfoManager.m in Sources */,
+				BC4CF26A28D025E200961C61 /* HomeQualityMusic.m in Sources */,
 				2779353327E324A60010E277 /* UIScreen+Extend.m in Sources */,
 				BC8A45AE283DC33400094BBB /* SoundCheckView.m in Sources */,
 				BC71D13A2887CEB70010F14B /* LaunchAnimationViewController.m in Sources */,
@@ -6674,6 +6711,7 @@
 				BCB9FA16286C7F6C005D766B /* KSShareGroupViewController.m in Sources */,
 				BC0212F727FC4A080040569F /* SubjectImageCell.m in Sources */,
 				277935D027E324A90010E277 /* ALCalendarDate.m in Sources */,
+				BC4CF27428D0285400961C61 /* HomeQualityMusicCellView.m in Sources */,
 				BCB9FA2F286D7B02005D766B /* GuideViewController.m in Sources */,
 				BCFE540328152A8500AD6786 /* KSOrderManager.m in Sources */,
 				2723B64427F15B5900E0B90B /* SCIndexViewConfiguration.m in Sources */,
@@ -7210,7 +7248,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForStudent/KulexiuForStudent.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 = (
@@ -7266,7 +7304,7 @@
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/SocialLibraries/Sina/SinaSDK",
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.4;
+				MARKETING_VERSION = 1.3.6;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForStudent;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -7282,7 +7320,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForStudent/KulexiuForStudent.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 = (
@@ -7338,7 +7376,7 @@
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/SocialLibraries/Sina/SinaSDK",
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.4;
+				MARKETING_VERSION = 1.3.6;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForStudent;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;

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


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

@@ -26,8 +26,8 @@
             filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "817"
-            endingLineNumber = "817"
+            startingLineNumber = "861"
+            endingLineNumber = "861"
             landmarkName = "-refreshViewLocation"
             landmarkType = "7">
          </BreakpointContent>

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

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

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


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


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

@@ -616,6 +616,15 @@ NS_ASSUME_NONNULL_BEGIN
 
 // /api-student/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-student/music/sheet/list
+
 /// 首页推荐曲谱查询
 /// @param post post
 /// @param version version

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

@@ -1281,6 +1281,26 @@
 
 // /api-student/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-student/music/sheet/list"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@(NO) forKey:@"myself"];
+    [parm setValue:@"PASS" forKey:@"auditStatus"];
+    [parm setValue:@(1) forKey:@"page"];
+    [parm setValue:@(20) forKey:@"rows"];
+    [parm setValue:version forKey:@"version"];
+    [parm setValue:@"ios-student" forKey:@"platform"];
+    [parm setValue:@(1) forKey:@"exquisiteFlag"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
+// /api-student/music/sheet/list
+
 /// 首页推荐曲谱查询
 /// @param post post
 /// @param version version
@@ -1299,6 +1319,8 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
+
+
 // /api-student/teacher/queryHotTeacherList
 
 /// 推荐老师列表

+ 126 - 5
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m

@@ -38,6 +38,9 @@
 #import "HomeAlbumModel.h"
 #import "HomeHotAlbumCell.h"
 
+#import "HomeQualityMusic.h"
+#import "HomeQualityMusicCollectionCell.h"
+
 #import "HomeHotMusicView.h"
 #import "HomeHotMusicCollectionCell.h"
 #import "KSPremissionAlert.h"
@@ -64,6 +67,7 @@
 #import "TeacherStyleModel.h"
 #import "HomeTeacherLiveModel.h"
 
+
 #define BUTTONWIDTH (65)
 #define BUTTONHEIGHT (80)
 
@@ -108,6 +112,12 @@
 @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) HomeHotMusicView *hotMusicView;
 @property (nonatomic, strong) UICollectionView *musicCollectionView; // 曲谱容器
@@ -235,12 +245,21 @@
         make.height.mas_equalTo(self.albumViewHeight);
     }];
     
+    // 精品曲谱
+    [self.headView addSubview:self.qualityMusicView];
+    self.qualityMusicViewHeight = [HomeQualityMusic getViewHeight];
+    [self.qualityMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.height.mas_equalTo(self.self.qualityMusicViewHeight);
+    }];
+    
     // 热门曲目
     [self.headView addSubview:self.hotMusicView];
     self.musicViewHeight = [HomeHotMusicView getViewHeight];
     [self.hotMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.headView);
-        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.top.mas_equalTo(self.qualityMusicView.mas_bottom);
         make.height.mas_equalTo(self.musicViewHeight);
     }];
     
@@ -288,7 +307,7 @@
 
 - (void)refreshHeadHeight {
     CGFloat bottomSpace = 20.0f;
-    self.headViewHeight = self.bannerViewHeight + self.buttonViewHeight + self.noticeViewHeight + self.courseViewHeight + self.albumViewHeight + self.musicViewHeight + self.talentViewHeight + self.liveViewHeight + self.videoViewHeight + bottomSpace;
+    self.headViewHeight = self.bannerViewHeight + self.buttonViewHeight + self.noticeViewHeight + self.courseViewHeight + self.albumViewHeight + self.qualityMusicViewHeight + self.musicViewHeight + self.talentViewHeight + self.liveViewHeight + self.videoViewHeight + bottomSpace;
     [self.pagerView reloadData];
 }
 
@@ -315,7 +334,7 @@
     self.categoryView.indicators = @[lineView];
     
     _pagerView = [self preferredPagingView];
-    self.pagerView.frame = CGRectMake(0, kNaviBarHeight, kScreenWidth, kScreenHeight - kNaviBarHeight - kTabBarHeight);
+    self.pagerView.frame = CGRectMake(0, kNaviBarHeight, KPortraitWidth, KPortraitHeight - kNaviBarHeight - kTabBarHeight);
     self.pagerView.mainTableView.gestureDelegate = self;
     [self.view addSubview:self.pagerView];
     self.pagerView.backgroundColor = [UIColor clearColor];
@@ -556,10 +575,31 @@
     }];
 }
 
+- (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)requestHotMusic {
     dispatch_group_enter(self.requestGroup);
     [KSNetworkingManager homeMusicListRequest:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
-        dispatch_group_leave(self.requestGroup);
+        
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
             NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
             NSMutableArray *musicArray = [NSMutableArray array];
@@ -572,8 +612,9 @@
         else {
             [self MBPShow:MESSAGEKEY];
         }
+        [self requestQualityMusic];
     } faliure:^(NSError * _Nonnull error) {
-        dispatch_group_leave(self.requestGroup);
+        [self requestQualityMusic];
     }];
 }
 
@@ -691,6 +732,9 @@
     [self refreshCourseView:self.recentCourseModel];
     
     [self refreshAlbumView];
+    
+    [self refreshQualityView];
+    
     [self refreshMusicView];
     // 达人
     [self refreshTalentView];
@@ -946,6 +990,21 @@
     [self.albumCollectionView reloadData];
 }
 
+- (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 {
     
@@ -1129,6 +1188,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 if (collectionView == self.musicCollectionView) { // 乐谱
         NSInteger lastRowCount = (self.musicArray.count % 3) > 0 ? 1 : 0;
         NSInteger count = self.musicArray.count / 3 + lastRowCount;
@@ -1153,6 +1217,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 if (collectionView == self.musicCollectionView) {
         NSMutableArray *songArray = [NSMutableArray array];
         NSInteger length = indexPath.item * 3 + 3 > self.musicArray.count ? self.musicArray.count - indexPath.item * 3: 3;
@@ -1288,6 +1365,9 @@
     if (collectionView == self.albumCollectionView) {
         return CGSizeMake(100, 134);
     }
+    else if (collectionView == self.qualityMusicCollectionView) {
+        return CGSizeMake(KPortraitWidth * 0.83, 240);
+    }
     else if (collectionView == self.musicCollectionView) {
         return CGSizeMake(KPortraitWidth * 0.83, 240);
     }
@@ -1612,6 +1692,47 @@
     [self.navigationController pushViewController:ctrl animated:YES];
 }
 
+#pragma mark ---- 精品曲目
+- (HomeQualityMusic *)qualityMusicView {
+    if (!_qualityMusicView) {
+        _qualityMusicView = [HomeQualityMusic shareInstance];
+        MJWeakSelf;
+        [_qualityMusicView homeMusicMore:^{
+            [weakSelf moreHotMusic];
+        }];
+        [_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 {

+ 27 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/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
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/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

+ 111 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusic.xib

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeQualityMusic">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="304"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <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="rqo-E9-b6q"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="9"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="精品曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xtD-wk-lfc">
+                    <rect key="frame" x="24" y="30" width="73.5" height="22"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="22" id="GCx-Ai-iPi"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
+                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w8u-6P-UD0">
+                    <rect key="frame" x="361" y="26" width="34" height="30"/>
+                    <constraints>
+                        <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="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="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="4ND-Zx-0De">
+                    <rect key="frame" x="389" y="37" width="6" height="8"/>
+                    <constraints>
+                        <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="A0I-27-Obf">
+                    <rect key="frame" x="14" y="32" width="4" height="18"/>
+                    <constraints>
+                        <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="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"/>
+            <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="12"/>
+        <image name="home_more" width="6" height="8"/>
+    </resources>
+</document>

+ 23 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/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

+ 166 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/HomeQualityMusicCellView.m

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

+ 154 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/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
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/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
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/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
KulexiuForStudent/KulexiuForStudent/Module/Home/View/QualityMusic/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 adfcb3bc3d -appkey efbf9aa7-d32c-4f6a-ad92-7275a0485897 -bundleid com.Colexiu.KulexiuForStudent -version 1.0.0 -platform IOS -inputSymbol /Users/wangzhi/Desktop/管乐迷教师端.app.dSYM
+java -jar buglyqq-upload-symbol.jar -appid adfcb3bc3d -appkey efbf9aa7-d32c-4f6a-ad92-7275a0485897 -bundleid com.Colexiu.KulexiuForStudent -version 1.3.6 -platform IOS -inputSymbol /Users/wangzhi/Desktop/KulexiuForStudent.app.dSYM