Browse Source

替换icon,网络教室初改版

Steven 5 years ago
parent
commit
b255add1b7
73 changed files with 2921 additions and 1160 deletions
  1. 70 22
      MusicGradeExam/MusicGradeExam.xcodeproj/project.pbxproj
  2. 5 1
      MusicGradeExam/MusicGradeExam/AppDelegate.m
  3. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/Icon.png
  4. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadApp_76pt.png
  5. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadApp_76pt@2x.png
  6. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadNotifications_20pt.png
  7. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadNotifications_20pt@2x.png
  8. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadProApp_83.5pt@2x.png
  9. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight5_29pt.png
  10. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight5_29pt@2x.png
  11. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight7_40pt.png
  12. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight7_40pt@2x.png
  13. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneApp_60pt@2x.png
  14. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneApp_60pt@3x.png
  15. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneNotification_20pt@2x.png
  16. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneNotification_20pt@3x.png
  17. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight5_29pt@2x.png
  18. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight5_29pt@3x.png
  19. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight7_40pt@2x.png
  20. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight7_40pt@3x.png
  21. 22 0
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Classroom/class_hangUp.imageset/Contents.json
  22. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Classroom/class_hangUp.imageset/class_hangUp@2x.png
  23. BIN
      MusicGradeExam/MusicGradeExam/Assets.xcassets/Classroom/class_hangUp.imageset/class_hangUp@3x.png
  24. 4 0
      MusicGradeExam/MusicGradeExam/Base/KSBaseWKWebViewController.m
  25. 8 4
      MusicGradeExam/MusicGradeExam/Define/PrefixHeader.pch
  26. 2 0
      MusicGradeExam/MusicGradeExam/Info.plist
  27. 1 1
      MusicGradeExam/MusicGradeExam/Manager/OnlineRoomManager.m
  28. 1 1
      MusicGradeExam/MusicGradeExam/UI/Classroom/Controller/ClassroomViewController.h
  29. 7 107
      MusicGradeExam/MusicGradeExam/UI/Classroom/Controller/ClassroomViewController.m
  30. 1 4
      MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/ClassroomService.m
  31. 0 1
      MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/Model/Classroom.m
  32. 1 21
      MusicGradeExam/MusicGradeExam/UI/Classroom/Service/RTCService/RTCService.m
  33. 0 11
      MusicGradeExam/MusicGradeExam/UI/Classroom/View/MainContainer/ClassroomMainContainer.h
  34. 1 38
      MusicGradeExam/MusicGradeExam/UI/Classroom/View/MainContainer/ClassroomMainContainer.m
  35. 0 2
      MusicGradeExam/MusicGradeExam/UI/Classroom/View/TitleView/ClassTitleView.h
  36. 3 47
      MusicGradeExam/MusicGradeExam/UI/Classroom/View/TitleView/ClassTitleView.m
  37. 4 14
      MusicGradeExam/MusicGradeExam/UI/Classroom/View/VideoList/ClassVideoListCell.m
  38. 8 45
      MusicGradeExam/MusicGradeExam/UI/Classroom/View/VideoList/ClassVideoListView.m
  39. 1 0
      MusicGradeExam/MusicGradeExam/UI/Exam/Controller/ExamTicketViewController.m
  40. 5 1
      MusicGradeExam/MusicGradeExam/UI/Exam/Controller/WaitExamViewController.m
  41. 17 0
      MusicGradeExam/MusicGradeExam/UI/ExamLibrary/Controller/ExamLibraryController.h
  42. 120 0
      MusicGradeExam/MusicGradeExam/UI/ExamLibrary/Controller/ExamLibraryController.m
  43. 17 0
      MusicGradeExam/MusicGradeExam/UI/ExamLibrary/View/ExamLibraryListCell.h
  44. 25 0
      MusicGradeExam/MusicGradeExam/UI/ExamLibrary/View/ExamLibraryListCell.m
  45. 59 0
      MusicGradeExam/MusicGradeExam/UI/ExamLibrary/View/ExamLibraryListCell.xib
  46. 4 1
      MusicGradeExam/MusicGradeExam/UI/Home/Controller/HomeViewController.m
  47. 8 0
      MusicGradeExam/MusicGradeExam/UI/Login/Controller/ModifyViewController.m
  48. 4 0
      MusicGradeExam/MusicGradeExam/UI/NotiferMessage/Controller/NotifyMessageViewController.m
  49. 4 0
      MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/UserCenterViewController.m
  50. 1 0
      MusicGradeExam/Podfile
  51. 5 1
      MusicGradeExam/Podfile.lock
  52. 268 0
      MusicGradeExam/Pods/HMSegmentedControl/HMSegmentedControl/HMSegmentedControl.h
  53. 1139 0
      MusicGradeExam/Pods/HMSegmentedControl/HMSegmentedControl/HMSegmentedControl.m
  54. 23 0
      MusicGradeExam/Pods/HMSegmentedControl/LICENSE.md
  55. 62 0
      MusicGradeExam/Pods/HMSegmentedControl/README.md
  56. 1 0
      MusicGradeExam/Pods/Headers/Private/HMSegmentedControl/HMSegmentedControl.h
  57. 1 0
      MusicGradeExam/Pods/Headers/Public/HMSegmentedControl/HMSegmentedControl.h
  58. 5 1
      MusicGradeExam/Pods/Manifest.lock
  59. 843 819
      MusicGradeExam/Pods/Pods.xcodeproj/project.pbxproj
  60. 5 0
      MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl-dummy.m
  61. 12 0
      MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl-prefix.pch
  62. 10 0
      MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.debug.xcconfig
  63. 10 0
      MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.release.xcconfig
  64. 26 0
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests-acknowledgements.markdown
  65. 32 0
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests-acknowledgements.plist
  66. 4 4
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests.debug.xcconfig
  67. 4 4
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests.release.xcconfig
  68. 26 0
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam-acknowledgements.markdown
  69. 32 0
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam-acknowledgements.plist
  70. 4 4
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam.debug.xcconfig
  71. 4 4
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam.release.xcconfig
  72. 1 1
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExamTests/Pods-MusicGradeExamTests.debug.xcconfig
  73. 1 1
      MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExamTests/Pods-MusicGradeExamTests.release.xcconfig

+ 70 - 22
MusicGradeExam/MusicGradeExam.xcodeproj/project.pbxproj

@@ -270,6 +270,9 @@
 		274772AD24BC0DD000181362 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 274772AC24BC0DD000181362 /* libbz2.tbd */; };
 		274772AF24BC0DDF00181362 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 274772AE24BC0DDE00181362 /* libiconv.tbd */; };
 		274772B124BC0DEB00181362 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 274772B024BC0DEB00181362 /* libsqlite3.tbd */; };
+		2748F8F124C05F4D003F8E11 /* ExamLibraryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2748F8F024C05F4C003F8E11 /* ExamLibraryController.m */; };
+		2748F8F524C138A0003F8E11 /* ExamLibraryListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2748F8F324C1389F003F8E11 /* ExamLibraryListCell.m */; };
+		2748F8F624C138A0003F8E11 /* ExamLibraryListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2748F8F424C1389F003F8E11 /* ExamLibraryListCell.xib */; };
 		27544CF824BC337D00EF58AF /* ExamTicketViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27544CF724BC337D00EF58AF /* ExamTicketViewController.m */; };
 		27544CFB24BC338900EF58AF /* UserCenterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27544CFA24BC338900EF58AF /* UserCenterViewController.m */; };
 		2794D1B024BC604800BAF6F3 /* VefiBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2794D1AF24BC604800BAF6F3 /* VefiBodyView.m */; };
@@ -860,6 +863,11 @@
 		274772AC24BC0DD000181362 /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
 		274772AE24BC0DDE00181362 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
 		274772B024BC0DEB00181362 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
+		2748F8EF24C05F4C003F8E11 /* ExamLibraryController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExamLibraryController.h; sourceTree = "<group>"; };
+		2748F8F024C05F4C003F8E11 /* ExamLibraryController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExamLibraryController.m; sourceTree = "<group>"; };
+		2748F8F224C1389F003F8E11 /* ExamLibraryListCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExamLibraryListCell.h; sourceTree = "<group>"; };
+		2748F8F324C1389F003F8E11 /* ExamLibraryListCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExamLibraryListCell.m; sourceTree = "<group>"; };
+		2748F8F424C1389F003F8E11 /* ExamLibraryListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ExamLibraryListCell.xib; sourceTree = "<group>"; };
 		27544CF624BC337D00EF58AF /* ExamTicketViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExamTicketViewController.h; sourceTree = "<group>"; };
 		27544CF724BC337D00EF58AF /* ExamTicketViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExamTicketViewController.m; sourceTree = "<group>"; };
 		27544CF924BC338900EF58AF /* UserCenterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserCenterViewController.h; sourceTree = "<group>"; };
@@ -1108,26 +1116,26 @@
 		27476F7B24BC0BFF00181362 /* ThirdPart */ = {
 			isa = PBXGroup;
 			children = (
-				27476F7C24BC0BFF00181362 /* JYEqualCellSpaceFlowLayout.m */,
+				27476FE124BC0BFF00181362 /* ALCalendarPicker */,
+				27476FD524BC0BFF00181362 /* DZNSegmentedControl.h */,
 				27476F7D24BC0BFF00181362 /* DZNSegmentedControl.m */,
-				27476F7E24BC0BFF00181362 /* NSObject+ReadDocument.h */,
-				27476F7F24BC0BFF00181362 /* WMPlayer */,
-				27476F8924BC0BFF00181362 /* UIView+ShowProgress.m */,
-				27476F8A24BC0BFF00181362 /* KSPickerView.h */,
-				27476F8B24BC0BFF00181362 /* TZImagePickerController */,
-				27476FAB24BC0BFF00181362 /* SCIndexView */,
-				27476FB224BC0BFF00181362 /* MSSBrowse */,
-				27476FCE24BC0BFF00181362 /* UIView+Animation.m */,
 				27476FCF24BC0BFF00181362 /* JYEqualCellSpaceFlowLayout.h */,
-				27476FD024BC0BFF00181362 /* ZKCycleScrollView */,
-				27476FD524BC0BFF00181362 /* DZNSegmentedControl.h */,
-				27476FD624BC0BFF00181362 /* TYCyclePagerView */,
-				27476FDD24BC0BFF00181362 /* QWNavigationBar */,
+				27476F7C24BC0BFF00181362 /* JYEqualCellSpaceFlowLayout.m */,
+				27476F8A24BC0BFF00181362 /* KSPickerView.h */,
 				27476FDE24BC0BFF00181362 /* KSPickerView.m */,
-				27476FDF24BC0BFF00181362 /* UIView+ShowProgress.h */,
+				27476FB224BC0BFF00181362 /* MSSBrowse */,
+				27476F7E24BC0BFF00181362 /* NSObject+ReadDocument.h */,
 				27476FE024BC0BFF00181362 /* NSObject+ReadDocument.m */,
-				27476FE124BC0BFF00181362 /* ALCalendarPicker */,
+				27476FDD24BC0BFF00181362 /* QWNavigationBar */,
+				27476FAB24BC0BFF00181362 /* SCIndexView */,
+				27476FD624BC0BFF00181362 /* TYCyclePagerView */,
+				27476F8B24BC0BFF00181362 /* TZImagePickerController */,
 				27476FF424BC0BFF00181362 /* UIView+Animation.h */,
+				27476FCE24BC0BFF00181362 /* UIView+Animation.m */,
+				27476FDF24BC0BFF00181362 /* UIView+ShowProgress.h */,
+				27476F8924BC0BFF00181362 /* UIView+ShowProgress.m */,
+				27476F7F24BC0BFF00181362 /* WMPlayer */,
+				27476FD024BC0BFF00181362 /* ZKCycleScrollView */,
 			);
 			path = ThirdPart;
 			sourceTree = "<group>";
@@ -1312,6 +1320,7 @@
 			isa = PBXGroup;
 			children = (
 				2747700424BC0C0100181362 /* Home */,
+				2748F8EB24C05F30003F8E11 /* ExamLibrary */,
 				2747705624BC0C0100181362 /* Exam */,
 				2747700A24BC0C0100181362 /* UserCenter */,
 				2747700E24BC0C0100181362 /* Classroom */,
@@ -1468,12 +1477,12 @@
 		2747701B24BC0C0100181362 /* Classroom */ = {
 			isa = PBXGroup;
 			children = (
-				2747701C24BC0C0100181362 /* Util */,
+				2747705024BC0C0100181362 /* ClassroomDefine.h */,
 				2747702D24BC0C0100181362 /* ClassroomService.h */,
+				2747705124BC0C0100181362 /* ClassroomService.m */,
 				2747702E24BC0C0100181362 /* Message */,
 				2747704924BC0C0100181362 /* Model */,
-				2747705024BC0C0100181362 /* ClassroomDefine.h */,
-				2747705124BC0C0100181362 /* ClassroomService.m */,
+				2747701C24BC0C0100181362 /* Util */,
 			);
 			path = Classroom;
 			sourceTree = "<group>";
@@ -1563,12 +1572,12 @@
 		2747704924BC0C0100181362 /* Model */ = {
 			isa = PBXGroup;
 			children = (
-				2747704A24BC0C0100181362 /* Whiteboard.m */,
-				2747704B24BC0C0100181362 /* RoomMember.m */,
-				2747704C24BC0C0100181362 /* Classroom.m */,
-				2747704D24BC0C0100181362 /* Whiteboard.h */,
 				2747704E24BC0C0100181362 /* Classroom.h */,
+				2747704C24BC0C0100181362 /* Classroom.m */,
 				2747704F24BC0C0100181362 /* RoomMember.h */,
+				2747704B24BC0C0100181362 /* RoomMember.m */,
+				2747704D24BC0C0100181362 /* Whiteboard.h */,
+				2747704A24BC0C0100181362 /* Whiteboard.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -2217,6 +2226,42 @@
 			path = IMKit;
 			sourceTree = "<group>";
 		};
+		2748F8EB24C05F30003F8E11 /* ExamLibrary */ = {
+			isa = PBXGroup;
+			children = (
+				2748F8EC24C05F30003F8E11 /* Controller */,
+				2748F8ED24C05F30003F8E11 /* Model */,
+				2748F8EE24C05F30003F8E11 /* View */,
+			);
+			path = ExamLibrary;
+			sourceTree = "<group>";
+		};
+		2748F8EC24C05F30003F8E11 /* Controller */ = {
+			isa = PBXGroup;
+			children = (
+				2748F8EF24C05F4C003F8E11 /* ExamLibraryController.h */,
+				2748F8F024C05F4C003F8E11 /* ExamLibraryController.m */,
+			);
+			path = Controller;
+			sourceTree = "<group>";
+		};
+		2748F8ED24C05F30003F8E11 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		2748F8EE24C05F30003F8E11 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				2748F8F224C1389F003F8E11 /* ExamLibraryListCell.h */,
+				2748F8F324C1389F003F8E11 /* ExamLibraryListCell.m */,
+				2748F8F424C1389F003F8E11 /* ExamLibraryListCell.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		27A0089924BD96C50002452B /* Networking */ = {
 			isa = PBXGroup;
 			children = (
@@ -2603,6 +2648,7 @@
 				27A008AE24BD96E50002452B /* DeviceCheckView.xib in Resources */,
 				2747728224BC0C7D00181362 /* Emoji.plist in Resources */,
 				2747728024BC0C7C00181362 /* RongCloudKit.strings in Resources */,
+				2748F8F624C138A0003F8E11 /* ExamLibraryListCell.xib in Resources */,
 				27476F5124BBFB5900181362 /* Main.storyboard in Resources */,
 				27EF3EF324BEE885002068A2 /* NotifyMessageCell.xib in Resources */,
 				27EF3F0024BF016B002068A2 /* WaitExamBodyView.xib in Resources */,
@@ -2765,6 +2811,7 @@
 				2747718E24BC0C0500181362 /* UIView+ShowProgress.m in Sources */,
 				2747718924BC0C0500181362 /* WMPlayerModel.m in Sources */,
 				27A008AF24BD96E50002452B /* DeviceCheckView.m in Sources */,
+				2748F8F524C138A0003F8E11 /* ExamLibraryListCell.m in Sources */,
 				274771E524BC0C0500181362 /* FirstSettingViewController.m in Sources */,
 				27A008DC24BDA6950002452B /* PhoneChangeBodyView.m in Sources */,
 				2747719024BC0C0500181362 /* TZAssetCell.m in Sources */,
@@ -2893,6 +2940,7 @@
 				274771BE24BC0C0500181362 /* ALCalendarPicker.m in Sources */,
 				274771D824BC0C0500181362 /* InviteUpgradeMessage.m in Sources */,
 				2747725324BC0C0500181362 /* JXCategoryBaseCellModel.m in Sources */,
+				2748F8F124C05F4D003F8E11 /* ExamLibraryController.m in Sources */,
 				2747722324BC0C0500181362 /* NSObject+AutoProperty.m in Sources */,
 				274771D524BC0C0500181362 /* WhiteboardMessage.m in Sources */,
 				2747725F24BC0C0500181362 /* StateView.m in Sources */,

+ 5 - 1
MusicGradeExam/MusicGradeExam/AppDelegate.m

@@ -81,7 +81,11 @@
     [Bugly startWithAppId:@"55e73c16f6"];
     
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
-    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    if (@available(iOS 13, *)) {
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
+    } else {
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    }
     [[UITabBar appearance] setTranslucent:NO];
     [[UINavigationBar appearance] setTranslucent:NO];
     

BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/Icon.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadApp_76pt.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadApp_76pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadNotifications_20pt.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadNotifications_20pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadProApp_83.5pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight5_29pt.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight5_29pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight7_40pt.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPadSpootlight7_40pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneApp_60pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneApp_60pt@3x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneNotification_20pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneNotification_20pt@3x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight5_29pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight5_29pt@3x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight7_40pt@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/AppIcon.appiconset/IconiPhoneSpootlight7_40pt@3x.png


+ 22 - 0
MusicGradeExam/MusicGradeExam/Assets.xcassets/Classroom/class_hangUp.imageset/Contents.json

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

BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Classroom/class_hangUp.imageset/class_hangUp@2x.png


BIN
MusicGradeExam/MusicGradeExam/Assets.xcassets/Classroom/class_hangUp.imageset/class_hangUp@3x.png


+ 4 - 0
MusicGradeExam/MusicGradeExam/Base/KSBaseWKWebViewController.m

@@ -54,6 +54,10 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    if(@available(iOS 13.0, *)){
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
+    }
     [self initWebView];
 }
 

+ 8 - 4
MusicGradeExam/MusicGradeExam/Define/PrefixHeader.pch

@@ -85,13 +85,17 @@
 
 //#ifdef DEBUG
 
-#define hostURL (@"http://kjtest.dayaedu.com")
-#define SEALCLASSHOST (@"http://kjtest.dayaedu.com/api-im")
+//#define hostURL (@"http://kjtest.dayaedu.com")
+//#define SEALCLASSHOST (@"http://kjtest.dayaedu.com/api-im")
+//#define WEBHOST (@"http://mstudev.dayaedu.com")
+//#define JSPUSH_ENVIRONMENT (NO)
+//#define RCIM_KEY (@"8luwapkv84g3l")
+
+#define hostURL (@"http://192.168.3.28:8000")
+#define SEALCLASSHOST (@"http://192.168.3.28:8000/api-im")
 #define WEBHOST (@"http://mstudev.dayaedu.com")
 #define JSPUSH_ENVIRONMENT (NO)
 #define RCIM_KEY (@"8luwapkv84g3l")
-
-
 //#else    // 线上
 
 //#define hostURL (@"https://online.dayaedu.com")

+ 2 - 0
MusicGradeExam/MusicGradeExam/Info.plist

@@ -2,6 +2,8 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+	<key>UIViewControllerBasedStatusBarAppearance</key>
+	<false/>
 	<key>CFBundleDevelopmentRegion</key>
 	<string>$(DEVELOPMENT_LANGUAGE)</string>
 	<key>CFBundleExecutable</key>

+ 1 - 1
MusicGradeExam/MusicGradeExam/Manager/OnlineRoomManager.m

@@ -79,7 +79,7 @@
 - (void)pushToClassroom {
     
     ClassroomViewController *vc = [[ClassroomViewController alloc] init];
-    vc.roomId = self.roomId;
+    vc.registrationId = self.roomId;
     vc.modalPresentationStyle = UIModalPresentationFullScreen;
     [self.baseCtrl presentViewController:vc animated:YES completion:nil];
 }

+ 1 - 1
MusicGradeExam/MusicGradeExam/UI/Classroom/Controller/ClassroomViewController.h

@@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface ClassroomViewController : UIViewController
 
-@property (nonatomic, strong) NSString *roomId;
+@property (nonatomic, strong) NSString *registrationId;
 
 @end
 

+ 7 - 107
MusicGradeExam/MusicGradeExam/UI/Classroom/Controller/ClassroomViewController.m

@@ -28,7 +28,7 @@
 
 #define TitleViewHeight  (64)
 
-@interface ClassroomViewController ()<ClassTitleViewDelegate, RongRTCRoomDelegate, ClassroomDelegate, ClassroomMainContainerDelegate, UIGestureRecognizerDelegate, RongRTCActivityMonitorDelegate, RTCServiceDelegate, ClassVideoListViewDelegate>
+@interface ClassroomViewController ()<ClassTitleViewDelegate, RongRTCRoomDelegate, ClassroomDelegate, UIGestureRecognizerDelegate, RongRTCActivityMonitorDelegate, RTCServiceDelegate, ClassVideoListViewDelegate>
 
 @property (nonatomic, strong) ClassTitleView *titleView;
 @property (nonatomic, strong) ClassroomMainContainer *containerView;
@@ -258,7 +258,6 @@
 
 #pragma mark ------ 退出RTC房间并重新加入
 - (void)restartRoom {
-    FwLogI(RC_Type_RTC, @"L-SwitchLine-S", @"UserId:%@", [ClassroomService sharedService].currentRoom.currentMemberId);
     self.isSwitchLine = YES;
     self.hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
     [[RoomLoginHelper sharedInstance] logout:^{
@@ -291,7 +290,6 @@
         [self publishStream];
         [self bindDelegates];
         [self.titleView refreshTitleView];
-        [self.containerView refreshToolView];
         [self.hud hideAnimated:YES];
         [RongRTCEngine sharedEngine].monitorDelegate = self;
         [[RTCService sharedInstance] useSpeaker:YES];
@@ -406,7 +404,6 @@
                     [self.tipsView showTipsMessage:hudMessage inView:self.view];
                 }
                 
-                [self.containerView refreshToolView];
                 [[RTCService sharedInstance] setCameraDisable:!enable];
             } else if (type == DeviceTypeMicrophone) { // 麦克风
                 // 非自己操作才需要做提示
@@ -415,38 +412,28 @@
                     [self.tipsView showTipsMessage:hudMessage inView:self.view];
                 }
                 
-                [self.containerView refreshToolView];
                 [[RTCService sharedInstance] setMicrophoneDisable:!enable];
                 
             }
             else if (type == DeviceTypeMusicMode) {
                 // 非自己操作才需要做提示
                 if(![curMember.userId isEqualToString:operatorId]) {
-//                    hudMessage = !enable ? NSLocalizedStringFromTable(@"老师关闭了你的音乐模式", @"SealClass", nil) : NSLocalizedStringFromTable(@"音乐模式已打开", @"SealClass", nil);
-//                    [self.tipsView showTipsMessage:hudMessage inView:self.view];
+
                 }
                 
-                [self.containerView refreshToolView];
                 [self changeModeAction:enable];
             }
             else if (type == DeviceTypeHandup) {
-//                if ([curMember.userId isEqualToString:operatorId]) {
-//                    if (enable) {
-//                        [self.tipsView showTipsMessage:@"您已举手" inView:self.view];
-//                    }
-//                }
             }
         }
     }
-    if ([ClassroomService sharedService].currentRoom.currentDisplayType != DisplayWhiteboard && type == DeviceTypeCamera) {
+    if (type == DeviceTypeCamera && [curMember.userId isEqualToString:member.userId]) {
         // 延迟调用,防止刷新出现灰屏
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
             [self renderMainContainerView];
         });
     }
     [self.titleView refreshTitleView];
-    [self.containerView refreshToolView];
-    
 }
 
 //助教请求用户打开设备,助教关闭用户设备没有回调。
@@ -505,14 +492,6 @@
 }
 
 
-- (CGRect)getWBoardFrame {
-    CGRect mainVideoFrame = self.containerView.currentVideoFrame;
-    mainVideoFrame.origin.x += iPhoneXSafeTopMargin;
-    mainVideoFrame.origin.y = 10;
-    return mainVideoFrame;
-}
-
-
 - (void)publishStream {
     if ([ClassroomService sharedService].currentRoom.currentMember.role != RoleAudience) {
         [[RTCService sharedInstance] publishLocalUserDefaultAVStream];
@@ -520,53 +499,10 @@
 }
 
 - (void)renderMainContainerView {
-    self.titleView.onShowLabel.hidden = YES;
-    RoomMember *teacher = [ClassroomService sharedService].currentRoom.teacher;
-    if ([ClassroomService sharedService].currentRoom.currentDisplayType == DisplayTypeStudent) {
-        // 将之前订阅的流切换成小流
-        [self changeLastDisplayToTinyStream];
-        // 有打开的屏幕
-        for (RoomMember *displayMember in [ClassroomService sharedService].currentRoom.memberList) {
-            if ([displayMember.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentDisplayURI]) {
-                if ([displayMember.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
-                    self.titleView.onShowLabel.hidden = NO;
-                }
-                [self.containerView containerViewRenderView:displayMember];
-                [self.videoListView showTeacherPrompt:NO];
-                break;
-            }
-        }
-        
-    }
-    else {
-        // 将之前订阅的流切换成小流
-        [self changeLastDisplayToTinyStream];
-        
-        if (([ClassroomService sharedService].currentRoom.currentDisplayType == DisplayTeacher && teacher.cameraEnable)) {
-            NSLog(@"%@",[ClassroomService sharedService].currentRoom.currentDisplayURI);
-            [self.containerView containerViewRenderView:[ClassroomService sharedService].currentRoom.teacher];
-            [self.videoListView showTeacherPrompt:YES];
-        } else if ([ClassroomService sharedService].currentRoom.currentDisplayType == DisplayWhiteboard) {
-            [self.containerView cancelRenderView];
-            [self.videoListView showTeacherPrompt:NO];
-        } else if (([ClassroomService sharedService].currentRoom.currentDisplayType == DisplaySharedScreen)) {
-            [[RTCService sharedInstance] renderUserSharedScreenOnView:self.containerView.videoView forUser:[ClassroomService sharedService].currentRoom.currentDisplayURI];
-            // 分享视频
-            [self.videoListView showTeacherPrompt:NO];
-        } else {
-            [self.containerView cancelRenderView];
-        }
-    }
+    // 主屏显示学生
+    [self.containerView containerViewRenderView:[ClassroomService sharedService].currentRoom.currentMember];
 }
 
-- (void)changeLastDisplayToTinyStream {
-    RoomMember *lastMember = self.containerView.member;
-    if (![NSString isEmptyString:lastMember.userId] && ![lastMember.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentDisplayURI] && ![lastMember.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
-        [[RTCService sharedInstance] exchangeRemoteUserAVStreamToTinySteam:lastMember.userId callback:^{
-            
-        }];
-    }
-}
 
 - (void)whiteboardDidDisplay:(NSString *)boardId {
     NSLog(@"whiteboardDidDisplay %@ ",boardId);
@@ -612,21 +548,11 @@
 #pragma mark --- RTCServiceDelegate  自己发布流成功回调
 - (void)successPublishLocalStream {
     
-//    [self checkNodePlay];
 }
 
 #pragma mark - RongRTCRoomDelegate
 - (void)didPublishStreams:(NSArray <RongRTCAVInputStream *>*)streams {
     
-    NSString *displayUserId;
-    if (([ClassroomService sharedService].currentRoom.currentDisplayType == DisplayAssistant)) {
-        displayUserId = [ClassroomService sharedService].currentRoom.assistant.userId;
-    } else if (([ClassroomService sharedService].currentRoom.currentDisplayType == DisplayTeacher)) {
-        displayUserId = [ClassroomService sharedService].currentRoom.teacher.userId;
-    }
-    else if ([ClassroomService sharedService].currentRoom.currentDisplayType == DisplayTypeStudent) {
-        displayUserId = [ClassroomService sharedService].currentRoom.currentDisplayURI;
-    }
     // 当用户非正常退出的时候,如果再次进入需要重新订阅流
     RongRTCAVInputStream *firstStream = [streams lastObject];
     if ([[KSRemoteUserManager shareInstance] isContentUser:firstStream.userId]) {
@@ -635,9 +561,6 @@
     
     for (RongRTCAVInputStream *stream in streams) {
         if (stream.streamType == RTCMediaTypeVideo) {
-            if ([stream.userId isEqualToString:displayUserId]) {
-                [self renderMainContainerView];
-            }
             [self.videoListView updateUserVideo:stream.userId];
         }
     }
@@ -651,37 +574,14 @@
 
 - (void)didReportFirstKeyframe:(RongRTCAVInputStream *)stream {
     if (stream.streamId && stream.streamId.length > 0) {
-        FwLogI(RC_Type_RTC, @"A-DYReportFirstKeyFrame-R", @"DYReportFirstKeyFrame:%@,userID:%@",stream.streamId,stream.userId);
+
     }
 }
 
 
 #pragma mark ----- ClassVideoListViewDelegate
 - (void)videoListView:(ClassVideoListView *)view didTap:(RoomMember *)member {
-    /*
-    // 将视频投到主屏幕上
-    NSString *currentDisplayUserId = member.userId;
-    NSString *lastDisplayUserId = [ClassroomService sharedService].currentRoom.currentDisplayURI;
     
-    if([currentDisplayUserId isEqualToString:lastDisplayUserId]) {
-        [self.videoListView updateUserVideo:lastDisplayUserId];
-        return;
-    }
-    DisplayType type = member.role == RoleTeacher ? DisplayTeacher : DisplayTypeStudent;
-    [ClassroomService sharedService].currentRoom.currentDisplayURI = currentDisplayUserId;
-    [ClassroomService sharedService].currentRoom.currentDisplayType = type;
-    // 如果之前有切换成大流的视频
-    if (![NSString isEmptyString:lastDisplayUserId] && ![lastDisplayUserId isEqualToString:[ClassroomService sharedService].currentRoom.currentMemberId]) {
-        [[RTCService sharedInstance] exchangeRemoteUserAVStreamToTinySteam:lastDisplayUserId];
-    }
-    
-    if(![[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
-        // 记录当前播放音频的学生
-        [ClassroomService sharedService].currentRoom.currentPlayUserId = currentDisplayUserId;
-        [[RTCService sharedInstance] exchangeRemoteUserAVStreamToNomalSteam:member.userId];
-    }
-    [self renderMainContainerView];
-     */
 }
 
 #pragma mark - Getters & setters
@@ -717,7 +617,6 @@
 - (ClassroomMainContainer *)containerView {
     if (!_containerView) {
         _containerView = [[ClassroomMainContainer alloc] initWithFrame:[self mainContainerViewFrame]];
-        _containerView.delegate = self;
     }
     return _containerView;
 }
@@ -818,3 +717,4 @@
 */
 
 @end
+    

+ 1 - 4
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/ClassroomService.m

@@ -113,7 +113,7 @@
     }
     [HTTPUtility setAuthHeader:[NSString stringWithFormat:@"%@ %@", UserDefault(Token_type), UserDefault(TokenKey)]];
     NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
-    [dic setObject:roomId forKey:@"roomId"];
+    [dic setObject:roomId forKey:@"registrationId"];
     [dic setObject:@(audience) forKey:@"audience"];
     [dic setObject:userName forKey:@"userName"];
     [HTTPUtility requestWithHTTPMethod:HTTPMethodPost
@@ -682,7 +682,6 @@
     
     dispatch_main_async_safe(^{
         if(msg.action == MemberChangeActionJoin) {
-            FwLogI(RC_Type_RTC, @"L-MemberJoinRoom-S", @"userId:%@",msg.userId);
             if([self.classroomDelegate respondsToSelector:@selector(memberDidJoin:)]) {
                 RoomMember *mem = [[RoomMember alloc] init];
                 mem.userId = msg.userId;
@@ -696,7 +695,6 @@
                 }
             }
         }else if(msg.action == MemberChangeActionLeave){
-            FwLogI(RC_Type_RTC, @"L-MemberLeaveRoom-S", @"userId:%@",msg.userId);
             if([self.classroomDelegate respondsToSelector:@selector(memberDidLeave:)]) {
                 RoomMember *mem = [[RoomMember alloc] init];
                 mem.userId = msg.userId;
@@ -708,7 +706,6 @@
                 }
             }
         }else if(msg.action == MemberChangeActionKick) {
-            FwLogI(RC_Type_RTC, @"L-MemberKick-S", @"userId:%@",msg.userId);
             if ([msg.userId isEqualToString:self.currentRoom.currentMember.userId]) {
                 if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
                     [self.classroomDelegate roomDidLeave];

+ 0 - 1
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/Model/Classroom.m

@@ -54,7 +54,6 @@
     int index = [self indexInDataSource:member];
     BOOL canRemove = index >= 0 ? YES:NO ;
     if(canRemove) {
-        FwLogI(RC_Type_RTC, @"L-removeMember-S", @"userId:%@",member.userId);
         NSMutableArray *tmp = [self.memberList mutableCopy];
         [tmp removeObjectAtIndex:index];
         self.memberList = [tmp copy];

+ 1 - 21
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/RTCService/RTCService.m

@@ -250,21 +250,10 @@
     
     // 没有订阅用户才去订阅
     if (![[KSRemoteUserManager shareInstance] isContentUser:remoteUser.userId]) {
-        
-        FwLogI(RC_Type_RTC, @"A-DYsubscribeRemoteUserAVStream-s", @"subscribeRemoteUserID:%@ count:%@",remoteUser.userId,@(remoteUser.remoteAVStreams.count));
-        
+                
         [self.rtcRoom subscribeAVStream:nil tinyStreams:remoteUser.remoteAVStreams completion:^(BOOL isSuccess, RongRTCCode desc) {
             if (isSuccess) {
                 [[KSRemoteUserManager shareInstance] addUser:remoteUser.userId];
-                // 在播放节拍器状态下 不播放进入房间学生的信息
-                if ([ClassroomService sharedService].currentRoom.isPlayBeat == YES && ![remoteUser.userId isEqualToString:[ClassroomService sharedService].currentRoom.teacher.userId]) {
-                    for (RongRTCAVInputStream *stream in remoteUser.remoteAVStreams) {
-                        if (stream.streamType == RTCMediaTypeAudio) {
-                            stream.disable = YES;
-                        }
-                    }
-                }
-                
             }
             NSLog(@"订阅流 %@ success:%@ code:%@",remoteUser.userId,@(isSuccess),@(desc));
         }];
@@ -397,14 +386,6 @@
                 [self.rtcRoom subscribeAVStream:nil tinyStreams:remoteUser.remoteAVStreams completion:^(BOOL isSuccess, RongRTCCode desc) {
                     if (isSuccess) {
                         [[KSRemoteUserManager shareInstance] addUser:remoteUser.userId];
-                        // 在播放节拍器状态下 不播放进入房间学生的信息
-                        if ([ClassroomService sharedService].currentRoom.isPlayBeat == YES && ![remoteUser.userId isEqualToString:[ClassroomService sharedService].currentRoom.teacher.userId]) {
-                            for (RongRTCAVInputStream *stream in remoteUser.remoteAVStreams) {
-                                if (stream.streamType == RTCMediaTypeAudio) {
-                                    stream.disable = YES;
-                                }
-                            }
-                        }
                         completeBlock();
                     }
                 }];
@@ -470,7 +451,6 @@
             stream.delegate = self;
             [view insertSubview:remoteView atIndex:0];
             [stream setVideoRender:remoteView];
-             FwLogI(RC_Type_RTC, @"A-DYRenderRemoteView-R", @"DYRenderRemoteView:%@,userID:%@",stream.streamId,stream.userId);
             return;
         }
     }

+ 0 - 11
MusicGradeExam/MusicGradeExam/UI/Classroom/View/MainContainer/ClassroomMainContainer.h

@@ -10,17 +10,9 @@
 #import "ClassroomService.h"
 #import "EmptyView.h"
 #import "RoomMember.h"
-#import "MainToolView.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class ClassroomMainContainer;
-
-@protocol ClassroomMainContainerDelegate <NSObject>
-
-- (void)mainContainerOpertionMember:(RoomMember *)member tapButton:(UIButton *)button;
-
-@end
 
 @interface ClassroomMainContainer : UIView
 
@@ -32,7 +24,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, strong) RoomMember *member;
 
-@property (nonatomic, weak) id<ClassroomMainContainerDelegate> delegate;
 
 @property (nonatomic, assign, readonly) BOOL isFullScreen;
 
@@ -44,8 +35,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)cancelRenderView;
 
-- (void)refreshToolView;
-
 @end
 
 NS_ASSUME_NONNULL_END

+ 1 - 38
MusicGradeExam/MusicGradeExam/UI/Classroom/View/MainContainer/ClassroomMainContainer.m

@@ -10,15 +10,13 @@
 #import "RTCService.h"
 #import "LocalRenderManager.h"
 
-@interface ClassroomMainContainer ()<MainToolViewDelegate>
+@interface ClassroomMainContainer ()
 
 @property (nonatomic, strong) UIView *tapGestureView;
 @property (nonatomic) CGRect currentVideoFrame;
 @property (nonatomic) CGRect originVideoFrame;
 @property (nonatomic, strong) UILabel *nameLabel;
 
-@property (nonatomic, strong) MainToolView *toolView;
-
 @end
 
 @implementation ClassroomMainContainer
@@ -32,23 +30,11 @@
         [self.videoBackView addSubview:self.videoView];
         self.originVideoFrame = self.videoBackView.frame;
         self.currentVideoFrame = self.originVideoFrame;
-        [self.videoView addSubview:self.toolView];
         [self.videoView addSubview:self.nameLabel];
-
     }
     return self;
 }
 
-- (void)refreshToolView {
-    RoomMember *curMember = [ClassroomService sharedService].currentRoom.currentMember;
-    if ([self.member.userId isEqualToString:curMember.userId]) {
-        self.toolView.hidden = YES;
-    }
-    else {
-        self.toolView.hidden = NO;
-        self.toolView.shareButton.selected = curMember.handUpOn;
-    }
-}
 
 - (void)didChangeRole:(Role)role {
     [self.emptyView changeRole:role];
@@ -74,15 +60,6 @@
     else {
         self.nameLabel.text = [NSString returnNoNullStringWithString:member.name];
     }
-    
-    // 判断显示是否是老师
-    if (member.role == RoleTeacher) {
-        self.toolView.status = MainToolStatusTeacher;
-    }
-    else {
-        self.toolView.status = MainToolStatusStudent;
-    }
-    [self refreshToolView];
 }
 
 - (void)cancelRenderView {
@@ -92,12 +69,6 @@
     self.videoBackView.hidden = YES;
 }
 
-#pragma mark ---- tool view delegate
-- (void)mainToolViewDidTap:(UIButton *)button {
-    if (self.delegate && [self.delegate respondsToSelector:@selector(mainContainerOpertionMember:tapButton:)]) {
-        [self.delegate mainContainerOpertionMember:[ClassroomService sharedService].currentRoom.currentMember tapButton:button];
-    }
-}
 
 #pragma mark - private method
 
@@ -173,14 +144,6 @@
     return _emptyView;
 }
 
-- (MainToolView *)toolView {
-    if (!_toolView) {
-        _toolView = [[MainToolView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.videoView.frame) - 50, CGRectGetWidth(self.videoView.frame), 50)];
-        _toolView.delegate = self;
-    }
-    return _toolView;
-}
-
 - (UILabel *)nameLabel {
     if (!_nameLabel) {
         _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 100, 20)];

+ 0 - 2
MusicGradeExam/MusicGradeExam/UI/Classroom/View/TitleView/ClassTitleView.h

@@ -49,8 +49,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, strong) UIButton *switchLineBtn;
 
-@property (nonatomic, strong) UIButton *chatBtn;
-
 @property (nonatomic, strong) UIButton *hangupBtn;
 
 @property (nonatomic, assign) BOOL isDisplay;

+ 3 - 47
MusicGradeExam/MusicGradeExam/UI/Classroom/View/TitleView/ClassTitleView.m

@@ -46,42 +46,16 @@
     if (self) {
         
         self.backgroundColor = [HexRGB(0x141414) colorWithAlphaComponent:0.74];
-        [self.buttonArray addObjectsFromArray:@[self.switchLineBtn,self.switchCameraBtn,self.microphoneBtn,self.cameraBtn,self.chatBtn,self.hangupBtn]];
+        [self.buttonArray addObjectsFromArray:@[self.switchLineBtn,self.switchCameraBtn,self.microphoneBtn,self.cameraBtn,self.hangupBtn]];
         [self addSubviews];
         self.isCountDown = NO;
         self.duration = [ClassroomService sharedService].currentRoom.surplusTime;
         [self refreshTitleView];
         [self.timeTimer setFireDate:[NSDate distantPast]];
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onReceiveMessageNotification:) name:OnReceiveMessageNotification object:nil];
     }
     return self;
 }
 
-
-- (void)onReceiveMessageNotification:(NSNotification *)notification{
-    NSDictionary *dic = notification.object;
-    RCMessage *message = dic[@"message"];
-    Classroom *currentRoom = [ClassroomService sharedService].currentRoom;
-    if ([message.targetId isEqualToString:currentRoom.roomId]) {
-        dispatch_main_async_safe(^{
-            [self updateClassNewsButton];
-        });
-    }
-}
-
-- (void)updateClassNewsButton{
-    Classroom *currentRoom = [ClassroomService sharedService].currentRoom;
-    int unreadCount = [[RCIMClient sharedRCIMClient] getUnreadCount:ConversationType_GROUP targetId:currentRoom.roomId];
-    UIButton *button = (UIButton *)[self viewWithTag:ClassTitleViewActionTagChat];
-    if (unreadCount > 0 && !button.selected) {
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews_unreadStatus"] forState:UIControlStateNormal];
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews_unreadStatus"] forState:UIControlStateHighlighted];
-    }else{
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews_nomal"] forState:UIControlStateNormal];
-        [button setBackgroundImage:[UIImage imageNamed:@"classnews_nomal"] forState:UIControlStateHighlighted];
-    }
-}
-
 - (void)addSubviews {
     [self addSubview:self.signalImageView];
     [self addSubview:self.timeLable];
@@ -91,7 +65,6 @@
     [self addSubview:self.cameraBtn];
     [self addSubview:self.onShowLabel];
     
-    [self addSubview:self.chatBtn];
     [self addSubview:self.hangupBtn];
     CGFloat topOffset = (self.bounds.size.height - TButtonWidth) / 2.0;
     
@@ -146,7 +119,6 @@
         make.top.mas_equalTo(self.mas_top).offset(topOffset);
     }];
     
-    
     // 退出
     [self.hangupBtn mas_makeConstraints:^(MASConstraintMaker *make) {
         make.right.mas_equalTo(self.mas_right).offset(-TButtonSpace);
@@ -155,13 +127,6 @@
         make.top.mas_equalTo(self.mas_top).offset(topOffset);
     }];
     
-    // 聊天
-    [self.chatBtn mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.right.mas_equalTo(self.hangupBtn.mas_left).offset(-TButtonSpace);
-        make.width.mas_equalTo(TButtonWidth);
-        make.height.mas_equalTo(TButtonWidth);
-        make.top.mas_equalTo(self.mas_top).offset(topOffset);
-    }];
     self.isDisplay = YES;
 }
 
@@ -278,8 +243,8 @@
 }
 
 - (void)setDefaultButtons {
-    self.buttonImageArray = @[@"line_switch",@"camera_switch", @"userMic_on", @"userCamera_on", @"classnews_nomal", @"class_hangUp"];
-    self.buttonCloseImageArray = @[@"line_switch",@"camera_switch", @"userMic_off", @"userCamera_off", @"classnews_nomal", @"class_hangUp"];
+    self.buttonImageArray = @[@"line_switch",@"camera_switch", @"userMic_on", @"userCamera_on",@"class_hangUp"];
+    self.buttonCloseImageArray = @[@"line_switch",@"camera_switch", @"userMic_off", @"userCamera_off", @"class_hangUp"];
 
     for(int i = 0; i < self.buttonArray.count; i++) {
         UIButton *button = [self.buttonArray objectAtIndex:i];
@@ -375,15 +340,6 @@
     return _onShowLabel;
 }
 
-- (UIButton *)chatBtn {
-    if (!_chatBtn) {
-        _chatBtn = [[UIButton alloc] init];
-        _chatBtn.enabled = YES;
-        _chatBtn.tag =  ClassTitleViewActionTagChat;
-        [_chatBtn addTarget:self action:@selector(tapEvent:) forControlEvents:UIControlEventTouchUpInside];
-    }
-    return _chatBtn;
-}
 
 - (UIButton *)hangupBtn {
     if(!_hangupBtn) {

+ 4 - 14
MusicGradeExam/MusicGradeExam/UI/Classroom/View/VideoList/ClassVideoListCell.m

@@ -107,8 +107,7 @@
         }
         else {
             [self remakeNameLable:member];
-            
-            if ([member.userId isEqualToString:[ClassroomService sharedService].currentRoom.teacher.userId]) {
+            if (![member.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
                 if (teacherPrompt) {
                     self.promptLable.hidden = NO;
                 }
@@ -118,12 +117,6 @@
                 self.roleLable.hidden = YES;
             }
         }
-        if ([[ClassroomService sharedService].currentRoom.currentDisplayURI isEqualToString:member.userId]) {
-            self.videoView.hidden = YES;
-        }
-        else {
-            self.videoView.hidden = NO;
-        }
         [self renderVideo:member];
     }
 }
@@ -166,11 +159,8 @@
 #pragma mark - private method
 //当前的 cell 是否可以渲染视频
 - (BOOL)canRenderVideo:(RoomMember *)member {
-    //主视频区渲染了该用户的视频,则 视频列表 cell 不显示视频
     //旁观者不显示视频
-    //主视频区蒙版渲染了该用户的视频,则 视频列表 cell 不显示视频
-    Classroom *room = [ClassroomService sharedService].currentRoom;
-    if([room.currentDisplayURI isEqualToString:member.userId] || member.role == RoleAudience || [room.currentMaskUserId isEqualToString:member.userId]) {
+    if(member.role == RoleAudience) {
         return NO;
     }
     return YES;
@@ -200,7 +190,7 @@
         _roleLable.textAlignment = NSTextAlignmentCenter;
         _roleLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
         _roleLable.backgroundColor = HexRGB(0xFF5500);
-        _roleLable.text = @"师";
+        _roleLable.text = @"师";
         _roleLable.layer.cornerRadius = 4;
         _roleLable.layer.masksToBounds = YES;
     }
@@ -226,7 +216,7 @@
         _WaitLable.textAlignment = NSTextAlignmentCenter;
         _WaitLable.backgroundColor = [UIColor clearColor];
         _WaitLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
-        _WaitLable.text =  @"师正在赶来的路上\n请耐心等待";
+        _WaitLable.text =  @"师正在赶来的路上\n请耐心等待";
         _WaitLable.hidden = YES;
     }
     return _WaitLable;

+ 8 - 45
MusicGradeExam/MusicGradeExam/UI/Classroom/View/VideoList/ClassVideoListView.m

@@ -43,60 +43,24 @@
         }
         NSSortDescriptor * des = [[NSSortDescriptor alloc] initWithKey:@"joinTime" ascending:YES];
         NSMutableArray *sortArray = [[tempArray sortedArrayUsingDescriptors:@[des]] mutableCopy];
-        RoomMember *currentMember = [ClassroomService sharedService].currentRoom.currentMember;
-        RoomMember *teacher = [ClassroomService sharedService].currentRoom.teacher;
-        __block NSInteger teacherIdx = -1;
-        __block  NSInteger meIdx = -1;
-        NSMutableIndexSet *set = [[NSMutableIndexSet alloc]init];
+        NSMutableArray *lastArray = [sortArray mutableCopy];
         
-        for (int i = 0; i < [sortArray count]; i++ ) {
+        NSMutableArray *removeArray = [NSMutableArray array];
+        for (int i = 0; i < [lastArray count]; i++) {
             RoomMember *member = (RoomMember *)[sortArray objectAtIndex:i];
-            if ([member.userId isEqualToString:currentMember.userId]) {
-                meIdx = i;
-            }else {
-                if (member.role == RoleTeacher) {
-                    teacherIdx = i;
-                }
-                if (member.role == RoleAudience) {
-                    [set addIndex:i];//旁观者不能被任何他人看见,如果自己是旁观者自己可以看见自己
-                }
+            if (member.role == RoleStudent) {
+                [removeArray addObject:member];
             }
         }
-        
-        NSMutableArray *lastArray = [[NSMutableArray alloc] init];
-        if (teacherIdx >= 0) {
-            [lastArray addObject:teacher];
-            [set addIndex:teacherIdx];
-        }
-        if (meIdx >= 0) {
-            [lastArray addObject:currentMember];
-            [set addIndex:meIdx];
-        }
-        if (set.count >0) {
-            [sortArray removeObjectsAtIndexes:set];
-        }
-        
-        [lastArray addObjectsFromArray:sortArray];
-        /*
-        // 移除掉主屏显示成员
-        NSString *display = [ClassroomService sharedService].currentRoom.currentDisplayURI;
-        for (RoomMember *member in lastArray) {
-            if ([member.userId isEqualToString:display] && [ClassroomService sharedService].currentRoom.currentDisplayType != DisplayWhiteboard) {
-                [lastArray removeObject:member];
-                break;
-            }
-        }
-        */
-        if (teacher == nil) {
-            RoomMember *member = [[RoomMember alloc] init];
-            [lastArray insertObject:member atIndex:0];
+        // 移除列表上的学生
+        if (removeArray.count) {
+            [lastArray removeObjectsInArray:removeArray];
         }
         dispatch_async(dispatch_get_main_queue(), ^{
             self.videoDataSource = [lastArray mutableCopy];
             [self.videoListTableView reloadData];
         });
     });
-
 }
 
 - (void)updateUserVideo:(NSString *)userId {
@@ -134,7 +98,6 @@
         cell = [[ClassVideoListCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName];
     }
     cell.cellSize = CGSizeMake(CGRectGetWidth(self.frame), (CGRectGetWidth(self.frame) - 20) / 4.0 * 3);
-//    cell.contentView.transform = CGAffineTransformMakeScale (1,-1);
     if (self.videoDataSource.count > 0) {
         [cell setModel:[self.videoDataSource objectAtIndex:indexPath.row] showTeacherPrompt:self.showTeacherPrompt];
     }

+ 1 - 0
MusicGradeExam/MusicGradeExam/UI/Exam/Controller/ExamTicketViewController.m

@@ -31,6 +31,7 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
     [self requestData];
 }
 

+ 5 - 1
MusicGradeExam/MusicGradeExam/UI/Exam/Controller/WaitExamViewController.m

@@ -33,6 +33,10 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    if(@available(iOS 13.0, *)){
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
+    }
     [self requestData];
 }
 
@@ -82,7 +86,7 @@
             break;
         case JOINROOMACTION_JOIN:  // 加入房间
         {
-            NSString *roomId = [NSString stringWithFormat:@"%.0f", source.examRoomId];
+            NSString *roomId = [NSString stringWithFormat:@"%.0f", source.examRegistrationId];
             [self joinRoomAction:roomId];
         }
             break;

+ 17 - 0
MusicGradeExam/MusicGradeExam/UI/ExamLibrary/Controller/ExamLibraryController.h

@@ -0,0 +1,17 @@
+//
+//  ExamLibraryController.h
+//  MusicGradeExam
+//
+//  Created by Kyle on 2020/7/16.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ExamLibraryController : KSBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 120 - 0
MusicGradeExam/MusicGradeExam/UI/ExamLibrary/Controller/ExamLibraryController.m

@@ -0,0 +1,120 @@
+//
+//  ExamLibraryController.m
+//  MusicGradeExam
+//
+//  Created by Kyle on 2020/7/16.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import "ExamLibraryController.h"
+#import <HMSegmentedControl.h>
+#import "ExamLibraryListCell.h"
+
+@interface ExamLibraryController ()<UITableViewDelegate, UITableViewDataSource>
+
+@property (nonatomic, strong) HMSegmentedControl *topSegment;
+
+@property (nonatomic, strong) HMSegmentedControl *secondSegment;
+
+@property (nonatomic, strong) UITableView *tableView;
+
+
+@end
+
+@implementation ExamLibraryController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"考级曲库"];
+    [self configUI];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    if(@available(iOS 13.0, *)){
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
+    }
+}
+- (void)requestData {
+    [self.tableView reloadData];
+}
+
+- (void)configUI {
+    self.view.backgroundColor = HexRGB(0xf3f4f8);
+    [self.scrollView removeFromSuperview];
+    _topSegment = [[HMSegmentedControl alloc] initWithSectionTitles:@[@"钢琴",@"长笛",@"萨克斯",@"单簧管"]];
+    _topSegment.titleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:17.0f], NSForegroundColorAttributeName:HexRGB(0x333333)};
+    _topSegment.selectedTitleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:17.0f weight:UIFontWeightMedium], NSForegroundColorAttributeName:THEMECOLOR};
+    _topSegment.selectionIndicatorColor = THEMECOLOR;
+    _topSegment.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationBottom;
+    _topSegment.frame = CGRectMake(0, 1, kScreenWidth, 50.0f);
+    _topSegment.segmentEdgeInset = UIEdgeInsetsMake(0, 5, 0, 50);
+    [_topSegment addTarget:self action:@selector(selectedSegment:) forControlEvents:UIControlEventValueChanged];
+    [self.view addSubview:_topSegment];
+    
+    _secondSegment = [[HMSegmentedControl alloc] initWithSectionTitles:@[@"一级",@"二级",@"三级",@"四级",@"五级",@"六级",@"七级",@"八级",@"九级",@"十级"]];
+    _secondSegment.titleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:15.0f], NSForegroundColorAttributeName:HexRGB(0x999999)};
+    _secondSegment.selectedTitleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:15.0f weight:UIFontWeightMedium], NSForegroundColorAttributeName:HexRGB(0x333333)};
+    _secondSegment.selectionIndicatorColor = [UIColor whiteColor];
+    _secondSegment.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationBottom;
+    _secondSegment.frame = CGRectMake(0, CGRectGetMaxY(_topSegment.frame) + 1, kScreenWidth, 50.0f);
+    _secondSegment.segmentEdgeInset = UIEdgeInsetsMake(0, 25, 0, 25);
+    _secondSegment.selectionIndicatorHeight = CGFLOAT_MIN;
+    [_secondSegment addTarget:self action:@selector(levelSegmentAction:) forControlEvents:UIControlEventValueChanged];
+    [self.view addSubview:_secondSegment];
+    
+    [self.view addSubview:self.tableView];
+}
+
+- (void)selectedSegment:(HMSegmentedControl *)segmentCtrl {
+    
+}
+
+- (void)levelSegmentAction:(HMSegmentedControl *)segmentCtrl {
+    [self requestData];
+}
+
+#pragma mark ------ table data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 10;
+//    return self.dataArray.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    ExamLibraryListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ExamLibraryListCell"];
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+- (UITableView *)tableView {
+    if (!_tableView) {
+        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 124, kScreenWidth, kScreenHeight) style:UITableViewStylePlain];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.rowHeight = 53;
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        _tableView.backgroundColor = HexRGB(0xf3f4f8);
+        _tableView.showsVerticalScrollIndicator = NO;
+        [_tableView registerNib:[UINib nibWithNibName:@"ExamLibraryListCell" bundle:nil] forCellReuseIdentifier:@"ExamLibraryListCell"];
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        bottomView.backgroundColor = HexRGB(0xf3f4f8);
+        _tableView.tableFooterView = bottomView;
+    }
+    return _tableView;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 17 - 0
MusicGradeExam/MusicGradeExam/UI/ExamLibrary/View/ExamLibraryListCell.h

@@ -0,0 +1,17 @@
+//
+//  ExamLibraryListCell.h
+//  MusicGradeExam
+//
+//  Created by Kyle on 2020/7/17.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ExamLibraryListCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
MusicGradeExam/MusicGradeExam/UI/ExamLibrary/View/ExamLibraryListCell.m

@@ -0,0 +1,25 @@
+//
+//  ExamLibraryListCell.m
+//  MusicGradeExam
+//
+//  Created by Kyle on 2020/7/17.
+//  Copyright © 2020 DayaMusic. All rights reserved.
+//
+
+#import "ExamLibraryListCell.h"
+
+@implementation ExamLibraryListCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 59 - 0
MusicGradeExam/MusicGradeExam/UI/ExamLibrary/View/ExamLibraryListCell.xib

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097" 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="16087"/>
+        <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"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="KGk-i7-Jjw" customClass="ExamLibraryListCell">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="53"/>
+            <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="375" height="53"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next" translatesAutoresizingMaskIntoConstraints="NO" id="RjB-kz-sbV">
+                        <rect key="frame" x="337" y="15.5" width="22" height="22"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="22" id="R1B-qr-uxS"/>
+                            <constraint firstAttribute="width" constant="22" id="XEv-DY-iwp"/>
+                        </constraints>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="G大调奏鸣曲 Hob.XVI 第二乐章(海顿)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2GP-2c-FS4">
+                        <rect key="frame" x="16" y="16" width="311" height="21"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ON1-5L-mom">
+                        <rect key="frame" x="0.0" y="52" width="375" height="1"/>
+                        <color key="backgroundColor" red="0.93333333333333335" green="0.93333333333333335" blue="0.93333333333333335" alpha="1" colorSpace="calibratedRGB"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="1" id="whL-Cn-6rQ"/>
+                        </constraints>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="RjB-kz-sbV" secondAttribute="trailing" constant="16" id="1hd-d5-WGw"/>
+                    <constraint firstAttribute="bottom" secondItem="ON1-5L-mom" secondAttribute="bottom" id="45h-QU-hEl"/>
+                    <constraint firstAttribute="trailing" secondItem="ON1-5L-mom" secondAttribute="trailing" id="CPf-kp-PSo"/>
+                    <constraint firstItem="RjB-kz-sbV" firstAttribute="leading" secondItem="2GP-2c-FS4" secondAttribute="trailing" constant="10" id="DzN-4i-5ll"/>
+                    <constraint firstItem="2GP-2c-FS4" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="g93-tQ-DzF"/>
+                    <constraint firstItem="RjB-kz-sbV" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="jKK-z2-W0g"/>
+                    <constraint firstItem="2GP-2c-FS4" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="v1d-iP-9bw"/>
+                    <constraint firstItem="ON1-5L-mom" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="xCV-p0-eCy"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <point key="canvasLocation" x="131.15942028985509" y="105.46875"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="mine_next" width="22" height="22"/>
+    </resources>
+</document>

+ 4 - 1
MusicGradeExam/MusicGradeExam/UI/Home/Controller/HomeViewController.m

@@ -15,6 +15,7 @@
 #import "TYPageControl.h"
 #import "HomeExamTicketCell.h"
 #import "WaitExamViewController.h"
+#import "ExamLibraryController.h"
 
 @interface HomeViewController ()<TYCyclePagerViewDataSource,TYCyclePagerViewDelegate>
 
@@ -37,6 +38,7 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
     [self requestMessage];
 }
 
@@ -164,7 +166,8 @@
             break;
         case HOMETYPE_MUSICLIBRARY: // 考级曲库
         {
-            
+            ExamLibraryController *libraryVC = [[ExamLibraryController alloc] init];
+            [self.navigationController pushViewController:libraryVC animated:YES];
         }
             break;
         default:

+ 8 - 0
MusicGradeExam/MusicGradeExam/UI/Login/Controller/ModifyViewController.m

@@ -33,6 +33,14 @@
     [self configUI];
 }
 
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    if(@available(iOS 13.0, *)){
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
+    }
+}
+
 - (void)configUI {
     _bodyView = [ModifyBodyView shareInstance];
     _bodyView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight - kNaviBarHeight - iPhoneXSafeBottomMargin);

+ 4 - 0
MusicGradeExam/MusicGradeExam/UI/NotiferMessage/Controller/NotifyMessageViewController.m

@@ -27,6 +27,10 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    if(@available(iOS 13.0, *)){
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
+    }
     [self resetParamenter];
     [self requestData];
 }

+ 4 - 0
MusicGradeExam/MusicGradeExam/UI/UserCenter/Controller/UserCenterViewController.m

@@ -33,6 +33,10 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    if(@available(iOS 13.0, *)){
+        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
+    }
     [self requestUserMessage];
 }
 

+ 1 - 0
MusicGradeExam/Podfile

@@ -17,6 +17,7 @@ target 'MusicGradeExam' do
   pod 'Reachability', '~> 3.2'
   pod 'JPush', '3.2.2-noidfa'
   pod 'Bugly'
+  pod 'HMSegmentedControl'
 #  pod 'UMCCommon'
 
 

+ 5 - 1
MusicGradeExam/Podfile.lock

@@ -15,6 +15,7 @@ PODS:
   - AFNetworking/UIKit (4.0.1):
     - AFNetworking/NSURLSession
   - Bugly (2.5.5)
+  - HMSegmentedControl (1.5.6)
   - IQKeyboardManager (6.0.6)
   - JCore (2.3.0)
   - JPush (3.2.2-noidfa):
@@ -34,6 +35,7 @@ PODS:
 DEPENDENCIES:
   - AFNetworking (~> 4.0)
   - Bugly
+  - HMSegmentedControl
   - IQKeyboardManager (~> 6.0.6)
   - JPush (= 3.2.2-noidfa)
   - Masonry (~> 1.0.2)
@@ -48,6 +50,7 @@ SPEC REPOS:
   trunk:
     - AFNetworking
     - Bugly
+    - HMSegmentedControl
     - IQKeyboardManager
     - JCore
     - JPush
@@ -62,6 +65,7 @@ SPEC REPOS:
 SPEC CHECKSUMS:
   AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
   Bugly: eded937bbb1f731cacf689c2d934ddbd9ab34f83
+  HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352
   IQKeyboardManager: 6b4ecd3e59cf55a26133d802d4678721d7f88499
   JCore: 7fb83e1e75e00df37e9e1e33f3adae79182ad57c
   JPush: d7e9b68edde1e4061e8a61605049b1673cd89df2
@@ -73,6 +77,6 @@ SPEC CHECKSUMS:
   SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c
   YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7
 
-PODFILE CHECKSUM: 62778da6f78fb080d61045800647ae5872c175b2
+PODFILE CHECKSUM: 29b5d93f590edf5dc7a0d07e100b1043ae7ba35a
 
 COCOAPODS: 1.9.1

+ 268 - 0
MusicGradeExam/Pods/HMSegmentedControl/HMSegmentedControl/HMSegmentedControl.h

@@ -0,0 +1,268 @@
+//
+//  HMSegmentedControl.h
+//  HMSegmentedControl
+//
+//  Created by Hesham Abd-Elmegid on 23/12/12.
+//  Copyright (c) 2012-2015 Hesham Abd-Elmegid. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class HMSegmentedControl;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void (^IndexChangeBlock)(NSUInteger index);
+typedef NSAttributedString *_Nonnull(^HMTitleFormatterBlock)(HMSegmentedControl *segmentedControl, NSString *title, NSUInteger index, BOOL selected);
+
+typedef NS_ENUM(NSInteger, HMSegmentedControlSelectionStyle) {
+    HMSegmentedControlSelectionStyleTextWidthStripe, // Indicator width will only be as big as the text width
+    HMSegmentedControlSelectionStyleFullWidthStripe, // Indicator width will fill the whole segment
+    HMSegmentedControlSelectionStyleBox, // A rectangle that covers the whole segment
+    HMSegmentedControlSelectionStyleArrow // An arrow in the middle of the segment pointing up or down depending on `HMSegmentedControlSelectionIndicatorLocation`
+};
+
+typedef NS_ENUM(NSInteger, HMSegmentedControlSelectionIndicatorLocation) {
+    HMSegmentedControlSelectionIndicatorLocationTop,
+    HMSegmentedControlSelectionIndicatorLocationBottom,
+    HMSegmentedControlSelectionIndicatorLocationUp __deprecated_enum_msg("Use HMSegmentedControlSelectionIndicatorLocationTop.") = HMSegmentedControlSelectionIndicatorLocationTop,
+    HMSegmentedControlSelectionIndicatorLocationDown __deprecated_enum_msg("Use HMSegmentedControlSelectionIndicatorLocationBottom.") = HMSegmentedControlSelectionIndicatorLocationBottom,
+	HMSegmentedControlSelectionIndicatorLocationNone // No selection indicator
+};
+
+typedef NS_ENUM(NSInteger, HMSegmentedControlSegmentWidthStyle) {
+    HMSegmentedControlSegmentWidthStyleFixed, // Segment width is fixed
+    HMSegmentedControlSegmentWidthStyleDynamic, // Segment width will only be as big as the text width (including inset)
+};
+
+typedef NS_OPTIONS(NSInteger, HMSegmentedControlBorderType) {
+    HMSegmentedControlBorderTypeNone = 0,
+    HMSegmentedControlBorderTypeTop = (1 << 0),
+    HMSegmentedControlBorderTypeLeft = (1 << 1),
+    HMSegmentedControlBorderTypeBottom = (1 << 2),
+    HMSegmentedControlBorderTypeRight = (1 << 3)
+};
+
+/// Segment index for no selected segment
+FOUNDATION_EXPORT NSUInteger HMSegmentedControlNoSegment;
+
+typedef NS_ENUM(NSInteger, HMSegmentedControlType) {
+    HMSegmentedControlTypeText,
+    HMSegmentedControlTypeImages,
+	HMSegmentedControlTypeTextImages
+};
+
+typedef NS_ENUM(NSInteger, HMSegmentedControlImagePosition) {
+    HMSegmentedControlImagePositionBehindText,
+    HMSegmentedControlImagePositionLeftOfText,
+    HMSegmentedControlImagePositionRightOfText,
+    HMSegmentedControlImagePositionAboveText,
+    HMSegmentedControlImagePositionBelowText
+};
+
+@interface HMSegmentedControl : UIControl
+
+@property (nonatomic, strong, nullable) NSArray<NSString *> *sectionTitles;
+@property (nonatomic, strong, nullable) NSArray<UIImage *> *sectionImages;
+@property (nonatomic, strong, nullable) NSArray<UIImage *> *sectionSelectedImages;
+
+/**
+ Provide a block to be executed when selected index is changed.
+ 
+ Alternativly, you could use `addTarget:action:forControlEvents:`
+ */
+@property (nonatomic, copy, nullable) IndexChangeBlock indexChangeBlock;
+
+/**
+ Used to apply custom text styling to titles when set.
+ 
+ When this block is set, no additional styling is applied to the `NSAttributedString` object returned from this block.
+ */
+@property (nonatomic, copy, nullable) HMTitleFormatterBlock titleFormatter;
+
+/**
+ Text attributes to apply to item title text.
+ */
+@property (nonatomic, strong) NSDictionary *titleTextAttributes UI_APPEARANCE_SELECTOR;
+
+/*
+ Text attributes to apply to selected item title text.
+ 
+ Attributes not set in this dictionary are inherited from `titleTextAttributes`.
+ */
+@property (nonatomic, strong) NSDictionary *selectedTitleTextAttributes UI_APPEARANCE_SELECTOR;
+
+/**
+ Segmented control background color.
+ 
+ Default is `[UIColor whiteColor]`
+ */
+@property (nonatomic, strong) UIColor *backgroundColor UI_APPEARANCE_SELECTOR;
+
+/**
+ Color for the selection indicator stripe
+ 
+ Default is `R:52, G:181, B:229`
+ */
+@property (nonatomic, strong) UIColor *selectionIndicatorColor UI_APPEARANCE_SELECTOR;
+
+/**
+ Color for the selection indicator box
+ 
+ Default is selectionIndicatorColor
+ */
+@property (nonatomic, strong) UIColor *selectionIndicatorBoxColor UI_APPEARANCE_SELECTOR;
+
+/**
+ Color for the vertical divider between segments.
+ 
+ Default is `[UIColor blackColor]`
+ */
+@property (nonatomic, strong) UIColor *verticalDividerColor UI_APPEARANCE_SELECTOR;
+
+/**
+ Opacity for the seletion indicator box.
+ 
+ Default is `0.2f`
+ */
+@property (nonatomic) CGFloat selectionIndicatorBoxOpacity;
+
+/**
+ Width the vertical divider between segments that is added when `verticalDividerEnabled` is set to YES.
+ 
+ Default is `1.0f`
+ */
+@property (nonatomic, assign) CGFloat verticalDividerWidth;
+
+/**
+ Specifies the style of the control
+ 
+ Default is `HMSegmentedControlTypeText`
+ */
+@property (nonatomic, assign) HMSegmentedControlType type;
+
+/**
+ Specifies the style of the selection indicator.
+ 
+ Default is `HMSegmentedControlSelectionStyleTextWidthStripe`
+ */
+@property (nonatomic, assign) HMSegmentedControlSelectionStyle selectionStyle;
+
+/**
+ Specifies the style of the segment's width.
+ 
+ Default is `HMSegmentedControlSegmentWidthStyleFixed`
+ */
+@property (nonatomic, assign) HMSegmentedControlSegmentWidthStyle segmentWidthStyle;
+
+/**
+ Specifies the location of the selection indicator.
+ 
+ Default is `HMSegmentedControlSelectionIndicatorLocationUp`
+ */
+@property (nonatomic, assign) HMSegmentedControlSelectionIndicatorLocation selectionIndicatorLocation;
+
+/*
+ Specifies the border type.
+ 
+ Default is `HMSegmentedControlBorderTypeNone`
+ */
+@property (nonatomic, assign) HMSegmentedControlBorderType borderType;
+
+/**
+ Specifies the image position relative to the text. Only applicable for HMSegmentedControlTypeTextImages
+ 
+ Default is `HMSegmentedControlImagePositionBehindText`
+ */
+@property (nonatomic) HMSegmentedControlImagePosition imagePosition;
+
+/**
+ Specifies the distance between the text and the image. Only applicable for HMSegmentedControlTypeTextImages
+ 
+ Default is `0,0`
+ */
+@property (nonatomic) CGFloat textImageSpacing;
+
+/**
+ Specifies the border color.
+ 
+ Default is `[UIColor blackColor]`
+ */
+@property (nonatomic, strong) UIColor *borderColor;
+
+/**
+ Specifies the border width.
+ 
+ Default is `1.0f`
+ */
+@property (nonatomic, assign) CGFloat borderWidth;
+
+/**
+ Default is YES. Set to NO to deny scrolling by dragging the scrollView by the user.
+ */
+@property(nonatomic, getter = isUserDraggable) BOOL userDraggable;
+
+/**
+ Default is YES. Set to NO to deny any touch events by the user.
+ */
+@property(nonatomic, getter = isTouchEnabled) BOOL touchEnabled;
+
+/**
+ Default is NO. Set to YES to show a vertical divider between the segments.
+ */
+@property(nonatomic, getter = isVerticalDividerEnabled) BOOL verticalDividerEnabled;
+
+@property (nonatomic, getter=shouldStretchSegmentsToScreenSize) BOOL stretchSegmentsToScreenSize;
+
+/**
+ Index of the currently selected segment.
+ */
+@property (nonatomic, assign) NSUInteger selectedSegmentIndex;
+
+/**
+ Height of the selection indicator. Only effective when `HMSegmentedControlSelectionStyle` is either `HMSegmentedControlSelectionStyleTextWidthStripe` or `HMSegmentedControlSelectionStyleFullWidthStripe`.
+ 
+ Default is 5.0
+ */
+@property (nonatomic, readwrite) CGFloat selectionIndicatorHeight;
+
+/**
+ Edge insets for the selection indicator.
+ NOTE: This does not affect the bounding box of HMSegmentedControlSelectionStyleBox
+ 
+ When HMSegmentedControlSelectionIndicatorLocationUp is selected, bottom edge insets are not used
+ 
+ When HMSegmentedControlSelectionIndicatorLocationDown is selected, top edge insets are not used
+ 
+ Defaults are top: 0.0f
+             left: 0.0f
+           bottom: 0.0f
+            right: 0.0f
+ */
+@property (nonatomic, readwrite) UIEdgeInsets selectionIndicatorEdgeInsets;
+
+/**
+ Inset left and right edges of segments.
+ 
+ Default is UIEdgeInsetsMake(0, 5, 0, 5)
+ */
+@property (nonatomic, readwrite) UIEdgeInsets segmentEdgeInset;
+
+@property (nonatomic, readwrite) UIEdgeInsets enlargeEdgeInset;
+
+/**
+ Default is YES. Set to NO to disable animation during user selection.
+ */
+@property (nonatomic) BOOL shouldAnimateUserSelection;
+
+- (instancetype)initWithSectionTitles:(NSArray<NSString *> *)sectiontitles;
+- (instancetype)initWithSectionImages:(NSArray<UIImage *> *)sectionImages sectionSelectedImages:(NSArray<UIImage *> *)sectionSelectedImages;
+- (instancetype)initWithSectionImages:(NSArray<UIImage *> *)sectionImages sectionSelectedImages:(NSArray<UIImage *> *)sectionSelectedImages titlesForSections:(NSArray<NSString *> *)sectiontitles;
+
+- (void)setSelectedSegmentIndex:(NSUInteger)index animated:(BOOL)animated;
+- (void)setIndexChangeBlock:(IndexChangeBlock)indexChangeBlock;
+- (void)setTitleFormatter:(HMTitleFormatterBlock)titleFormatter;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 1139 - 0
MusicGradeExam/Pods/HMSegmentedControl/HMSegmentedControl/HMSegmentedControl.m

@@ -0,0 +1,1139 @@
+//
+//  HMSegmentedControl.m
+//  HMSegmentedControl
+//
+//  Created by Hesham Abd-Elmegid on 23/12/12.
+//  Copyright (c) 2012-2015 Hesham Abd-Elmegid. All rights reserved.
+//
+
+#import "HMSegmentedControl.h"
+#import <QuartzCore/QuartzCore.h>
+#import <math.h>
+
+NSUInteger HMSegmentedControlNoSegment = (NSUInteger)-1;
+
+@protocol HMAccessibilityDelegate <NSObject>
+@required
+-(void)scrollToAccessibilityElement:(id)sender;
+@end
+
+@interface HMAccessibilityElement : UIAccessibilityElement
+@property (nonatomic, weak) id<HMAccessibilityDelegate> delegate;
+@end
+
+@interface HMScrollView : UIScrollView
+@end
+
+@interface HMSegmentedControl () <UIScrollViewDelegate, HMAccessibilityDelegate>
+
+@property (nonatomic, strong) CALayer *selectionIndicatorStripLayer;
+@property (nonatomic, strong) CALayer *selectionIndicatorBoxLayer;
+@property (nonatomic, strong) CALayer *selectionIndicatorArrowLayer;
+@property (nonatomic, readwrite) CGFloat segmentWidth;
+@property (nonatomic, readwrite) NSArray<NSNumber *> *segmentWidthsArray;
+@property (nonatomic, strong) HMScrollView *scrollView;
+@property (nonatomic, strong) NSMutableArray *accessibilityElements;
+@property (nonatomic, strong) NSMutableArray *titleBackgroundLayers;
+
+@end
+
+@implementation HMAccessibilityElement
+
+- (void)accessibilityElementDidBecomeFocused
+{
+    if (_delegate!=nil && [_delegate respondsToSelector:@selector(scrollToAccessibilityElement:)])
+        [_delegate performSelector:@selector(scrollToAccessibilityElement:) withObject:self];
+}
+
+@end
+
+@implementation HMScrollView
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    if (!self.dragging) {
+        [self.nextResponder touchesBegan:touches withEvent:event];
+    } else {
+        [super touchesBegan:touches withEvent:event];
+    }
+}
+
+- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
+    if (!self.dragging) {
+        [self.nextResponder touchesMoved:touches withEvent:event];
+    } else{
+        [super touchesMoved:touches withEvent:event];
+    }
+}
+
+- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    if (!self.dragging) {
+        [self.nextResponder touchesEnded:touches withEvent:event];
+    } else {
+        [super touchesEnded:touches withEvent:event];
+    }
+}
+
+@end
+
+@implementation HMSegmentedControl
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+    self = [super initWithCoder:aDecoder];
+    if (self) {
+        [self commonInit];
+    }
+    return self;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    
+    if (self) {
+        [self commonInit];
+    }
+    
+    return self;
+}
+
+- (instancetype)initWithSectionTitles:(NSArray<NSString *> *)sectiontitles {
+    self = [super initWithFrame:CGRectZero];
+    if (self) {
+        [self commonInit];
+        self.sectionTitles = sectiontitles;
+        self.type = HMSegmentedControlTypeText;
+    }
+    return self;
+}
+
+- (instancetype)initWithSectionImages:(NSArray<UIImage *> *)sectionImages sectionSelectedImages:(NSArray<UIImage *> *)sectionSelectedImages {
+    self = [super initWithFrame:CGRectZero];
+    if (self) {
+        [self commonInit];
+        self.sectionImages = sectionImages;
+        self.sectionSelectedImages = sectionSelectedImages;
+        self.type = HMSegmentedControlTypeImages;
+    }
+    return self;
+}
+
+- (instancetype)initWithSectionImages:(NSArray<UIImage *> *)sectionImages sectionSelectedImages:(NSArray<UIImage *> *)sectionSelectedImages titlesForSections:(NSArray<NSString *> *)sectiontitles {
+	self = [super initWithFrame:CGRectZero];
+    if (self) {
+        [self commonInit];
+		
+		if (sectionImages.count != sectiontitles.count) {
+			[NSException raise:NSRangeException format:@"***%s: Images bounds (%ld) Don't match Title bounds (%ld)", sel_getName(_cmd), (unsigned long)sectionImages.count, (unsigned long)sectiontitles.count];
+        }
+		
+        self.sectionImages = sectionImages;
+        self.sectionSelectedImages = sectionSelectedImages;
+		self.sectionTitles = sectiontitles;
+        self.type = HMSegmentedControlTypeTextImages;
+    }
+    return self;
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    
+    self.segmentWidth = 0.0f;
+}
+
+- (void)commonInit {
+    self.scrollView = [[HMScrollView alloc] init];
+    self.scrollView.delegate = self;
+    self.scrollView.scrollsToTop = NO;
+    self.scrollView.showsVerticalScrollIndicator = NO;
+    self.scrollView.showsHorizontalScrollIndicator = NO;
+    [self addSubview:self.scrollView];
+    
+    _backgroundColor = [UIColor whiteColor];
+    self.opaque = NO;
+    _selectionIndicatorColor = [UIColor colorWithRed:52.0f/255.0f green:181.0f/255.0f blue:229.0f/255.0f alpha:1.0f];
+    _selectionIndicatorBoxColor = _selectionIndicatorColor;
+
+    self.selectedSegmentIndex = 0;
+    self.segmentEdgeInset = UIEdgeInsetsMake(0, 5, 0, 5);
+    self.selectionIndicatorHeight = 5.0f;
+    self.selectionIndicatorEdgeInsets = UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f);
+    self.selectionStyle = HMSegmentedControlSelectionStyleTextWidthStripe;
+    self.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationTop;
+    self.segmentWidthStyle = HMSegmentedControlSegmentWidthStyleFixed;
+    self.userDraggable = YES;
+    self.touchEnabled = YES;
+    self.verticalDividerEnabled = NO;
+    self.type = HMSegmentedControlTypeText;
+    self.verticalDividerWidth = 1.0f;
+    _verticalDividerColor = [UIColor blackColor];
+    self.borderColor = [UIColor blackColor];
+    self.borderWidth = 1.0f;
+    
+    self.shouldAnimateUserSelection = YES;
+    
+    self.selectionIndicatorArrowLayer = [CALayer layer];
+    self.selectionIndicatorStripLayer = [CALayer layer];
+    self.selectionIndicatorBoxLayer = [CALayer layer];
+    self.selectionIndicatorBoxLayer.opacity = self.selectionIndicatorBoxOpacity;
+    self.selectionIndicatorBoxLayer.borderWidth = 1.0f;
+    self.selectionIndicatorBoxOpacity = 0.2;
+    
+    self.contentMode = UIViewContentModeRedraw;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    
+    [self updateSegmentsRects];
+}
+
+- (void)setFrame:(CGRect)frame {
+    [super setFrame:frame];
+    
+    [self updateSegmentsRects];
+}
+
+- (void)setSectionTitles:(NSArray<NSString *> *)sectionTitles {
+    _sectionTitles = sectionTitles;
+    
+    [self setNeedsLayout];
+    [self setNeedsDisplay];
+}
+
+- (void)setSectionImages:(NSArray<UIImage *> *)sectionImages {
+    _sectionImages = sectionImages;
+    
+    [self setNeedsLayout];
+    [self setNeedsDisplay];
+}
+
+- (void)setSelectionIndicatorLocation:(HMSegmentedControlSelectionIndicatorLocation)selectionIndicatorLocation {
+	_selectionIndicatorLocation = selectionIndicatorLocation;
+	
+	if (selectionIndicatorLocation == HMSegmentedControlSelectionIndicatorLocationNone) {
+		self.selectionIndicatorHeight = 0.0f;
+	}
+}
+
+- (void)setSelectionIndicatorBoxOpacity:(CGFloat)selectionIndicatorBoxOpacity {
+    _selectionIndicatorBoxOpacity = selectionIndicatorBoxOpacity;
+    
+    self.selectionIndicatorBoxLayer.opacity = _selectionIndicatorBoxOpacity;
+}
+
+- (void)setSegmentWidthStyle:(HMSegmentedControlSegmentWidthStyle)segmentWidthStyle {
+    // Force HMSegmentedControlSegmentWidthStyleFixed when type is HMSegmentedControlTypeImages.
+    if (self.type == HMSegmentedControlTypeImages) {
+        _segmentWidthStyle = HMSegmentedControlSegmentWidthStyleFixed;
+    } else {
+        _segmentWidthStyle = segmentWidthStyle;
+    }
+}
+
+- (void)setBorderType:(HMSegmentedControlBorderType)borderType {
+    _borderType = borderType;
+    [self setNeedsDisplay];
+}
+
+- (NSMutableArray *)titleBackgroundLayers {
+    if (_titleBackgroundLayers) {
+        return _titleBackgroundLayers;
+    }
+    _titleBackgroundLayers = @[].mutableCopy;
+    return _titleBackgroundLayers;
+}
+
+#pragma mark - Drawing
+
+- (CGSize)measureTitleAtIndex:(NSUInteger)index {
+    if (index >= self.sectionTitles.count) {
+        return CGSizeZero;
+    }
+    
+    id title = self.sectionTitles[index];
+    CGSize size = CGSizeZero;
+    BOOL selected = (index == self.selectedSegmentIndex) ? YES : NO;
+    if ([title isKindOfClass:[NSString class]] && !self.titleFormatter) {
+        NSDictionary *titleAttrs = selected ? [self resultingSelectedTitleTextAttributes] : [self resultingTitleTextAttributes];
+        size = [(NSString *)title sizeWithAttributes:titleAttrs];
+        UIFont *font = titleAttrs[@"NSFont"];
+        size = CGSizeMake(ceil(size.width), ceil(size.height-font.descender));
+    } else if ([title isKindOfClass:[NSString class]] && self.titleFormatter) {
+        size = [self.titleFormatter(self, title, index, selected) size];
+    } else if ([title isKindOfClass:[NSAttributedString class]]) {
+        size = [(NSAttributedString *)title size];
+    } else {
+        NSAssert(title == nil, @"Unexpected type of segment title: %@", [title class]);
+        size = CGSizeZero;
+    }
+    return CGRectIntegral((CGRect){CGPointZero, size}).size;
+}
+
+- (NSAttributedString *)attributedTitleAtIndex:(NSUInteger)index {
+    id title = self.sectionTitles[index];
+    BOOL selected = (index == self.selectedSegmentIndex) ? YES : NO;
+    
+    if ([title isKindOfClass:[NSAttributedString class]]) {
+        return (NSAttributedString *)title;
+    } else if (!self.titleFormatter) {
+        NSDictionary *titleAttrs = selected ? [self resultingSelectedTitleTextAttributes] : [self resultingTitleTextAttributes];
+        
+        // the color should be cast to CGColor in order to avoid invalid context on iOS7
+        UIColor *titleColor = titleAttrs[NSForegroundColorAttributeName];
+        
+        if (titleColor) {
+            NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:titleAttrs];
+            
+            dict[NSForegroundColorAttributeName] = titleColor;
+            
+            titleAttrs = [NSDictionary dictionaryWithDictionary:dict];
+        }
+        
+        return [[NSAttributedString alloc] initWithString:(NSString *)title attributes:titleAttrs];
+    } else {
+        return self.titleFormatter(self, title, index, selected);
+    }
+}
+
+- (void)drawRect:(CGRect)rect {
+    [self.backgroundColor setFill];
+    UIRectFill([self bounds]);
+    
+    self.selectionIndicatorArrowLayer.backgroundColor = self.selectionIndicatorColor.CGColor;
+    
+    self.selectionIndicatorStripLayer.backgroundColor = self.selectionIndicatorColor.CGColor;
+    
+    self.selectionIndicatorBoxLayer.backgroundColor = self.selectionIndicatorBoxColor.CGColor;
+    self.selectionIndicatorBoxLayer.borderColor = self.selectionIndicatorBoxColor.CGColor;
+    
+    // Remove all sublayers to avoid drawing images over existing ones
+    self.scrollView.layer.sublayers = nil;
+    
+    CGRect oldRect = rect;
+    
+    if (self.accessibilityElements==nil)
+        self.accessibilityElements = [NSMutableArray arrayWithCapacity:0];
+    
+    if (self.type == HMSegmentedControlTypeText) {
+        [self removeTitleBackgroundLayers];
+        [self.sectionTitles enumerateObjectsUsingBlock:^(id titleString, NSUInteger idx, BOOL *stop) {
+
+            CGFloat stringWidth = 0;
+            CGFloat stringHeight = 0;
+            CGSize size = [self measureTitleAtIndex:idx];
+            stringWidth = size.width;
+            stringHeight = size.height;
+            CGRect rectDiv = CGRectZero;
+            CGRect fullRect = CGRectZero;
+            
+            // Text inside the CATextLayer will appear blurry unless the rect values are rounded
+            BOOL locationUp = (self.selectionIndicatorLocation == HMSegmentedControlSelectionIndicatorLocationTop);
+            BOOL selectionStyleNotBox = (self.selectionStyle != HMSegmentedControlSelectionStyleBox);
+
+            CGFloat y = roundf((CGRectGetHeight(self.frame) - selectionStyleNotBox * self.selectionIndicatorHeight) / 2 - stringHeight / 2 + self.selectionIndicatorHeight * locationUp);
+            CGRect rect;
+            if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleFixed) {
+                rect = CGRectMake((self.segmentWidth * idx) + (self.segmentWidth - stringWidth) / 2, y, stringWidth, stringHeight);
+                rectDiv = CGRectMake((self.segmentWidth * idx) - (self.verticalDividerWidth / 2), self.selectionIndicatorHeight * 2, self.verticalDividerWidth, self.frame.size.height - (self.selectionIndicatorHeight * 4));
+                fullRect = CGRectMake(self.segmentWidth * idx, 0, self.segmentWidth, oldRect.size.height);
+            } else {
+                // When we are drawing dynamic widths, we need to loop the widths array to calculate the xOffset
+                CGFloat xOffset = 0;
+                NSUInteger i = 0;
+                for (NSNumber *width in self.segmentWidthsArray) {
+                    if (idx == i)
+                        break;
+                    xOffset = xOffset + [width floatValue];
+                    i++;
+                }
+                
+                CGFloat widthForIndex = [[self.segmentWidthsArray objectAtIndex:idx] floatValue];
+                rect = CGRectMake(xOffset, y, widthForIndex, stringHeight);
+                fullRect = CGRectMake(xOffset, 0, widthForIndex, oldRect.size.height);
+                rectDiv = CGRectMake(xOffset - (self.verticalDividerWidth / 2), self.selectionIndicatorHeight * 2, self.verticalDividerWidth, self.frame.size.height - (self.selectionIndicatorHeight * 4));
+            }
+            
+            // Fix rect position/size to avoid blurry labels
+            rect = CGRectMake(ceilf(rect.origin.x), ceilf(rect.origin.y), ceilf(rect.size.width), ceilf(rect.size.height));
+            
+            CATextLayer *titleLayer = [CATextLayer layer];
+            titleLayer.frame = rect;
+            titleLayer.alignmentMode = kCAAlignmentCenter;
+            if ([UIDevice currentDevice].systemVersion.floatValue < 10.0 ) {
+                titleLayer.truncationMode = kCATruncationEnd;
+            }
+            titleLayer.string = [self attributedTitleAtIndex:idx];
+            titleLayer.contentsScale = [[UIScreen mainScreen] scale];
+            
+            [self.scrollView.layer addSublayer:titleLayer];
+            
+            // Vertical Divider
+            if (self.isVerticalDividerEnabled && idx > 0) {
+                CALayer *verticalDividerLayer = [CALayer layer];
+                verticalDividerLayer.frame = rectDiv;
+                verticalDividerLayer.backgroundColor = self.verticalDividerColor.CGColor;
+                
+                [self.scrollView.layer addSublayer:verticalDividerLayer];
+            }
+            
+            if ([self.accessibilityElements count]<=idx) {
+                HMAccessibilityElement *element = [[HMAccessibilityElement alloc] initWithAccessibilityContainer:self];
+                element.delegate = self;
+                element.accessibilityLabel = (self.sectionTitles!=nil&&[self.sectionTitles count]>idx)?[self.sectionTitles objectAtIndex:idx]:[NSString stringWithFormat:@"item %u", (unsigned)idx+1];
+                element.accessibilityFrame = [self convertRect:fullRect toView:nil];
+                if (self.selectedSegmentIndex==idx)
+                    element.accessibilityTraits = UIAccessibilityTraitButton|UIAccessibilityTraitSelected;
+                else
+                    element.accessibilityTraits = UIAccessibilityTraitButton;
+                [self.accessibilityElements addObject:element];
+            } else {
+                CGFloat offset = 0.f;
+                for (NSUInteger i = 0; i<idx; i++) {
+                    HMAccessibilityElement *accessibilityItem = [self.accessibilityElements objectAtIndex:i];
+                    offset += accessibilityItem.accessibilityFrame.size.width;
+                }
+                HMAccessibilityElement *element = [self.accessibilityElements objectAtIndex:idx];
+                CGRect newRect = CGRectMake(offset-self.scrollView.contentOffset.x, 0, element.accessibilityFrame.size.width, element.accessibilityFrame.size.height);
+                element.accessibilityFrame = [self convertRect:newRect toView:nil];
+                if (self.selectedSegmentIndex==idx)
+                    element.accessibilityTraits = UIAccessibilityTraitButton|UIAccessibilityTraitSelected;
+                else
+                    element.accessibilityTraits = UIAccessibilityTraitButton;
+            }
+        
+            [self addBackgroundAndBorderLayerWithRect:fullRect];
+        }];
+    } else if (self.type == HMSegmentedControlTypeImages) {
+        [self removeTitleBackgroundLayers];
+        [self.sectionImages enumerateObjectsUsingBlock:^(id iconImage, NSUInteger idx, BOOL *stop) {
+            UIImage *icon = iconImage;
+            CGFloat imageWidth = icon.size.width;
+            CGFloat imageHeight = icon.size.height;
+            CGFloat y = roundf(CGRectGetHeight(self.frame) - self.selectionIndicatorHeight) / 2 - imageHeight / 2 + ((self.selectionIndicatorLocation == HMSegmentedControlSelectionIndicatorLocationTop) ? self.selectionIndicatorHeight : 0);
+            CGFloat x = self.segmentWidth * idx + (self.segmentWidth - imageWidth)/2.0f;
+            CGRect rect = CGRectMake(x, y, imageWidth, imageHeight);
+            
+            CALayer *imageLayer = [CALayer layer];
+            imageLayer.frame = rect;
+            
+            if (self.selectedSegmentIndex == idx && self.selectedSegmentIndex < self.sectionSelectedImages.count) {
+                if (self.sectionSelectedImages) {
+                    UIImage *highlightIcon = [self.sectionSelectedImages objectAtIndex:idx];
+                    imageLayer.contents = (id)highlightIcon.CGImage;
+                } else {
+                    imageLayer.contents = (id)icon.CGImage;
+                }
+            } else {
+                imageLayer.contents = (id)icon.CGImage;
+            }
+            
+            [self.scrollView.layer addSublayer:imageLayer];
+            // Vertical Divider
+            if (self.isVerticalDividerEnabled && idx>0) {
+                CALayer *verticalDividerLayer = [CALayer layer];
+                verticalDividerLayer.frame = CGRectMake((self.segmentWidth * idx) - (self.verticalDividerWidth / 2), self.selectionIndicatorHeight * 2, self.verticalDividerWidth, self.frame.size.height-(self.selectionIndicatorHeight * 4));
+                verticalDividerLayer.backgroundColor = self.verticalDividerColor.CGColor;
+                
+                [self.scrollView.layer addSublayer:verticalDividerLayer];
+            }
+            
+            if ([self.accessibilityElements count]<=idx) {
+                HMAccessibilityElement *element = [[HMAccessibilityElement alloc] initWithAccessibilityContainer:self];
+                element.delegate = self;
+                element.accessibilityLabel = (self.sectionTitles!=nil&&[self.sectionTitles count]>idx)?[self.sectionTitles objectAtIndex:idx]:[NSString stringWithFormat:@"item %u", (unsigned)idx+1];
+                element.accessibilityFrame = [self convertRect:rect toView:nil];
+                if (self.selectedSegmentIndex==idx)
+                    element.accessibilityTraits = UIAccessibilityTraitButton|UIAccessibilityTraitSelected;
+                else
+                    element.accessibilityTraits = UIAccessibilityTraitButton;
+                [self.accessibilityElements addObject:element];
+            } else {
+                CGFloat offset = 0.f;
+                for (NSUInteger i = 0; i<idx; i++) {
+                    HMAccessibilityElement *accessibilityItem = [self.accessibilityElements objectAtIndex:i];
+                    offset += accessibilityItem.accessibilityFrame.size.width;
+                }
+                HMAccessibilityElement *element = [self.accessibilityElements objectAtIndex:idx];
+                CGRect newRect = CGRectMake(offset-self.scrollView.contentOffset.x, 0, element.accessibilityFrame.size.width, element.accessibilityFrame.size.height);
+                element.accessibilityFrame = [self convertRect:newRect toView:nil];
+                if (self.selectedSegmentIndex==idx)
+                    element.accessibilityTraits = UIAccessibilityTraitButton|UIAccessibilityTraitSelected;
+                else
+                    element.accessibilityTraits = UIAccessibilityTraitButton;
+            }
+            
+            [self addBackgroundAndBorderLayerWithRect:rect];
+        }];
+    } else if (self.type == HMSegmentedControlTypeTextImages){
+        [self removeTitleBackgroundLayers];
+		[self.sectionImages enumerateObjectsUsingBlock:^(id iconImage, NSUInteger idx, BOOL *stop) {
+            UIImage *icon = iconImage;
+            CGFloat imageWidth = icon.size.width;
+            CGFloat imageHeight = icon.size.height;
+			
+            CGSize stringSize = [self measureTitleAtIndex:idx];
+            CGFloat stringHeight = stringSize.height;
+            CGFloat stringWidth = stringSize.width;
+            
+            CGFloat imageXOffset = self.segmentWidth * idx; // Start with edge inset
+            CGFloat textXOffset  = self.segmentWidth * idx;
+            CGFloat imageYOffset = ceilf((self.frame.size.height - imageHeight) / 2.0); // Start in center
+            CGFloat textYOffset  = ceilf((self.frame.size.height - stringHeight) / 2.0);
+            
+            
+            if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleFixed) {
+                BOOL isImageInLineWidthText = self.imagePosition == HMSegmentedControlImagePositionLeftOfText || self.imagePosition == HMSegmentedControlImagePositionRightOfText;
+                if (isImageInLineWidthText) {
+                    CGFloat whitespace = self.segmentWidth - stringSize.width - imageWidth - self.textImageSpacing;
+                    if (self.imagePosition == HMSegmentedControlImagePositionLeftOfText) {
+                        imageXOffset += whitespace / 2.0;
+                        textXOffset = imageXOffset + imageWidth + self.textImageSpacing;
+                    } else {
+                        textXOffset += whitespace / 2.0;
+                        imageXOffset = textXOffset + stringWidth + self.textImageSpacing;
+                    }
+                } else {
+                    imageXOffset = self.segmentWidth * idx + (self.segmentWidth - imageWidth) / 2.0f; // Start with edge inset
+                    textXOffset  = self.segmentWidth * idx + (self.segmentWidth - stringWidth) / 2.0f;
+                    
+                    CGFloat whitespace = CGRectGetHeight(self.frame) - imageHeight - stringHeight - self.textImageSpacing;
+                    if (self.imagePosition == HMSegmentedControlImagePositionAboveText) {
+                        imageYOffset = ceilf(whitespace / 2.0);
+                        textYOffset = imageYOffset + imageHeight + self.textImageSpacing;
+                    } else if (self.imagePosition == HMSegmentedControlImagePositionBelowText) {
+                        textYOffset = ceilf(whitespace / 2.0);
+                        imageYOffset = textYOffset + stringHeight + self.textImageSpacing;
+                    }
+                }
+            } else if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleDynamic) {
+                // When we are drawing dynamic widths, we need to loop the widths array to calculate the xOffset
+                CGFloat xOffset = 0;
+                NSUInteger i = 0;
+                
+                for (NSNumber *width in self.segmentWidthsArray) {
+                    if (idx == i) {
+                        break;
+                    }
+                    
+                    xOffset = xOffset + [width floatValue];
+                    i++;
+                }
+                
+                BOOL isImageInLineWidthText = self.imagePosition == HMSegmentedControlImagePositionLeftOfText || self.imagePosition == HMSegmentedControlImagePositionRightOfText;
+                if (isImageInLineWidthText) {
+                    if (self.imagePosition == HMSegmentedControlImagePositionLeftOfText) {
+                        imageXOffset = xOffset;
+                        textXOffset = imageXOffset + imageWidth + self.textImageSpacing;
+                    } else {
+                        textXOffset = xOffset;
+                        imageXOffset = textXOffset + stringWidth + self.textImageSpacing;
+                    }
+                } else {
+                    imageXOffset = xOffset + ([self.segmentWidthsArray[i] floatValue] - imageWidth) / 2.0f; // Start with edge inset
+                    textXOffset  = xOffset + ([self.segmentWidthsArray[i] floatValue] - stringWidth) / 2.0f;
+                    
+                    CGFloat whitespace = CGRectGetHeight(self.frame) - imageHeight - stringHeight - self.textImageSpacing;
+                    if (self.imagePosition == HMSegmentedControlImagePositionAboveText) {
+                        imageYOffset = ceilf(whitespace / 2.0);
+                        textYOffset = imageYOffset + imageHeight + self.textImageSpacing;
+                    } else if (self.imagePosition == HMSegmentedControlImagePositionBelowText) {
+                        textYOffset = ceilf(whitespace / 2.0);
+                        imageYOffset = textYOffset + stringHeight + self.textImageSpacing;
+                    }
+                }
+            }
+            
+            CGRect imageRect = CGRectMake(imageXOffset, imageYOffset, imageWidth, imageHeight);
+            CGRect textRect = CGRectMake(ceilf(textXOffset), ceilf(textYOffset), ceilf(stringWidth), ceilf(stringHeight));
+
+            CATextLayer *titleLayer = [CATextLayer layer];
+            titleLayer.frame = textRect;
+            titleLayer.alignmentMode = kCAAlignmentCenter;
+            titleLayer.string = [self attributedTitleAtIndex:idx];
+            if ([UIDevice currentDevice].systemVersion.floatValue < 10.0 ) {
+                titleLayer.truncationMode = kCATruncationEnd;
+            }
+            CALayer *imageLayer = [CALayer layer];
+            imageLayer.frame = imageRect;
+			
+            if (self.selectedSegmentIndex == idx) {
+                if (self.sectionSelectedImages) {
+                    UIImage *highlightIcon = [self.sectionSelectedImages objectAtIndex:idx];
+                    imageLayer.contents = (id)highlightIcon.CGImage;
+                } else {
+                    imageLayer.contents = (id)icon.CGImage;
+                }
+            } else {
+                imageLayer.contents = (id)icon.CGImage;
+            }
+            
+            [self.scrollView.layer addSublayer:imageLayer];
+			titleLayer.contentsScale = [[UIScreen mainScreen] scale];
+            [self.scrollView.layer addSublayer:titleLayer];
+            
+            if ([self.accessibilityElements count]<=idx) {
+                HMAccessibilityElement *element = [[HMAccessibilityElement alloc] initWithAccessibilityContainer:self];
+                element.delegate = self;
+                element.accessibilityLabel = (self.sectionTitles!=nil&&[self.sectionTitles count]>idx)?[self.sectionTitles objectAtIndex:idx]:[NSString stringWithFormat:@"item %u", (unsigned)idx+1];
+                element.accessibilityFrame = [self convertRect:CGRectUnion(textRect, imageRect) toView:nil];
+                if (self.selectedSegmentIndex==idx)
+                    element.accessibilityTraits = UIAccessibilityTraitButton|UIAccessibilityTraitSelected;
+                else
+                    element.accessibilityTraits = UIAccessibilityTraitButton;
+                [self.accessibilityElements addObject:element];
+            } else {
+                CGFloat offset = 0.f;
+                for (NSUInteger i = 0; i<idx; i++) {
+                    HMAccessibilityElement *accessibilityItem = [self.accessibilityElements objectAtIndex:i];
+                    offset += accessibilityItem.accessibilityFrame.size.width;
+                }
+                HMAccessibilityElement *element = [self.accessibilityElements objectAtIndex:idx];
+                CGRect newRect = CGRectMake(offset-self.scrollView.contentOffset.x, 0, element.accessibilityFrame.size.width, element.accessibilityFrame.size.height);
+                element.accessibilityFrame = [self convertRect:newRect toView:nil];
+                if (self.selectedSegmentIndex==idx)
+                    element.accessibilityTraits = UIAccessibilityTraitButton|UIAccessibilityTraitSelected;
+                else
+                    element.accessibilityTraits = UIAccessibilityTraitButton;
+            }
+			
+            [self addBackgroundAndBorderLayerWithRect:imageRect];
+        }];
+	}
+    
+    // Add the selection indicators
+    if (self.selectedSegmentIndex != HMSegmentedControlNoSegment) {
+        if (self.selectionStyle == HMSegmentedControlSelectionStyleArrow) {
+            if (!self.selectionIndicatorArrowLayer.superlayer) {
+                [self setArrowFrame];
+                [self.scrollView.layer addSublayer:self.selectionIndicatorArrowLayer];
+            }
+        } else {
+            if (!self.selectionIndicatorStripLayer.superlayer) {
+                self.selectionIndicatorStripLayer.frame = [self frameForSelectionIndicator];
+                [self.scrollView.layer addSublayer:self.selectionIndicatorStripLayer];
+                
+                if (self.selectionStyle == HMSegmentedControlSelectionStyleBox && !self.selectionIndicatorBoxLayer.superlayer) {
+                    self.selectionIndicatorBoxLayer.frame = [self frameForFillerSelectionIndicator];
+                    [self.scrollView.layer insertSublayer:self.selectionIndicatorBoxLayer atIndex:0];
+                }
+            }
+        }
+    }
+}
+
+- (void)removeTitleBackgroundLayers {
+    [self.titleBackgroundLayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];
+    [self.titleBackgroundLayers removeAllObjects];
+}
+
+- (void)addBackgroundAndBorderLayerWithRect:(CGRect)fullRect {
+    // Background layer
+    CALayer *backgroundLayer = [CALayer layer];
+    backgroundLayer.frame = fullRect;
+    [self.layer insertSublayer:backgroundLayer atIndex:0];
+    [self.titleBackgroundLayers addObject:backgroundLayer];
+    
+    // Border layer
+    if (self.borderType & HMSegmentedControlBorderTypeTop) {
+        CALayer *borderLayer = [CALayer layer];
+        borderLayer.frame = CGRectMake(0, 0, fullRect.size.width, self.borderWidth);
+        borderLayer.backgroundColor = self.borderColor.CGColor;
+        [backgroundLayer addSublayer: borderLayer];
+    }
+    if (self.borderType & HMSegmentedControlBorderTypeLeft) {
+        CALayer *borderLayer = [CALayer layer];
+        borderLayer.frame = CGRectMake(0, 0, self.borderWidth, fullRect.size.height);
+        borderLayer.backgroundColor = self.borderColor.CGColor;
+        [backgroundLayer addSublayer: borderLayer];
+    }
+    if (self.borderType & HMSegmentedControlBorderTypeBottom) {
+        CALayer *borderLayer = [CALayer layer];
+        borderLayer.frame = CGRectMake(0, fullRect.size.height - self.borderWidth, fullRect.size.width, self.borderWidth);
+        borderLayer.backgroundColor = self.borderColor.CGColor;
+        [backgroundLayer addSublayer: borderLayer];
+    }
+    if (self.borderType & HMSegmentedControlBorderTypeRight) {
+        CALayer *borderLayer = [CALayer layer];
+        borderLayer.frame = CGRectMake(fullRect.size.width - self.borderWidth, 0, self.borderWidth, fullRect.size.height);
+        borderLayer.backgroundColor = self.borderColor.CGColor;
+        [backgroundLayer addSublayer: borderLayer];
+    }
+}
+
+- (void)setArrowFrame {
+    self.selectionIndicatorArrowLayer.frame = [self frameForSelectionIndicator];
+    
+    self.selectionIndicatorArrowLayer.mask = nil;
+    
+    UIBezierPath *arrowPath = [UIBezierPath bezierPath];
+    
+    CGPoint p1 = CGPointZero;
+    CGPoint p2 = CGPointZero;
+    CGPoint p3 = CGPointZero;
+    
+    if (self.selectionIndicatorLocation == HMSegmentedControlSelectionIndicatorLocationBottom) {
+        p1 = CGPointMake(self.selectionIndicatorArrowLayer.bounds.size.width / 2, 0);
+        p2 = CGPointMake(0, self.selectionIndicatorArrowLayer.bounds.size.height);
+        p3 = CGPointMake(self.selectionIndicatorArrowLayer.bounds.size.width, self.selectionIndicatorArrowLayer.bounds.size.height);
+    }
+    
+    if (self.selectionIndicatorLocation == HMSegmentedControlSelectionIndicatorLocationTop) {
+        p1 = CGPointMake(self.selectionIndicatorArrowLayer.bounds.size.width / 2, self.selectionIndicatorArrowLayer.bounds.size.height);
+        p2 = CGPointMake(self.selectionIndicatorArrowLayer.bounds.size.width, 0);
+        p3 = CGPointMake(0, 0);
+    }
+    
+    [arrowPath moveToPoint:p1];
+    [arrowPath addLineToPoint:p2];
+    [arrowPath addLineToPoint:p3];
+    [arrowPath closePath];
+    
+    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+    maskLayer.frame = self.selectionIndicatorArrowLayer.bounds;
+    maskLayer.path = arrowPath.CGPath;
+    self.selectionIndicatorArrowLayer.mask = maskLayer;
+}
+
+- (CGRect)frameForSelectionIndicator {
+    CGFloat indicatorYOffset = 0.0f;
+    
+    if (self.selectionIndicatorLocation == HMSegmentedControlSelectionIndicatorLocationBottom) {
+        indicatorYOffset = self.bounds.size.height - self.selectionIndicatorHeight + self.selectionIndicatorEdgeInsets.bottom;
+    }
+    
+    if (self.selectionIndicatorLocation == HMSegmentedControlSelectionIndicatorLocationTop) {
+        indicatorYOffset = self.selectionIndicatorEdgeInsets.top;
+    }
+    
+    CGFloat sectionWidth = 0.0f;
+    
+    if (self.type == HMSegmentedControlTypeText) {
+        CGFloat stringWidth = [self measureTitleAtIndex:self.selectedSegmentIndex].width;
+        sectionWidth = stringWidth;
+    } else if (self.type == HMSegmentedControlTypeImages) {
+        UIImage *sectionImage = [self.sectionImages objectAtIndex:self.selectedSegmentIndex];
+        CGFloat imageWidth = sectionImage.size.width;
+        sectionWidth = imageWidth;
+    } else if (self.type == HMSegmentedControlTypeTextImages) {
+		CGFloat stringWidth = [self measureTitleAtIndex:self.selectedSegmentIndex].width;
+		UIImage *sectionImage = [self.sectionImages objectAtIndex:self.selectedSegmentIndex];
+		CGFloat imageWidth = sectionImage.size.width;
+        sectionWidth = MAX(stringWidth, imageWidth);
+	}
+    
+    if (self.selectionStyle == HMSegmentedControlSelectionStyleArrow) {
+        CGFloat widthToEndOfSelectedSegment = (self.segmentWidth * self.selectedSegmentIndex) + self.segmentWidth;
+        CGFloat widthToStartOfSelectedIndex = (self.segmentWidth * self.selectedSegmentIndex);
+        
+        CGFloat x = widthToStartOfSelectedIndex + ((widthToEndOfSelectedSegment - widthToStartOfSelectedIndex) / 2) - (self.selectionIndicatorHeight/2);
+        return CGRectMake(x - (self.selectionIndicatorHeight / 2), indicatorYOffset, self.selectionIndicatorHeight * 2, self.selectionIndicatorHeight);
+    } else {
+        if (self.selectionStyle == HMSegmentedControlSelectionStyleTextWidthStripe &&
+            sectionWidth <= self.segmentWidth &&
+            self.segmentWidthStyle != HMSegmentedControlSegmentWidthStyleDynamic) {
+            CGFloat widthToEndOfSelectedSegment = (self.segmentWidth * self.selectedSegmentIndex) + self.segmentWidth;
+            CGFloat widthToStartOfSelectedIndex = (self.segmentWidth * self.selectedSegmentIndex);
+            
+            CGFloat x = ((widthToEndOfSelectedSegment - widthToStartOfSelectedIndex) / 2) + (widthToStartOfSelectedIndex - sectionWidth / 2);
+            return CGRectMake(x + self.selectionIndicatorEdgeInsets.left, indicatorYOffset, sectionWidth - self.selectionIndicatorEdgeInsets.right, self.selectionIndicatorHeight);
+        } else {
+            if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleDynamic) {
+                CGFloat selectedSegmentOffset = 0.0f;
+                
+                NSUInteger i = 0;
+                for (NSNumber *width in self.segmentWidthsArray) {
+                    if (self.selectedSegmentIndex == i)
+                        break;
+                    selectedSegmentOffset = selectedSegmentOffset + [width floatValue];
+                    i++;
+                }
+                if (self.selectionStyle == HMSegmentedControlSelectionStyleTextWidthStripe) {
+                   return CGRectMake(selectedSegmentOffset + self.selectionIndicatorEdgeInsets.left + self.segmentEdgeInset.left, indicatorYOffset, [[self.segmentWidthsArray objectAtIndex:self.selectedSegmentIndex] floatValue] - self.selectionIndicatorEdgeInsets.right - self.segmentEdgeInset.left - self.segmentEdgeInset.right, self.selectionIndicatorHeight + self.selectionIndicatorEdgeInsets.bottom);
+                } else {
+                    return CGRectMake(selectedSegmentOffset + self.selectionIndicatorEdgeInsets.left, indicatorYOffset, [[self.segmentWidthsArray objectAtIndex:self.selectedSegmentIndex] floatValue] - self.selectionIndicatorEdgeInsets.right, self.selectionIndicatorHeight + self.selectionIndicatorEdgeInsets.bottom);
+                }
+            }
+            
+            return CGRectMake(self.segmentWidth * self.selectedSegmentIndex + self.selectionIndicatorEdgeInsets.left, indicatorYOffset, self.segmentWidth - self.selectionIndicatorEdgeInsets.left - self.selectionIndicatorEdgeInsets.right, self.selectionIndicatorHeight);
+        }
+    }
+}
+
+- (CGRect)frameForFillerSelectionIndicator {
+    if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleDynamic) {
+        CGFloat selectedSegmentOffset = 0.0f;
+        
+        NSUInteger i = 0;
+        for (NSNumber *width in self.segmentWidthsArray) {
+            if (self.selectedSegmentIndex == i) {
+                break;
+            }
+            selectedSegmentOffset = selectedSegmentOffset + [width floatValue];
+            
+            i++;
+        }
+        
+        return CGRectMake(selectedSegmentOffset, 0, [[self.segmentWidthsArray objectAtIndex:self.selectedSegmentIndex] floatValue], CGRectGetHeight(self.frame));
+    }
+    return CGRectMake(self.segmentWidth * self.selectedSegmentIndex, 0, self.segmentWidth, CGRectGetHeight(self.frame));
+}
+
+- (void)updateSegmentsRects {
+    self.scrollView.contentInset = UIEdgeInsetsZero;
+    self.scrollView.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
+    
+    if ([self sectionCount] > 0) {
+        self.segmentWidth = self.frame.size.width / [self sectionCount];
+    }
+    
+    if (self.type == HMSegmentedControlTypeText && self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleFixed) {
+        [self.sectionTitles enumerateObjectsUsingBlock:^(id titleString, NSUInteger idx, BOOL *stop) {
+            CGFloat stringWidth = [self measureTitleAtIndex:idx].width + self.segmentEdgeInset.left + self.segmentEdgeInset.right;
+            self.segmentWidth = MAX(stringWidth, self.segmentWidth);
+        }];
+    } else if (self.type == HMSegmentedControlTypeText && self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleDynamic) {
+        NSMutableArray *mutableSegmentWidths = [NSMutableArray array];
+        __block CGFloat totalWidth = 0.0;
+
+        [self.sectionTitles enumerateObjectsUsingBlock:^(id titleString, NSUInteger idx, BOOL *stop) {
+            CGFloat stringWidth = [self measureTitleAtIndex:idx].width + self.segmentEdgeInset.left + self.segmentEdgeInset.right;
+            totalWidth += stringWidth;
+            [mutableSegmentWidths addObject:[NSNumber numberWithFloat:stringWidth]];
+        }];
+
+        if (self.shouldStretchSegmentsToScreenSize && totalWidth < self.bounds.size.width) {
+            CGFloat whitespace = self.bounds.size.width - totalWidth;
+            CGFloat whitespaceForSegment = whitespace / [mutableSegmentWidths count];
+            [mutableSegmentWidths enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+                CGFloat extendedWidth = whitespaceForSegment + [obj floatValue];
+                [mutableSegmentWidths replaceObjectAtIndex:idx withObject:[NSNumber numberWithFloat:extendedWidth]];
+            }];
+        }
+
+        self.segmentWidthsArray = [mutableSegmentWidths copy];
+    } else if (self.type == HMSegmentedControlTypeImages) {
+        for (UIImage *sectionImage in self.sectionImages) {
+            CGFloat imageWidth = sectionImage.size.width + self.segmentEdgeInset.left + self.segmentEdgeInset.right;
+            self.segmentWidth = MAX(imageWidth, self.segmentWidth);
+        }
+    } else if (self.type == HMSegmentedControlTypeTextImages && self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleFixed){
+        //lets just use the title.. we will assume it is wider then images...
+        [self.sectionTitles enumerateObjectsUsingBlock:^(id titleString, NSUInteger idx, BOOL *stop) {
+            CGFloat stringWidth = [self measureTitleAtIndex:idx].width + self.segmentEdgeInset.left + self.segmentEdgeInset.right;
+            self.segmentWidth = MAX(stringWidth, self.segmentWidth);
+        }];
+    } else if (self.type == HMSegmentedControlTypeTextImages && self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleDynamic) {
+        NSMutableArray *mutableSegmentWidths = [NSMutableArray array];
+        __block CGFloat totalWidth = 0.0;
+        
+        int i = 0;
+        [self.sectionTitles enumerateObjectsUsingBlock:^(id titleString, NSUInteger idx, BOOL *stop) {
+            CGFloat stringWidth = [self measureTitleAtIndex:idx].width + self.segmentEdgeInset.right;
+            UIImage *sectionImage = [self.sectionImages objectAtIndex:i];
+            CGFloat imageWidth = sectionImage.size.width + self.segmentEdgeInset.left;
+            
+            CGFloat combinedWidth = 0.0;
+            if (self.imagePosition == HMSegmentedControlImagePositionLeftOfText || self.imagePosition == HMSegmentedControlImagePositionRightOfText) {
+                combinedWidth = imageWidth + stringWidth + self.textImageSpacing;
+            } else {
+                combinedWidth = MAX(imageWidth, stringWidth);
+            }
+            
+            totalWidth += combinedWidth;
+            
+            [mutableSegmentWidths addObject:[NSNumber numberWithFloat:combinedWidth]];
+        }];
+        
+        if (self.shouldStretchSegmentsToScreenSize && totalWidth < self.bounds.size.width) {
+            CGFloat whitespace = self.bounds.size.width - totalWidth;
+            CGFloat whitespaceForSegment = whitespace / [mutableSegmentWidths count];
+            [mutableSegmentWidths enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+                CGFloat extendedWidth = whitespaceForSegment + [obj floatValue];
+                [mutableSegmentWidths replaceObjectAtIndex:idx withObject:[NSNumber numberWithFloat:extendedWidth]];
+            }];
+        }
+        
+        self.segmentWidthsArray = [mutableSegmentWidths copy];
+    }
+
+    self.scrollView.scrollEnabled = self.isUserDraggable;
+    self.scrollView.contentSize = CGSizeMake([self totalSegmentedControlWidth], self.frame.size.height);
+}
+
+- (NSUInteger)sectionCount {
+    if (self.type == HMSegmentedControlTypeText) {
+        return self.sectionTitles.count;
+    } else if (self.type == HMSegmentedControlTypeImages ||
+               self.type == HMSegmentedControlTypeTextImages) {
+        return self.sectionImages.count;
+    }
+    
+    return 0;
+}
+
+- (void)willMoveToSuperview:(UIView *)newSuperview {
+    // Control is being removed
+    if (newSuperview == nil)
+        return;
+    
+    if (self.sectionTitles || self.sectionImages) {
+        [self updateSegmentsRects];
+    }
+}
+
+#pragma mark - Touch
+
+- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    UITouch *touch = [touches anyObject];
+    CGPoint touchLocation = [touch locationInView:self];
+    
+    CGRect enlargeRect =   CGRectMake(self.bounds.origin.x - self.enlargeEdgeInset.left,
+                      self.bounds.origin.y - self.enlargeEdgeInset.top,
+                      self.bounds.size.width + self.enlargeEdgeInset.left + self.enlargeEdgeInset.right,
+                      self.bounds.size.height + self.enlargeEdgeInset.top + self.enlargeEdgeInset.bottom);
+    
+    if (CGRectContainsPoint(enlargeRect, touchLocation)) {
+        NSUInteger segment = 0;
+        if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleFixed) {
+            segment = (touchLocation.x + self.scrollView.contentOffset.x) / self.segmentWidth;
+        } else if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleDynamic) {
+            // To know which segment the user touched, we need to loop over the widths and substract it from the x position.
+            CGFloat widthLeft = (touchLocation.x + self.scrollView.contentOffset.x);
+            for (NSNumber *width in self.segmentWidthsArray) {
+                widthLeft = widthLeft - [width floatValue];
+                
+                // When we don't have any width left to substract, we have the segment index.
+                if (widthLeft <= 0)
+                    break;
+                
+                segment++;
+            }
+        }
+        
+        NSUInteger sectionsCount = 0;
+        
+        if (self.type == HMSegmentedControlTypeImages) {
+            sectionsCount = [self.sectionImages count];
+        } else if (self.type == HMSegmentedControlTypeTextImages || self.type == HMSegmentedControlTypeText) {
+            sectionsCount = [self.sectionTitles count];
+        }
+        
+        if (segment != self.selectedSegmentIndex && segment < sectionsCount) {
+            // Check if we have to do anything with the touch event
+            if (self.isTouchEnabled)
+                [self setSelectedSegmentIndex:segment animated:self.shouldAnimateUserSelection notify:YES];
+        }
+    }
+}
+
+#pragma mark - Scrolling
+
+- (CGFloat)totalSegmentedControlWidth {
+    if (self.type == HMSegmentedControlTypeText && self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleFixed) {
+        return self.sectionTitles.count * self.segmentWidth;
+    } else if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleDynamic) {
+        return [[self.segmentWidthsArray valueForKeyPath:@"@sum.self"] floatValue];
+    } else {
+        return self.sectionImages.count * self.segmentWidth;
+    }
+}
+
+- (void)scrollToSelectedSegmentIndex:(BOOL)animated {
+    [self scrollTo:self.selectedSegmentIndex animated:animated];
+}
+
+- (void)scrollTo:(NSUInteger)index animated:(BOOL)animated {
+    CGRect rectForSelectedIndex = CGRectZero;
+    CGFloat selectedSegmentOffset = 0;
+    if (self.segmentWidthStyle == HMSegmentedControlSegmentWidthStyleFixed) {
+        rectForSelectedIndex = CGRectMake(self.segmentWidth * index,
+                                          0,
+                                          self.segmentWidth,
+                                          self.frame.size.height);
+        
+        selectedSegmentOffset = (CGRectGetWidth(self.frame) / 2) - (self.segmentWidth / 2);
+    } else {
+        NSUInteger i = 0;
+        CGFloat offsetter = 0;
+        for (NSNumber *width in self.segmentWidthsArray) {
+            if (index == i)
+                break;
+            offsetter = offsetter + [width floatValue];
+            i++;
+        }
+        
+        rectForSelectedIndex = CGRectMake(offsetter,
+                                          0,
+                                          [[self.segmentWidthsArray objectAtIndex:index] floatValue],
+                                          self.frame.size.height);
+        
+        selectedSegmentOffset = (CGRectGetWidth(self.frame) / 2) - ([[self.segmentWidthsArray objectAtIndex:index] floatValue] / 2);
+    }
+    
+    
+    CGRect rectToScrollTo = rectForSelectedIndex;
+    rectToScrollTo.origin.x -= selectedSegmentOffset;
+    rectToScrollTo.size.width += selectedSegmentOffset * 2;
+    [self.scrollView scrollRectToVisible:rectToScrollTo animated:animated];
+}
+
+#pragma mark - Index Change
+
+- (void)setSelectedSegmentIndex:(NSUInteger)index {
+    [self setSelectedSegmentIndex:index animated:NO notify:NO];
+}
+
+- (void)setSelectedSegmentIndex:(NSUInteger)index animated:(BOOL)animated {
+    [self setSelectedSegmentIndex:index animated:animated notify:NO];
+}
+
+- (void)setSelectedSegmentIndex:(NSUInteger)index animated:(BOOL)animated notify:(BOOL)notify {
+    _selectedSegmentIndex = index;
+    [self setNeedsDisplay];
+    
+    if (index == HMSegmentedControlNoSegment) {
+        [self.selectionIndicatorArrowLayer removeFromSuperlayer];
+        [self.selectionIndicatorStripLayer removeFromSuperlayer];
+        [self.selectionIndicatorBoxLayer removeFromSuperlayer];
+    } else {
+        [self scrollToSelectedSegmentIndex:animated];
+        
+        if (animated) {
+            // If the selected segment layer is not added to the super layer, that means no
+            // index is currently selected, so add the layer then move it to the new
+            // segment index without animating.
+            if(self.selectionStyle == HMSegmentedControlSelectionStyleArrow) {
+                if ([self.selectionIndicatorArrowLayer superlayer] == nil) {
+                    [self.scrollView.layer addSublayer:self.selectionIndicatorArrowLayer];
+                    
+                    [self setSelectedSegmentIndex:index animated:NO notify:YES];
+                    return;
+                }
+            }else {
+                if ([self.selectionIndicatorStripLayer superlayer] == nil) {
+                    [self.scrollView.layer addSublayer:self.selectionIndicatorStripLayer];
+                    
+                    if (self.selectionStyle == HMSegmentedControlSelectionStyleBox && [self.selectionIndicatorBoxLayer superlayer] == nil)
+                        [self.scrollView.layer insertSublayer:self.selectionIndicatorBoxLayer atIndex:0];
+                    
+                    [self setSelectedSegmentIndex:index animated:NO notify:YES];
+                    return;
+                }
+            }
+            
+            if (notify)
+                [self notifyForSegmentChangeToIndex:index];
+            
+            // Restore CALayer animations
+            self.selectionIndicatorArrowLayer.actions = nil;
+            self.selectionIndicatorStripLayer.actions = nil;
+            self.selectionIndicatorBoxLayer.actions = nil;
+            
+            // Animate to new position
+            [CATransaction begin];
+            [CATransaction setAnimationDuration:0.15f];
+            [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
+            [self setArrowFrame];
+            self.selectionIndicatorBoxLayer.frame = [self frameForSelectionIndicator];
+            self.selectionIndicatorStripLayer.frame = [self frameForSelectionIndicator];
+            self.selectionIndicatorBoxLayer.frame = [self frameForFillerSelectionIndicator];
+            [CATransaction commit];
+        } else {
+            // Disable CALayer animations
+            NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"position", [NSNull null], @"bounds", nil];
+            self.selectionIndicatorArrowLayer.actions = newActions;
+            [self setArrowFrame];
+            
+            self.selectionIndicatorStripLayer.actions = newActions;
+            self.selectionIndicatorStripLayer.frame = [self frameForSelectionIndicator];
+            
+            self.selectionIndicatorBoxLayer.actions = newActions;
+            self.selectionIndicatorBoxLayer.frame = [self frameForFillerSelectionIndicator];
+            
+            if (notify)
+                [self notifyForSegmentChangeToIndex:index];
+        }
+    }
+}
+
+- (void)notifyForSegmentChangeToIndex:(NSInteger)index {
+    if (self.superview)
+        [self sendActionsForControlEvents:UIControlEventValueChanged];
+    
+    if (self.indexChangeBlock)
+        self.indexChangeBlock(index);
+}
+
+#pragma mark - Styling Support
+
+- (NSDictionary *)resultingTitleTextAttributes {
+    NSDictionary *defaults = @{
+        NSFontAttributeName : [UIFont systemFontOfSize:19.0f],
+        NSForegroundColorAttributeName : [UIColor blackColor],
+    };
+    
+    NSMutableDictionary *resultingAttrs = [NSMutableDictionary dictionaryWithDictionary:defaults];
+    
+    if (self.titleTextAttributes) {
+        [resultingAttrs addEntriesFromDictionary:self.titleTextAttributes];
+    }
+
+    return [resultingAttrs copy];
+}
+
+- (NSDictionary *)resultingSelectedTitleTextAttributes {
+    NSMutableDictionary *resultingAttrs = [NSMutableDictionary dictionaryWithDictionary:[self resultingTitleTextAttributes]];
+    
+    if (self.selectedTitleTextAttributes) {
+        [resultingAttrs addEntriesFromDictionary:self.selectedTitleTextAttributes];
+    }
+    
+    return [resultingAttrs copy];
+}
+
+#pragma mark - UIScrollViewDelegate
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    for (HMAccessibilityElement *element in self.accessibilityElements) {
+        NSUInteger idx = [self.accessibilityElements indexOfObject:element];
+        CGFloat offset = 0.f;
+        for (NSUInteger i = 0; i<idx; i++) {
+            HMAccessibilityElement *elem = [self.accessibilityElements objectAtIndex:i];
+            offset += elem.accessibilityFrame.size.width;
+        }
+        CGRect rect = CGRectMake(offset-scrollView.contentOffset.x, 0, element.accessibilityFrame.size.width, element.accessibilityFrame.size.height);
+        element.accessibilityFrame = [self convertRect:rect toView:nil];
+    }
+}
+
+#pragma mark - HMAccessibilityDelegate
+
+- (void)scrollToAccessibilityElement:(id)sender {
+    NSUInteger index = [self.accessibilityElements indexOfObject:sender];
+    
+    if (index!=NSNotFound)
+        [self scrollTo:index animated:NO];
+}
+
+#pragma mark - UIAccessibilityContainer
+
+- (NSArray *)accessibilityElements {
+    return _accessibilityElements;
+}
+
+- (BOOL)isAccessibilityElement {
+    return NO;
+}
+
+- (NSInteger)accessibilityElementCount {
+    return [[self accessibilityElements] count];
+}
+
+- (NSInteger)indexOfAccessibilityElement:(id)element {
+    return [[self accessibilityElements] indexOfObject:element];
+}
+
+- (id)accessibilityElementAtIndex:(NSInteger)index {
+    return [[self accessibilityElements] objectAtIndex:index];
+}
+
+@end

+ 23 - 0
MusicGradeExam/Pods/HMSegmentedControl/LICENSE.md

@@ -0,0 +1,23 @@
+# License
+
+## MIT License
+
+Copyright (c) 2012 Hesham Abd-Elmegid (http://www.hesh.am)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 62 - 0
MusicGradeExam/Pods/HMSegmentedControl/README.md

@@ -0,0 +1,62 @@
+HMSegmentedControl
+===
+
+[![CocoaPods](https://img.shields.io/cocoapods/dt/HMSegmentedControl.svg?maxAge=2592000)](https://cocoapods.org/pods/HMSegmentedControl)
+[![Pod Version](http://img.shields.io/cocoapods/v/HMSegmentedControl.svg?style=flat)](http://cocoadocs.org/docsets/HMSegmentedControl)
+[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
+[![Pod Platform](http://img.shields.io/cocoapods/p/HMSegmentedControl.svg?style=flat)](http://cocoadocs.org/docsets/HMSegmentedControl)
+[![Pod License](http://img.shields.io/cocoapods/l/HMSegmentedControl.svg?style=flat)](http://opensource.org/licenses/MIT)
+
+A drop-in replacement for UISegmentedControl mimicking the style of the segmented control used in Google Currents and various other Google products.
+
+# Features
+- Supports both text and images
+- Support horizontal scrolling
+- Supports advanced title styling with text attributes for font, color, kerning, shadow, etc.
+- Supports selection indicator both on top and bottom
+- Supports blocks
+- Works with ARC and iOS >= 7
+
+# Installation
+
+### CocoaPods
+The easiest way of installing HMSegmentedControl is via [CocoaPods](http://cocoapods.org/). 
+
+```
+pod 'HMSegmentedControl'
+```
+
+### Old-fashioned way
+
+- Add `HMSegmentedControl.h` and `HMSegmentedControl.m` to your project.
+- Add `QuartzCore.framework` to your linked frameworks.
+- `#import "HMSegmentedControl.h"` where you want to add the control.
+
+# Usage
+
+The code below will create a segmented control with the default looks:
+
+```  objective-c
+HMSegmentedControl *segmentedControl = [[HMSegmentedControl alloc] initWithSectionTitles:@[@"One", @"Two", @"Three"]];
+segmentedControl.frame = CGRectMake(10, 10, 300, 60);
+[segmentedControl addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged];
+[self.view addSubview:segmentedControl];
+```
+
+Included is a demo project showing how to fully customise the control.
+
+![HMSegmentedControl](https://raw.githubusercontent.com/HeshamMegid/HMSegmentedControl/master/Screenshot.png)
+
+# Apps using HMSegmentedControl
+
+If you are using HMSegmentedControl in your app or know of an app that uses it, please add it to [this list](https://github.com/HeshamMegid/HMSegmentedControl/wiki/Apps-using-HMSegmentedControl).
+  
+
+# License
+
+HMSegmentedControl is licensed under the terms of the MIT License. Please see the [LICENSE](LICENSE.md) file for full details.
+
+If this code was helpful, I would love to hear from you.
+
+[@HeshamMegid](http://twitter.com/HeshamMegid)   
+[http://hesh.am](http://hesh.am)

+ 1 - 0
MusicGradeExam/Pods/Headers/Private/HMSegmentedControl/HMSegmentedControl.h

@@ -0,0 +1 @@
+../../../HMSegmentedControl/HMSegmentedControl/HMSegmentedControl.h

+ 1 - 0
MusicGradeExam/Pods/Headers/Public/HMSegmentedControl/HMSegmentedControl.h

@@ -0,0 +1 @@
+../../../HMSegmentedControl/HMSegmentedControl/HMSegmentedControl.h

+ 5 - 1
MusicGradeExam/Pods/Manifest.lock

@@ -15,6 +15,7 @@ PODS:
   - AFNetworking/UIKit (4.0.1):
     - AFNetworking/NSURLSession
   - Bugly (2.5.5)
+  - HMSegmentedControl (1.5.6)
   - IQKeyboardManager (6.0.6)
   - JCore (2.3.0)
   - JPush (3.2.2-noidfa):
@@ -34,6 +35,7 @@ PODS:
 DEPENDENCIES:
   - AFNetworking (~> 4.0)
   - Bugly
+  - HMSegmentedControl
   - IQKeyboardManager (~> 6.0.6)
   - JPush (= 3.2.2-noidfa)
   - Masonry (~> 1.0.2)
@@ -48,6 +50,7 @@ SPEC REPOS:
   trunk:
     - AFNetworking
     - Bugly
+    - HMSegmentedControl
     - IQKeyboardManager
     - JCore
     - JPush
@@ -62,6 +65,7 @@ SPEC REPOS:
 SPEC CHECKSUMS:
   AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
   Bugly: eded937bbb1f731cacf689c2d934ddbd9ab34f83
+  HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352
   IQKeyboardManager: 6b4ecd3e59cf55a26133d802d4678721d7f88499
   JCore: 7fb83e1e75e00df37e9e1e33f3adae79182ad57c
   JPush: d7e9b68edde1e4061e8a61605049b1673cd89df2
@@ -73,6 +77,6 @@ SPEC CHECKSUMS:
   SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c
   YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7
 
-PODFILE CHECKSUM: 62778da6f78fb080d61045800647ae5872c175b2
+PODFILE CHECKSUM: 29b5d93f590edf5dc7a0d07e100b1043ae7ba35a
 
 COCOAPODS: 1.9.1

File diff suppressed because it is too large
+ 843 - 819
MusicGradeExam/Pods/Pods.xcodeproj/project.pbxproj


+ 5 - 0
MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_HMSegmentedControl : NSObject
+@end
+@implementation PodsDummy_HMSegmentedControl
+@end

+ 12 - 0
MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 10 - 0
MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.debug.xcconfig

@@ -0,0 +1,10 @@
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/HMSegmentedControl" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HMSegmentedControl"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/HMSegmentedControl
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 10 - 0
MusicGradeExam/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.release.xcconfig

@@ -0,0 +1,10 @@
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/HMSegmentedControl" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HMSegmentedControl"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/HMSegmentedControl
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 26 - 0
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests-acknowledgements.markdown

@@ -29,6 +29,32 @@ THE SOFTWARE.
 Copyright (C) 2017 Tencent Bugly, Inc. All rights reserved.
 
 
+## HMSegmentedControl
+
+# License
+
+## MIT License
+
+Copyright (c) 2012 Hesham Abd-Elmegid (http://www.hesh.am)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
 ## IQKeyboardManager
 
 MIT License

+ 32 - 0
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests-acknowledgements.plist

@@ -54,6 +54,38 @@ THE SOFTWARE.
 		</dict>
 		<dict>
 			<key>FooterText</key>
+			<string># License
+
+## MIT License
+
+Copyright (c) 2012 Hesham Abd-Elmegid (http://www.hesh.am)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>HMSegmentedControl</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
 			<string>MIT License
 
 Copyright (c) 2013-2017 Iftekhar Qurashi

+ 4 - 4
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests.debug.xcconfig

@@ -1,9 +1,9 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Bugly" "${PODS_ROOT}/YYKit/Vendor"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/HMSegmentedControl" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/HMSegmentedControl" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"HMSegmentedControl" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 4 - 4
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam-MusicGradeExamUITests/Pods-MusicGradeExam-MusicGradeExamUITests.release.xcconfig

@@ -1,9 +1,9 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Bugly" "${PODS_ROOT}/YYKit/Vendor"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/HMSegmentedControl" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/HMSegmentedControl" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"HMSegmentedControl" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 26 - 0
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam-acknowledgements.markdown

@@ -29,6 +29,32 @@ THE SOFTWARE.
 Copyright (C) 2017 Tencent Bugly, Inc. All rights reserved.
 
 
+## HMSegmentedControl
+
+# License
+
+## MIT License
+
+Copyright (c) 2012 Hesham Abd-Elmegid (http://www.hesh.am)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
 ## IQKeyboardManager
 
 MIT License

+ 32 - 0
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam-acknowledgements.plist

@@ -54,6 +54,38 @@ THE SOFTWARE.
 		</dict>
 		<dict>
 			<key>FooterText</key>
+			<string># License
+
+## MIT License
+
+Copyright (c) 2012 Hesham Abd-Elmegid (http://www.hesh.am)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>HMSegmentedControl</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
 			<string>MIT License
 
 Copyright (c) 2013-2017 Iftekhar Qurashi

+ 4 - 4
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam.debug.xcconfig

@@ -1,9 +1,9 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Bugly" "${PODS_ROOT}/YYKit/Vendor"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/HMSegmentedControl" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/HMSegmentedControl" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"HMSegmentedControl" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 4 - 4
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExam/Pods-MusicGradeExam.release.xcconfig

@@ -1,9 +1,9 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Bugly" "${PODS_ROOT}/YYKit/Vendor"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/HMSegmentedControl" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/YYKit" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/HMSegmentedControl" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJExtension" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/Reachability" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/YYKit" -iframework "${PODS_ROOT}/Bugly" -iframework "${PODS_ROOT}/YYKit/Vendor"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"HMSegmentedControl" -l"IQKeyboardManager" -l"MBProgressHUD" -l"MJExtension" -l"MJRefresh" -l"Masonry" -l"Reachability" -l"SDWebImage" -l"YYKit" -l"c++" -l"jcore-ios-2.3.0" -l"jpush-ios-3.2.2" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebP" -weak_framework "UserNotifications"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 1 - 1
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExamTests/Pods-MusicGradeExamTests.debug.xcconfig

@@ -1,6 +1,6 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Bugly" "${PODS_ROOT}/YYKit/Vendor"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/HMSegmentedControl" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
 OTHER_LDFLAGS = $(inherited) -l"c++" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

+ 1 - 1
MusicGradeExam/Pods/Target Support Files/Pods-MusicGradeExamTests/Pods-MusicGradeExamTests.release.xcconfig

@@ -1,6 +1,6 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Bugly" "${PODS_ROOT}/YYKit/Vendor"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/HMSegmentedControl" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJExtension" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/Reachability" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/YYKit"
 OTHER_LDFLAGS = $(inherited) -l"c++" -l"resolv" -l"sqlite3" -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

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