Bladeren bron

乐器选择

Steven 3 jaren geleden
bovenliggende
commit
16ec05726a
100 gewijzigde bestanden met toevoegingen van 6602 en 1518 verwijderingen
  1. 109 71
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. 1 1
      KulexiuForStudent/KulexiuForStudent.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist
  3. 8 0
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  4. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  5. 18 0
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/WorkspaceSettings.xcsettings
  6. 80 0
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  7. 21 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img1.imageset/Contents.json
  8. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img1.imageset/img1.png
  9. 21 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img2.imageset/Contents.json
  10. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img2.imageset/img2.png
  11. 21 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img3.imageset/Contents.json
  12. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img3.imageset/img3.png
  13. 21 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img4.imageset/Contents.json
  14. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img4.imageset/img4.png
  15. 8 1
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h
  16. 14 1
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m
  17. 2 0
      KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch
  18. 8 0
      KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCollectionViewCell.h
  19. 3 1
      KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCollectionViewCell.m
  20. 1 0
      KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCycleScrollView.h
  21. 92 4
      KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCycleScrollView.m
  22. 3 5
      KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDQWMaskCustomView.xib
  23. 18 0
      KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/UIView+SubViewExtension.h
  24. 18 0
      KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/UIView+SubViewExtension.m
  25. 17 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  26. 0 19
      KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/ChooseInsturmentViewController.h
  27. 0 31
      KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/ChooseInsturmentViewController.m
  28. 17 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.h
  29. 250 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.m
  30. 30 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/Model/InstrumentMessageModel.h
  31. 169 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/Model/InstrumentMessageModel.m
  32. 28 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/KSSegmentControl.h
  33. 205 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/KSSegmentControl.m
  34. 29 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectChooseBodyView.h
  35. 59 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectChooseBodyView.m
  36. 111 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectChooseBodyView.xib
  37. 18 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectImageCell.h
  38. 17 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectImageCell.m
  39. 53 0
      KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectImageCell.xib
  40. 3 1
      KulexiuForStudent/Podfile
  41. 27 3
      KulexiuForStudent/Podfile.lock
  42. 115 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlAji.swift
  43. 118 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlAleppo.swift
  44. 132 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlChimayo.swift
  45. 181 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlFresno.swift
  46. 161 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlJalapeno.swift
  47. 125 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlJaloro.swift
  48. 179 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlPaprika.swift
  49. 160 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlPuya.swift
  50. 270 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/Core/CHIBasePageControl.swift
  51. 48 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/Core/CHILayer.swift
  52. 38 0
      KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/Core/CHIPageControllable.swift
  53. 21 0
      KulexiuForStudent/Pods/CHIPageControl/LICENSE
  54. 116 0
      KulexiuForStudent/Pods/CHIPageControl/README.md
  55. BIN
      KulexiuForStudent/Pods/JCore/libjcore-noidfa-ios-2.7.1.a
  56. 27 3
      KulexiuForStudent/Pods/Manifest.lock
  57. 1402 1322
      KulexiuForStudent/Pods/Pods.xcodeproj/project.pbxproj
  58. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/AFNetworking.xcscheme
  59. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Bugly.xcscheme
  60. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/CHIPageControl.xcscheme
  61. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme
  62. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JCore.xcscheme
  63. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JPush.xcscheme
  64. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JXCategoryView.xcscheme
  65. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JXPagingView.xcscheme
  66. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/MBProgressHUD.xcscheme
  67. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/MJExtension.xcscheme
  68. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/MJRefresh.xcscheme
  69. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Masonry.xcscheme
  70. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Pods-KulexiuForStudent-KulexiuForStudentUITests.xcscheme
  71. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Pods-KulexiuForStudent.xcscheme
  72. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Pods-KulexiuForStudentTests.xcscheme
  73. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/RSKImageCropper.xcscheme
  74. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Reachability.xcscheme
  75. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/RongCloudIM.xcscheme
  76. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/RongCloudRTC.xcscheme
  77. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/SDWebImage.xcscheme
  78. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/SSZipArchive.xcscheme
  79. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/SocketRocket.xcscheme
  80. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/UMAPM.xcscheme
  81. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/UMCommon.xcscheme
  82. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/UMDevice.xcscheme
  83. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Whiteboard-Whiteboard.xcscheme
  84. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Whiteboard.xcscheme
  85. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/YYModel.xcscheme
  86. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/ZKCycleScrollView.xcscheme
  87. 58 0
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/dsBridge.xcscheme
  88. 125 53
      KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist
  89. 26 0
      KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-Info.plist
  90. 5 0
      KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-dummy.m
  91. 12 0
      KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-prefix.pch
  92. 16 0
      KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-umbrella.h
  93. 13 0
      KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl.debug.xcconfig
  94. 6 0
      KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl.modulemap
  95. 13 0
      KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl.release.xcconfig
  96. 1 1
      KulexiuForStudent/Pods/Target Support Files/JCore/JCore.debug.xcconfig
  97. 1 1
      KulexiuForStudent/Pods/Target Support Files/JCore/JCore.release.xcconfig
  98. 1 0
      KulexiuForStudent/Pods/Target Support Files/JPush/JPush.debug.xcconfig
  99. 1 0
      KulexiuForStudent/Pods/Target Support Files/JPush/JPush.release.xcconfig
  100. 49 0
      KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-acknowledgements.markdown

+ 109 - 71
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -140,7 +140,6 @@
 		275FA23B27E7356B00CFEA2E /* PasswordBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 275FA22827E7356B00CFEA2E /* PasswordBodyView.m */; };
 		275FA23C27E7356B00CFEA2E /* VefiBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 275FA22927E7356B00CFEA2E /* VefiBodyView.m */; };
 		275FA23D27E7356B00CFEA2E /* PasswordBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 275FA22A27E7356B00CFEA2E /* PasswordBodyView.xib */; };
-		275FA24027E737EE00CFEA2E /* ChooseInsturmentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 275FA23F27E737EE00CFEA2E /* ChooseInsturmentViewController.m */; };
 		275FA24327E73DF600CFEA2E /* InstrumentDescView.m in Sources */ = {isa = PBXBuildFile; fileRef = 275FA24227E73DF600CFEA2E /* InstrumentDescView.m */; };
 		275FA24527E73E0100CFEA2E /* InstrumentDescView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 275FA24427E73E0000CFEA2E /* InstrumentDescView.xib */; };
 		275FA24827E7428200CFEA2E /* InstrumentChooseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 275FA24727E7428200CFEA2E /* InstrumentChooseView.m */; };
@@ -357,6 +356,14 @@
 		27F9033C27E87FE100C08A19 /* MineBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27F9033B27E87FE100C08A19 /* MineBodyView.xib */; };
 		82EE25CEB2BB5A0E1BB8D54B /* Pods_KulexiuForStudent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14CEAEC95E5CF916A3D3F602 /* Pods_KulexiuForStudent.framework */; };
 		93F0FA52C8A72F83D07C15A6 /* Pods_KulexiuForStudentTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD4D637EF600D0BAE869423D /* Pods_KulexiuForStudentTests.framework */; };
+		BC0212F727FC4A080040569F /* SubjectImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0212F527FC4A080040569F /* SubjectImageCell.m */; };
+		BC0212F827FC4A080040569F /* SubjectImageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC0212F627FC4A080040569F /* SubjectImageCell.xib */; };
+		BC0212FB27FC61D30040569F /* KSSegmentControl.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0212FA27FC61D30040569F /* KSSegmentControl.m */; };
+		BC0212FE27FC66AA0040569F /* InstrumentMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0212FD27FC66AA0040569F /* InstrumentMessageModel.m */; };
+		BC02130127FC6ADD0040569F /* UIView+SubViewExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = BC02130027FC6ADD0040569F /* UIView+SubViewExtension.m */; };
+		BC50171227FC0D5600F8BCBC /* SubjectChooseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */; };
+		BC50171527FC0D8300F8BCBC /* SubjectChooseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */; };
+		BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */; };
 		BCB6345D27F6D29600ACFDCF /* KSLiveChatroomWelcome.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340D27F6D29500ACFDCF /* KSLiveChatroomWelcome.m */; };
 		BCB6345E27F6D29600ACFDCF /* KSLiveChatroomLeave.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340E27F6D29500ACFDCF /* KSLiveChatroomLeave.m */; };
 		BCB6345F27F6D29600ACFDCF /* KSLiveChatroomEnter.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB6340F27F6D29500ACFDCF /* KSLiveChatroomEnter.m */; };
@@ -734,8 +741,6 @@
 		275FA22827E7356B00CFEA2E /* PasswordBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PasswordBodyView.m; sourceTree = "<group>"; };
 		275FA22927E7356B00CFEA2E /* VefiBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VefiBodyView.m; sourceTree = "<group>"; };
 		275FA22A27E7356B00CFEA2E /* PasswordBodyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PasswordBodyView.xib; sourceTree = "<group>"; };
-		275FA23E27E737EE00CFEA2E /* ChooseInsturmentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChooseInsturmentViewController.h; sourceTree = "<group>"; };
-		275FA23F27E737EE00CFEA2E /* ChooseInsturmentViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ChooseInsturmentViewController.m; sourceTree = "<group>"; };
 		275FA24127E73DF600CFEA2E /* InstrumentDescView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InstrumentDescView.h; sourceTree = "<group>"; };
 		275FA24227E73DF600CFEA2E /* InstrumentDescView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InstrumentDescView.m; sourceTree = "<group>"; };
 		275FA24427E73E0000CFEA2E /* InstrumentDescView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = InstrumentDescView.xib; sourceTree = "<group>"; };
@@ -1159,6 +1164,20 @@
 		27F9033927E87FD500C08A19 /* MineBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MineBodyView.m; sourceTree = "<group>"; };
 		27F9033B27E87FE100C08A19 /* MineBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineBodyView.xib; sourceTree = "<group>"; };
 		63DC852CB04F64963003C553 /* Pods-KulexiuForStudent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KulexiuForStudent.debug.xcconfig"; path = "Target Support Files/Pods-KulexiuForStudent/Pods-KulexiuForStudent.debug.xcconfig"; sourceTree = "<group>"; };
+		BC0212F427FC4A080040569F /* SubjectImageCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectImageCell.h; sourceTree = "<group>"; };
+		BC0212F527FC4A080040569F /* SubjectImageCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubjectImageCell.m; sourceTree = "<group>"; };
+		BC0212F627FC4A080040569F /* SubjectImageCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SubjectImageCell.xib; sourceTree = "<group>"; };
+		BC0212F927FC61D30040569F /* KSSegmentControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSSegmentControl.h; sourceTree = "<group>"; };
+		BC0212FA27FC61D30040569F /* KSSegmentControl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSSegmentControl.m; sourceTree = "<group>"; };
+		BC0212FC27FC66AA0040569F /* InstrumentMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstrumentMessageModel.h; sourceTree = "<group>"; };
+		BC0212FD27FC66AA0040569F /* InstrumentMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstrumentMessageModel.m; sourceTree = "<group>"; };
+		BC0212FF27FC6ADD0040569F /* UIView+SubViewExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SubViewExtension.h"; sourceTree = "<group>"; };
+		BC02130027FC6ADD0040569F /* UIView+SubViewExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SubViewExtension.m"; sourceTree = "<group>"; };
+		BC50171027FC0D5600F8BCBC /* SubjectChooseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseViewController.h; sourceTree = "<group>"; };
+		BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubjectChooseViewController.m; sourceTree = "<group>"; };
+		BC50171327FC0D8300F8BCBC /* SubjectChooseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseBodyView.h; sourceTree = "<group>"; };
+		BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubjectChooseBodyView.m; sourceTree = "<group>"; };
+		BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SubjectChooseBodyView.xib; sourceTree = "<group>"; };
 		BCB6340C27F6D29500ACFDCF /* KSRCMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSRCMessageModel.h; sourceTree = "<group>"; };
 		BCB6340D27F6D29500ACFDCF /* KSLiveChatroomWelcome.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomWelcome.m; sourceTree = "<group>"; };
 		BCB6340E27F6D29500ACFDCF /* KSLiveChatroomLeave.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomLeave.m; sourceTree = "<group>"; };
@@ -1694,8 +1713,8 @@
 		275FA1F227E7356A00CFEA2E /* Controller */ = {
 			isa = PBXGroup;
 			children = (
-				275FA1F327E7356A00CFEA2E /* HomeViewController.m */,
 				275FA1F427E7356A00CFEA2E /* HomeViewController.h */,
+				275FA1F327E7356A00CFEA2E /* HomeViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -1913,8 +1932,8 @@
 				275FA21127E7356B00CFEA2E /* PasswordLoginController.m */,
 				275FA21827E7356B00CFEA2E /* VefiCodeLoginController.h */,
 				275FA21427E7356B00CFEA2E /* VefiCodeLoginController.m */,
-				275FA23E27E737EE00CFEA2E /* ChooseInsturmentViewController.h */,
-				275FA23F27E737EE00CFEA2E /* ChooseInsturmentViewController.m */,
+				BC50171027FC0D5600F8BCBC /* SubjectChooseViewController.h */,
+				BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -1922,6 +1941,8 @@
 		275FA21927E7356B00CFEA2E /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				BC0212FC27FC66AA0040569F /* InstrumentMessageModel.h */,
+				BC0212FD27FC66AA0040569F /* InstrumentMessageModel.m */,
 				275FA21D27E7356B00CFEA2E /* UserInfo.h */,
 				275FA21A27E7356B00CFEA2E /* UserInfo.m */,
 				275FA21B27E7356B00CFEA2E /* UserInfoManager.h */,
@@ -1951,6 +1972,14 @@
 				275FA24627E7428200CFEA2E /* InstrumentChooseView.h */,
 				275FA24727E7428200CFEA2E /* InstrumentChooseView.m */,
 				275FA24927E7428D00CFEA2E /* InstrumentChooseView.xib */,
+				BC50171327FC0D8300F8BCBC /* SubjectChooseBodyView.h */,
+				BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */,
+				BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */,
+				BC0212F927FC61D30040569F /* KSSegmentControl.h */,
+				BC0212FA27FC61D30040569F /* KSSegmentControl.m */,
+				BC0212F427FC4A080040569F /* SubjectImageCell.h */,
+				BC0212F527FC4A080040569F /* SubjectImageCell.m */,
+				BC0212F627FC4A080040569F /* SubjectImageCell.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -2022,67 +2051,69 @@
 		2779337627E3249C0010E277 /* Extension */ = {
 			isa = PBXGroup;
 			children = (
-				2779337727E3249C0010E277 /* NSObject+AssociatedObject.m */,
-				2779337827E3249C0010E277 /* UIView+Hints.h */,
-				2779337927E3249C0010E277 /* UIControl+ButtonAction.m */,
-				2779337A27E3249D0010E277 /* UIDevice+zhDeviceType.m */,
-				2779337B27E3249D0010E277 /* NSString+zh_SafeAccess.m */,
-				2779337C27E3249D0010E277 /* NSDictionary+Extension.h */,
-				2779337D27E3249D0010E277 /* UIViewController+zhStatusBarStyle.m */,
-				2779337E27E3249D0010E277 /* UITextView+ZWPlaceHolder.m */,
-				2779337F27E3249D0010E277 /* NSString+CZHSizeExtension.h */,
+				BC0212FF27FC6ADD0040569F /* UIView+SubViewExtension.h */,
+				BC02130027FC6ADD0040569F /* UIView+SubViewExtension.m */,
+				277933A827E3249D0010E277 /* CALayer+Color.h */,
 				2779338027E3249D0010E277 /* CALayer+Color.m */,
+				2779338C27E3249D0010E277 /* CALayer+Layout.h */,
+				277933AD27E3249E0010E277 /* CALayer+Layout.m */,
+				277933A127E3249D0010E277 /* KSUtilities.h */,
+				2779338727E3249D0010E277 /* KSUtilities.m */,
+				277933B527E3249E0010E277 /* NSArray+zh_SafeAccess.h */,
+				2779339127E3249D0010E277 /* NSArray+zh_SafeAccess.m */,
+				2779338627E3249D0010E277 /* NSDate+Extension.h */,
+				277933A327E3249D0010E277 /* NSDate+Extension.m */,
 				2779338127E3249D0010E277 /* NSDate+Transform.h */,
+				277933A627E3249D0010E277 /* NSDate+Transform.m */,
+				2779337C27E3249D0010E277 /* NSDictionary+Extension.h */,
+				2779339A27E3249D0010E277 /* NSDictionary+Extension.m */,
+				277933A727E3249D0010E277 /* NSMutableAttributedString+CZHExtention.h */,
 				2779338227E3249D0010E277 /* NSMutableAttributedString+CZHExtention.m */,
+				277933A027E3249D0010E277 /* NSObject+AssociatedObject.h */,
+				2779337727E3249C0010E277 /* NSObject+AssociatedObject.m */,
+				277933B027E3249E0010E277 /* NSObject+Parse.h */,
+				2779339527E3249D0010E277 /* NSObject+Parse.m */,
+				2779338D27E3249D0010E277 /* NSObject+ReadDocument.h */,
+				277933AC27E3249E0010E277 /* NSObject+ReadDocument.m */,
+				2779337F27E3249D0010E277 /* NSString+CZHSizeExtension.h */,
+				2779339827E3249D0010E277 /* NSString+CZHSizeExtension.m */,
 				2779338327E3249D0010E277 /* NSString+Extension.h */,
-				2779338427E3249D0010E277 /* UITextView+ZWLimitCounter.m */,
-				2779338527E3249D0010E277 /* UILabel+Extension.m */,
-				2779338627E3249D0010E277 /* NSDate+Extension.h */,
-				2779338727E3249D0010E277 /* KSUtilities.m */,
+				277933A527E3249D0010E277 /* NSString+Extension.m */,
+				2779339C27E3249D0010E277 /* NSString+zh_SafeAccess.h */,
+				2779337B27E3249D0010E277 /* NSString+zh_SafeAccess.m */,
 				2779338827E3249D0010E277 /* Pinyin */,
-				2779338B27E3249D0010E277 /* UIImage+Color.h */,
-				2779338C27E3249D0010E277 /* CALayer+Layout.h */,
-				2779338D27E3249D0010E277 /* NSObject+ReadDocument.h */,
+				277933AA27E3249D0010E277 /* UIAlertController+Extend.h */,
 				2779338E27E3249D0010E277 /* UIAlertController+Extend.m */,
-				2779338F27E3249D0010E277 /* UIImageView+CornerRadius.h */,
-				2779339027E3249D0010E277 /* UIScreen+Extend.h */,
-				2779339127E3249D0010E277 /* NSArray+zh_SafeAccess.m */,
+				277933B427E3249E0010E277 /* UIColor+Extend.h */,
 				2779339227E3249D0010E277 /* UIColor+Extend.m */,
-				2779339327E3249D0010E277 /* zhPopupController.m */,
-				2779339427E3249D0010E277 /* UIView+Dealloc.m */,
-				2779339527E3249D0010E277 /* NSObject+Parse.m */,
-				2779339627E3249D0010E277 /* UIView+AddConstraints.m */,
-				2779339727E3249D0010E277 /* UIView+KSExtension.h */,
-				2779339827E3249D0010E277 /* NSString+CZHSizeExtension.m */,
-				2779339927E3249D0010E277 /* UITextView+ZWPlaceHolder.h */,
-				2779339A27E3249D0010E277 /* NSDictionary+Extension.m */,
-				2779339B27E3249D0010E277 /* UIViewController+zhStatusBarStyle.h */,
-				2779339C27E3249D0010E277 /* NSString+zh_SafeAccess.h */,
-				2779339D27E3249D0010E277 /* UIDevice+zhDeviceType.h */,
 				2779339E27E3249D0010E277 /* UIControl+ButtonAction.h */,
-				2779339F27E3249D0010E277 /* UIView+Hints.m */,
-				277933A027E3249D0010E277 /* NSObject+AssociatedObject.h */,
-				277933A127E3249D0010E277 /* KSUtilities.h */,
+				2779337927E3249C0010E277 /* UIControl+ButtonAction.m */,
+				2779339D27E3249D0010E277 /* UIDevice+zhDeviceType.h */,
+				2779337A27E3249D0010E277 /* UIDevice+zhDeviceType.m */,
+				2779338B27E3249D0010E277 /* UIImage+Color.h */,
+				277933AE27E3249E0010E277 /* UIImage+Color.m */,
+				2779338F27E3249D0010E277 /* UIImageView+CornerRadius.h */,
+				277933AB27E3249D0010E277 /* UIImageView+CornerRadius.m */,
 				277933A227E3249D0010E277 /* UILabel+Extension.h */,
-				277933A327E3249D0010E277 /* NSDate+Extension.m */,
-				277933A427E3249D0010E277 /* UITextView+ZWLimitCounter.h */,
-				277933A527E3249D0010E277 /* NSString+Extension.m */,
-				277933A627E3249D0010E277 /* NSDate+Transform.m */,
-				277933A727E3249D0010E277 /* NSMutableAttributedString+CZHExtention.h */,
-				277933A827E3249D0010E277 /* CALayer+Color.h */,
+				2779338527E3249D0010E277 /* UILabel+Extension.m */,
+				2779339027E3249D0010E277 /* UIScreen+Extend.h */,
 				277933A927E3249D0010E277 /* UIScreen+Extend.m */,
-				277933AA27E3249D0010E277 /* UIAlertController+Extend.h */,
-				277933AB27E3249D0010E277 /* UIImageView+CornerRadius.m */,
-				277933AC27E3249E0010E277 /* NSObject+ReadDocument.m */,
-				277933AD27E3249E0010E277 /* CALayer+Layout.m */,
-				277933AE27E3249E0010E277 /* UIImage+Color.m */,
-				277933AF27E3249E0010E277 /* UIView+KSExtension.m */,
-				277933B027E3249E0010E277 /* NSObject+Parse.h */,
+				277933A427E3249D0010E277 /* UITextView+ZWLimitCounter.h */,
+				2779338427E3249D0010E277 /* UITextView+ZWLimitCounter.m */,
+				2779339927E3249D0010E277 /* UITextView+ZWPlaceHolder.h */,
+				2779337E27E3249D0010E277 /* UITextView+ZWPlaceHolder.m */,
 				277933B127E3249E0010E277 /* UIView+AddConstraints.h */,
+				2779339627E3249D0010E277 /* UIView+AddConstraints.m */,
 				277933B227E3249E0010E277 /* UIView+Dealloc.h */,
+				2779339427E3249D0010E277 /* UIView+Dealloc.m */,
+				2779337827E3249C0010E277 /* UIView+Hints.h */,
+				2779339F27E3249D0010E277 /* UIView+Hints.m */,
+				2779339727E3249D0010E277 /* UIView+KSExtension.h */,
+				277933AF27E3249E0010E277 /* UIView+KSExtension.m */,
+				2779339B27E3249D0010E277 /* UIViewController+zhStatusBarStyle.h */,
+				2779337D27E3249D0010E277 /* UIViewController+zhStatusBarStyle.m */,
 				277933B327E3249E0010E277 /* zhPopupController.h */,
-				277933B427E3249E0010E277 /* UIColor+Extend.h */,
-				277933B527E3249E0010E277 /* NSArray+zh_SafeAccess.h */,
+				2779339327E3249D0010E277 /* zhPopupController.m */,
 			);
 			path = Extension;
 			sourceTree = "<group>";
@@ -2560,20 +2591,20 @@
 		277934E127E324A30010E277 /* SDCycleScrollView */ = {
 			isa = PBXGroup;
 			children = (
+				277934EE27E324A30010E277 /* PageControl */,
+				277934EC27E324A30010E277 /* QWdynamicModel.h */,
 				277934E227E324A30010E277 /* QWdynamicModel.m */,
-				277934E327E324A30010E277 /* UIView+SDExtension.h */,
-				277934E427E324A30010E277 /* SDQWMaskCustomModel.h */,
-				277934E527E324A30010E277 /* SDCycleScrollView.h */,
 				277934E627E324A30010E277 /* SDCollectionViewCell.h */,
-				277934E727E324A30010E277 /* SDQWMaskCustomView.xib */,
-				277934E827E324A30010E277 /* SDQWMaskCustomView.h */,
+				277934ED27E324A30010E277 /* SDCollectionViewCell.m */,
+				277934E527E324A30010E277 /* SDCycleScrollView.h */,
 				277934E927E324A30010E277 /* SDCycleScrollView.m */,
-				277934EA27E324A30010E277 /* UIView+SDExtension.m */,
+				277934E427E324A30010E277 /* SDQWMaskCustomModel.h */,
 				277934EB27E324A30010E277 /* SDQWMaskCustomModel.m */,
-				277934EC27E324A30010E277 /* QWdynamicModel.h */,
-				277934ED27E324A30010E277 /* SDCollectionViewCell.m */,
-				277934EE27E324A30010E277 /* PageControl */,
+				277934E827E324A30010E277 /* SDQWMaskCustomView.h */,
 				277934F727E324A30010E277 /* SDQWMaskCustomView.m */,
+				277934E727E324A30010E277 /* SDQWMaskCustomView.xib */,
+				277934E327E324A30010E277 /* UIView+SDExtension.h */,
+				277934EA27E324A30010E277 /* UIView+SDExtension.m */,
 			);
 			path = SDCycleScrollView;
 			sourceTree = "<group>";
@@ -2582,13 +2613,13 @@
 			isa = PBXGroup;
 			children = (
 				277934EF27E324A30010E277 /* TAAbstractDotView.h */,
-				277934F027E324A30010E277 /* TADotView.m */,
-				277934F127E324A30010E277 /* TAPageControl.m */,
-				277934F227E324A30010E277 /* TAAnimatedDotView.m */,
 				277934F327E324A30010E277 /* TAAbstractDotView.m */,
-				277934F427E324A30010E277 /* TADotView.h */,
 				277934F527E324A30010E277 /* TAAnimatedDotView.h */,
+				277934F227E324A30010E277 /* TAAnimatedDotView.m */,
+				277934F427E324A30010E277 /* TADotView.h */,
+				277934F027E324A30010E277 /* TADotView.m */,
 				277934F627E324A30010E277 /* TAPageControl.h */,
+				277934F127E324A30010E277 /* TAPageControl.m */,
 			);
 			path = PageControl;
 			sourceTree = "<group>";
@@ -2930,13 +2961,13 @@
 		BCB6348727F6D2A200ACFDCF /* SealClass */ = {
 			isa = PBXGroup;
 			children = (
+				BCB634F727F6D2A300ACFDCF /* class_stop.mp3 */,
 				BCB6348827F6D2A200ACFDCF /* KSRemoteUserManager.h */,
+				BCB634F827F6D2A300ACFDCF /* KSRemoteUserManager.m */,
 				BCB6348927F6D2A200ACFDCF /* SealClass.strings */,
 				BCB6348B27F6D2A200ACFDCF /* Sections */,
-				BCB634E627F6D2A300ACFDCF /* Util */,
-				BCB634F727F6D2A300ACFDCF /* class_stop.mp3 */,
-				BCB634F827F6D2A300ACFDCF /* KSRemoteUserManager.m */,
 				BCB634F927F6D2A300ACFDCF /* Services */,
+				BCB634E627F6D2A300ACFDCF /* Util */,
 			);
 			path = SealClass;
 			sourceTree = "<group>";
@@ -3570,9 +3601,11 @@
 				2723B66F27F15CFC00E0B90B /* AboutUsBodyView.xib in Resources */,
 				275FA23827E7356B00CFEA2E /* FirstSettingBodyView.xib in Resources */,
 				2723B63927F157D500E0B90B /* GroupMemberListCell.xib in Resources */,
+				BC0212F827FC4A080040569F /* SubjectImageCell.xib in Resources */,
 				2723B66E27F15CFC00E0B90B /* PhoneCheckBodyView.xib in Resources */,
 				2723B5C527F157B100E0B90B /* ContractListCell.xib in Resources */,
 				27F9033727E87C8B00C08A19 /* MineNavView.xib in Resources */,
+				BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */,
 				BCB6359D27F6D2AB00ACFDCF /* tock.wav in Resources */,
 				275E8AB327E18F8800DD3F6E /* Main.storyboard in Resources */,
 				277935B127E324A90010E277 /* mss_browseLoading@2x.png in Resources */,
@@ -3749,6 +3782,7 @@
 				2779357B27E324A70010E277 /* ShopButton.m in Sources */,
 				2723B61E27F157D500E0B90B /* GroupNoticeEditController.m in Sources */,
 				BCB6346427F6D29600ACFDCF /* KSLiveChatroomSeatApply.m in Sources */,
+				BC0212FE27FC66AA0040569F /* InstrumentMessageModel.m in Sources */,
 				BCB6359F27F6D2AB00ACFDCF /* ClassTitleView.m in Sources */,
 				277935AC27E324A80010E277 /* MSSBrowseBaseViewController.m in Sources */,
 				2779352427E324A60010E277 /* KSUtilities.m in Sources */,
@@ -3783,6 +3817,7 @@
 				BCB6353727F6D2A300ACFDCF /* TextMessageCell.m in Sources */,
 				BCB6346A27F6D29600ACFDCF /* LiveVideoRoomViewController.m in Sources */,
 				BCB6357227F6D2A300ACFDCF /* KSIMService.m in Sources */,
+				BC50171227FC0D5600F8BCBC /* SubjectChooseViewController.m in Sources */,
 				2779359727E324A80010E277 /* TZVideoPlayerController.m in Sources */,
 				275FA22E27E7356B00CFEA2E /* MineViewController.m in Sources */,
 				2779354627E324A60010E277 /* UIView+Animation.m in Sources */,
@@ -3834,6 +3869,7 @@
 				BCB6346F27F6D29600ACFDCF /* LiveroomTimeManager.m in Sources */,
 				2779359C27E324A80010E277 /* TZProgressView.m in Sources */,
 				27F9033627E87C8B00C08A19 /* MineNavView.m in Sources */,
+				BC50171527FC0D8300F8BCBC /* SubjectChooseBodyView.m in Sources */,
 				2723B62727F157D500E0B90B /* GroupMemberViewController.m in Sources */,
 				2779353727E324A60010E277 /* UIImage+Color.m in Sources */,
 				2779353127E324A60010E277 /* NSString+Extension.m in Sources */,
@@ -3903,6 +3939,7 @@
 				BCB6357027F6D2A300ACFDCF /* ClassroomService.m in Sources */,
 				BCB6359A27F6D2AB00ACFDCF /* ClassVideoListView.m in Sources */,
 				2723B61D27F157D500E0B90B /* GroupNoticeViewController.m in Sources */,
+				BC0212F727FC4A080040569F /* SubjectImageCell.m in Sources */,
 				277935D027E324A90010E277 /* ALCalendarDate.m in Sources */,
 				2723B64427F15B5900E0B90B /* SCIndexViewConfiguration.m in Sources */,
 				2779358527E324A80010E277 /* LLFileManager.m in Sources */,
@@ -3915,6 +3952,7 @@
 				2723B66727F15CFC00E0B90B /* ModifyBodyView.m in Sources */,
 				2779357727E324A70010E277 /* GRScanManager.m in Sources */,
 				277935D527E324A90010E277 /* ALCalendarManager.m in Sources */,
+				BC02130127FC6ADD0040569F /* UIView+SubViewExtension.m in Sources */,
 				2779351927E324A60010E277 /* NSMutableString+KSSafe.m in Sources */,
 				2723B5BC27F157B100E0B90B /* GroupCreateView.m in Sources */,
 				BCB6346927F6D29600ACFDCF /* KSLiveChatroomSeatResponse.m in Sources */,
@@ -3973,6 +4011,7 @@
 				2723B68027F15D3D00E0B90B /* FeedbackViewController.m in Sources */,
 				275FA1ED27E7351900CFEA2E /* KSUpdateManager.m in Sources */,
 				BCB6355727F6D2A300ACFDCF /* HTTPResult.m in Sources */,
+				BC0212FB27FC61D30040569F /* KSSegmentControl.m in Sources */,
 				277935B227E324A90010E277 /* UIView+MSSLayout.m in Sources */,
 				275FA1E427E7351900CFEA2E /* KSWebNavView.m in Sources */,
 				2779356D27E324A70010E277 /* StoreShopCaterview.m in Sources */,
@@ -4105,7 +4144,6 @@
 				2723B5A327F1578300E0B90B /* KSChatListViewController.m in Sources */,
 				2723B68427F15D3D00E0B90B /* AddressViewController.m in Sources */,
 				2779357527E324A70010E277 /* LifeButton.m in Sources */,
-				275FA24027E737EE00CFEA2E /* ChooseInsturmentViewController.m in Sources */,
 				27F9032C27E87C2E00C08A19 /* KSNetworkAlert.m in Sources */,
 				2779353627E324A60010E277 /* CALayer+Layout.m in Sources */,
 				275FA22D27E7356B00CFEA2E /* ChatViewController.m in Sources */,

+ 1 - 1
KulexiuForStudent/KulexiuForStudent.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>KulexiuForStudent.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>10</integer>
+			<integer>30</integer>
 		</dict>
 	</dict>
 </dict>

+ 8 - 0
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-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>PreviewsEnabled</key>
+	<false/>
+</dict>
+</plist>

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


+ 18 - 0
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/WorkspaceSettings.xcsettings

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-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>BuildLocationStyle</key>
+	<string>UseTargetSettings</string>
+	<key>CustomBuildLocationType</key>
+	<string>RelativeToDerivedData</string>
+	<key>DerivedDataLocationStyle</key>
+	<string>Default</string>
+	<key>IssueFilterStyle</key>
+	<string>ShowActiveSchemeOnly</string>
+	<key>LiveSourceIssuesEnabled</key>
+	<true/>
+	<key>ShowSharedSchemesAutomaticallyEnabled</key>
+	<true/>
+</dict>
+</plist>

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

@@ -36,5 +36,85 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "A5F58A37-0D04-46EB-A22F-2FFDF889273B"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "111"
+            endingLineNumber = "111"
+            landmarkName = "-refreshView"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "7075D7CE-9DE4-463D-B78D-2D32E9403498"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Login/View/KSSegmentControl.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "152"
+            endingLineNumber = "152"
+            landmarkName = "-segmentChooseAction:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "ACD1C344-D74A-46FF-8F91-066759AB1E82"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Login/View/KSSegmentControl.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "158"
+            endingLineNumber = "158"
+            landmarkName = "-segmentChooseAction:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "622D233D-2E42-4941-9752-F264E274B5DB"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Login/View/KSSegmentControl.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "139"
+            endingLineNumber = "139"
+            landmarkName = "-setLastChooseIndex:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "6E39DF7A-56DB-45A4-AD11-AD3397AAB6F5"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "181"
+            endingLineNumber = "181"
+            landmarkName = "-cycleScrollViewDidScroll:progress:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 21 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img1.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img1.imageset/img1.png


+ 21 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img2.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img2.imageset/img2.png


+ 21 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img3.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img3.imageset/img3.png


+ 21 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img4.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/img4.imageset/img4.png


+ 8 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h

@@ -204,7 +204,7 @@ NS_ASSUME_NONNULL_BEGIN
  */
 + (void)queryUserInfo:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
-// /api-student/Student/queryUserInfo
+// /api-student/student/queryUserInfo
 
 /// 查询学生信息
 /// @param get get
@@ -221,6 +221,13 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)modifyUserMessage:(NSString *)post avatal:(NSString *)avatal gender:(NSString *)gender username:(NSString *)username success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-student/subject/queryPageTree
+
+/// 声部信息查询 (树状列表)
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)subjectQueryPageTree:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
 #pragma mark -------- 群组服务
 // /api-student/imUserFriend/queryAll

+ 14 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m

@@ -516,6 +516,19 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
+// /api-student/subject/queryPageTree
+
+/// 声部信息查询 (树状列表)
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)subjectQueryPageTree:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/subject/queryPageTree"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@"1" forKey:@"page"];
+    [parm setValue:@"200" forKey:@"rows"];
+    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+}
 #pragma mark ---- 验证码服务
 
 // /api-student/code/sendSms
@@ -578,7 +591,7 @@
 /// @param success 成功
 /// @param faliure 失败
 + (void)queryStudentInfoRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
-    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-student/Student/queryUserInfo"];
+    NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-student/student/queryUserInfo"];
     NSMutableDictionary *parm = [NSMutableDictionary dictionary];
     [self request:get andWithUrl:url and:parm success:success faliure:faliure];
 }

+ 2 - 0
KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch

@@ -31,6 +31,8 @@
 #import "KSGifRefreshHeader.h"
 #import "KSGifRefreshFooter.h"
 
+#import "UIView+SubViewExtension.h"
+
 // 加密使用 NSString+MD5
 #define DEFAULT_SALT (@"D5sIlPU2")
 #define APPSECRET (@"QuMCIKICAgIH0sCiAgICAicGxhdGZvcm0tZGV2IjogW10")

+ 8 - 0
KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCollectionViewCell.h

@@ -28,7 +28,13 @@
  
  */
 
+#define MaxWidth (SDScreen_Width - 66 * 2)
+#define MinWidth (MaxWidth - 23*2)
+#define MaxHeight SDScreen_Width
+#define MinHeight (MinWidth - 23*2)
 
+#define SDScreen_Width [[UIScreen mainScreen] bounds].size.width
+#define SDScreen_Height [[UIScreen mainScreen] bounds].size.height
 
 #import <UIKit/UIKit.h>
 #import "SDQWMaskCustomView.h"
@@ -51,4 +57,6 @@
 /** 只展示文字轮播 */
 @property (nonatomic, assign) BOOL onlyDisplayText;
 
+@property (assign, nonatomic) BOOL zoomType;
+
 @end

+ 3 - 1
KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCollectionViewCell.m

@@ -108,7 +108,9 @@
     if (self.onlyDisplayText) {
         _titleLabel.frame = self.bounds;
     } else {
-        _imageView.frame = self.bounds;
+        if (!self.zoomType) {
+            _imageView.frame = self.bounds;
+        }
         CGFloat titleLabelW = self.sd_width;
         CGFloat titleLabelH = _titleLabelHeight;
         CGFloat titleLabelX = 0;

+ 1 - 0
KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCycleScrollView.h

@@ -178,6 +178,7 @@ typedef enum {
 /** 轮播文字label高度 */
 @property (nonatomic, assign) CGFloat titleLabelHeight;
 
+@property (assign, nonatomic) BOOL zoomType;
 
 
 //////////////////////  清除缓存接口  //////////////////////

+ 92 - 4
KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDCycleScrollView.m

@@ -45,6 +45,12 @@
 
 NSString * const ID = @"cycleCell";
 
+typedef NS_ENUM(NSInteger, DragDirection) {
+    DragDirectionNone,
+    DragDirectionLeft,
+    DragDirectionRight,
+};
+
 @interface SDCycleScrollView () <UICollectionViewDataSource, UICollectionViewDelegate>
 
 
@@ -57,6 +63,10 @@ NSString * const ID = @"cycleCell";
 
 @property (nonatomic, strong) UIImageView *backgroundImageView; // 当imageURLs为空时的背景图
 
+@property (assign, nonatomic) CGFloat contentOffsetX;  // collectionView偏移量
+@property (assign, nonatomic) DragDirection dragDirection;  // 拖动方向
+@property (assign, nonatomic) BOOL isDragging;  // 是否处于被拖动状态
+
 @end
 
 @implementation SDCycleScrollView
@@ -119,9 +129,8 @@ NSString * const ID = @"cycleCell";
     _pageDotColor = [UIColor lightGrayColor];
     _bannerImageViewContentMode = UIViewContentModeScaleToFill;
     
-//    self.backgroundColor = [UIColor lightGrayColor];
-    self.backgroundColor = [UIColor whiteColor]; 
-    
+    self.backgroundColor = [UIColor clearColor];
+    self.contentOffsetX = 0;
 }
 
 + (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageNamesGroup:(NSArray *)imageNamesGroup
@@ -486,6 +495,14 @@ NSString * const ID = @"cycleCell";
     int index = 0;
     if (_flowLayout.scrollDirection == UICollectionViewScrollDirectionHorizontal) {
         index = (_mainView.contentOffset.x + _flowLayout.itemSize.width * 0.5) / _flowLayout.itemSize.width;
+        float interval;
+        if (self.dragDirection == DragDirectionNone) {
+            interval = _flowLayout.itemSize.width * 0.5;
+        } else if (self.dragDirection == DragDirectionLeft) {
+            interval = _flowLayout.itemSize.width * 0.8;
+        } else {
+            interval = _flowLayout.itemSize.width * 0.2;
+        }
     } else {
         index = (_mainView.contentOffset.y + _flowLayout.itemSize.height * 0.5) / _flowLayout.itemSize.height;
     }
@@ -513,8 +530,13 @@ NSString * const ID = @"cycleCell";
 - (void)layoutSubviews
 {
     [super layoutSubviews];
+    if (!self.zoomType) {
+        _flowLayout.itemSize = self.frame.size;
+    }
+    else {
+        _flowLayout.itemSize = CGSizeMake(MaxWidth, MaxHeight);
+    }
     
-    _flowLayout.itemSize = self.frame.size;
     
     _mainView.frame = self.bounds;
     if (_mainView.contentOffset.x == 0 &&  _totalItemsCount) {
@@ -647,6 +669,16 @@ NSString * const ID = @"cycleCell";
             cell.imageView.contentMode = self.bannerImageViewContentMode;
             cell.clipsToBounds = YES;
             cell.onlyDisplayText = self.onlyDisplayText;
+            cell.zoomType = self.zoomType;
+        }
+        if (self.zoomType) {
+            if ([self currentIndex] == indexPath.item) {
+                cell.imageView.frame = CGRectMake(0, 0, MaxWidth, MaxHeight);
+            } else {
+                cell.imageView.frame = CGRectMake(0, 0, MinWidth, MinHeight);
+            }
+            
+            cell.imageView.center = cell.contentView.center;
         }
     }
     
@@ -681,10 +713,57 @@ NSString * const ID = @"cycleCell";
         UIPageControl *pageControl = (UIPageControl *)_pageControl;
         pageControl.currentPage = indexOnPageControl;
     }
+    
+    // 图片缩放
+    if (self.zoomType) {
+        SDCollectionViewCell *lastCell = (SDCollectionViewCell *)[self.mainView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:itemIndex - 1 inSection:0]];
+        SDCollectionViewCell *currentCell = (SDCollectionViewCell *)[self.mainView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:itemIndex inSection:0]];
+        SDCollectionViewCell *nextCell = (SDCollectionViewCell *)[self.mainView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:itemIndex + 1 inSection:0]];
+        
+        // 当前cell的偏移比例
+        CGFloat scale = (fabs(self.flowLayout.itemSize.width * itemIndex - (self.mainView.contentOffset.x + (SDScreen_Width - self.flowLayout.itemSize.width)/2)))/self.flowLayout.itemSize.width;
+        
+        currentCell.imageView.frame = CGRectMake(0, 0, MaxWidth - scale * (MaxWidth - MinWidth), MaxHeight - scale * (MaxHeight - MinHeight));
+
+        if (self.mainView.contentOffset.x > self.contentOffsetX) {
+            // 向左滚动
+            if (self.isDragging) {
+                self.dragDirection = 1;
+            }
+            
+            if (self.flowLayout.itemSize.width * itemIndex < self.mainView.contentOffset.x + (SDScreen_Width - self.flowLayout.itemSize.width)/2) {
+                // 当前页图片缩小,下一页图片放大
+                nextCell.imageView.frame = CGRectMake(0, 0, MinWidth + scale * (MaxWidth - MinWidth), MinHeight + scale * (MaxHeight - MinHeight));
+            } else {
+                // 当前页图片放大,前一页图片缩小
+                lastCell.imageView.frame = CGRectMake(0, 0, MaxWidth - (1 - scale) * (MaxWidth - MinWidth), MaxHeight - (1 - scale) * (MaxHeight - MinHeight));
+            }
+        } else {
+            // 向右滚动
+            if (self.isDragging) {
+                self.dragDirection = 2;
+            }
+            
+            if (self.flowLayout.itemSize.width * itemIndex < self.mainView.contentOffset.x + (SDScreen_Width - self.flowLayout.itemSize.width)/2) {
+                // 当前页图片放大,下一页图片缩小
+                nextCell.imageView.frame = CGRectMake(0, 0, MinWidth + scale * (MaxWidth - MinWidth), MinHeight + scale * (MaxHeight - MinHeight));
+            } else {
+                // 当前页图片缩小,前一页图片放大
+                lastCell.imageView.frame = CGRectMake(0, 0, MaxWidth - (1 - scale) * (MaxWidth - MinWidth), MaxHeight - (1 - scale) * (MaxHeight - MinHeight));
+            }
+        }
+        
+        currentCell.imageView.center = currentCell.contentView.center;
+        nextCell.imageView.center = nextCell.contentView.center;
+        lastCell.imageView.center = lastCell.contentView.center;
+        
+        self.contentOffsetX = self.mainView.contentOffset.x;
+    }
 }
 
 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 {
+    self.isDragging = YES;
     if (self.autoScroll) {
         [self invalidateTimer];
     }
@@ -692,6 +771,12 @@ NSString * const ID = @"cycleCell";
 
 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
 {
+    if (self.zoomType) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            int index = [self currentIndex];
+            [self scrollToIndex:index];
+        });
+    }
     if (self.autoScroll) {
         [self setupTimer];
     }
@@ -704,6 +789,7 @@ NSString * const ID = @"cycleCell";
 
 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
 {
+    self.contentOffsetX = self.mainView.contentOffset.x;
     if (!self.imagePathsGroup.count) return; // 解决清除timer时偶尔会出现的问题
     int itemIndex = [self currentIndex];
     int indexOnPageControl = [self pageControlIndexWithCurrentCellIndex:itemIndex];
@@ -713,6 +799,8 @@ NSString * const ID = @"cycleCell";
     } else if (self.itemDidScrollOperationBlock) {
         self.itemDidScrollOperationBlock(indexOnPageControl);
     }
+    self.isDragging = NO;
+    self.dragDirection = DragDirectionNone;
 }
 
 - (void)setScrollEnable:(BOOL)scrollEnabled {

+ 3 - 5
KulexiuForStudent/KulexiuForStudent/Common/ThirdPart/SDCycleScrollView/SDQWMaskCustomView.xib

@@ -1,11 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
-    <device id="retina4_7" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/UIView+SubViewExtension.h

@@ -0,0 +1,18 @@
+//
+//  UIView+SubViewExtension.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIView (SubViewExtension)
+
+- (void)removeAllSubViews;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/UIView+SubViewExtension.m

@@ -0,0 +1,18 @@
+//
+//  UIView+SubViewExtension.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "UIView+SubViewExtension.h"
+
+@implementation UIView (SubViewExtension)
+
+- (void)removeAllSubViews {
+    while (self.subviews.count) {
+        [self.subviews.lastObject removeFromSuperview];
+    }
+}
+
+@end

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

@@ -6,6 +6,7 @@
 //
 
 #import "HomeViewController.h"
+#import "SubjectChooseViewController.h"
 
 @interface HomeViewController ()
 
@@ -16,6 +17,22 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
+    [self requstSubject];
+}
+
+- (void)requstSubject {
+    [KSNetworkingManager subjectQueryPageTree:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200) {
+            [self showInstrumentView];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)showInstrumentView {
+    SubjectChooseViewController *ctrl = [[SubjectChooseViewController alloc] init];
+    [self.navigationController pushViewController:ctrl animated:YES];
 }
 
 /*

+ 0 - 19
KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/ChooseInsturmentViewController.h

@@ -1,19 +0,0 @@
-//
-//  ChooseInsturmentViewController.h
-//  KulexiuForStudent
-//
-//  Created by Kyle on 2022/3/20.
-//
-
-#import "KSBaseViewController.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// 乐器选择
-@interface ChooseInsturmentViewController : KSBaseViewController
-
-
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 31
KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/ChooseInsturmentViewController.m

@@ -1,31 +0,0 @@
-//
-//  ChooseInsturmentViewController.m
-//  KulexiuForStudent
-//
-//  Created by Kyle on 2022/3/20.
-//
-
-#import "ChooseInsturmentViewController.h"
-
-@interface ChooseInsturmentViewController ()
-
-@end
-
-@implementation ChooseInsturmentViewController
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    // Do any additional setup after loading the view.
-}
-
-/*
-#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
KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.h

@@ -0,0 +1,17 @@
+//
+//  SubjectChooseViewController.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// 声部选择
+@interface SubjectChooseViewController : KSBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 250 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/SubjectChooseViewController.m

@@ -0,0 +1,250 @@
+//
+//  SubjectChooseViewController.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import "SubjectChooseViewController.h"
+#import "SubjectChooseBodyView.h"
+#import "DZNSegmentedControl.h"
+#import <ZKCycleScrollView.h>
+#import <CHIPageControl/CHIPageControl-Swift.h>
+#import "SubjectImageCell.h"
+#import "InstrumentMessageModel.h"
+#import "KSSegmentControl.h"
+
+@interface SubjectChooseViewController ()<ZKCycleScrollViewDelegate,ZKCycleScrollViewDataSource,KSSegmentControlDelegate>
+
+@property (nonatomic, strong) ZKCycleScrollView *imageCycle;
+
+@property (nonatomic, strong) CHIPageControlJaloro *pageControl;
+
+@property (nonatomic, strong) SubjectChooseBodyView *bodyView;
+
+@property (nonatomic, strong) NSMutableArray *imageArray;
+
+@property (nonatomic, strong) NSMutableArray *parentArray;
+
+@property (nonatomic, strong) NSMutableArray *instrumentArray;
+
+@property (nonatomic, assign) NSInteger chooseIndex;
+
+@property (nonatomic, strong) KSSegmentControl *segCtrl;
+
+@end
+
+@implementation SubjectChooseViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"乐器选择"];
+    [self configUI];
+    [self requestSubjectMessage];
+}
+
+- (void)requestSubjectMessage {
+    [self showhud];
+    [KSNetworkingManager subjectQueryPageTree:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        [self removehub];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            [self evaluateSource:[[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"]];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        [self removehub];
+    }];
+}
+
+- (void)evaluateSource:(NSArray *)sourceArray {
+    @autoreleasepool {
+        NSMutableArray *valueArray = [sourceArray mutableCopy];
+        
+        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+            NSMutableArray *parentNodeArray = [NSMutableArray array];
+            NSMutableArray *instrumentArray = [NSMutableArray array];
+            for (NSInteger i = 0; i < valueArray.count; i++) {
+                NSMutableDictionary *parentNodeDic = [NSMutableDictionary dictionary];
+                NSDictionary *parm = valueArray[i];
+                [parentNodeDic setValue:[parm stringValueForKey:@"id"] forKey:@"subjectId"];
+                [parentNodeDic setValue:[parm stringValueForKey:@"name"] forKey:@"subjectName"];
+                
+                NSArray *subjects = [parm arrayValueForKey:@"subjects"];
+                if (subjects.count > 0) { // 存在子节点,才添加父节点
+                    // 添加父节点分类
+                    [parentNodeArray addObject:parentNodeDic];
+                    
+                    NSMutableArray *subjectModelArray = [NSMutableArray array];
+                    for (NSDictionary *dic in subjects) {
+                        InstrumentMessageModel *model = [[InstrumentMessageModel alloc] initWithDictionary:dic];
+                        [subjectModelArray addObject:model];
+                    }
+                    [instrumentArray addObject:subjectModelArray];
+                }
+                
+                self.parentArray = [NSMutableArray arrayWithArray:parentNodeArray];
+                self.instrumentArray = [NSMutableArray arrayWithArray:instrumentArray];
+                dispatch_main_async_safe(^{
+                    [self resetChooseStatus];
+                    [self refreshView];
+                });
+            }
+
+        });
+    };
+}
+
+- (void)resetChooseStatus {
+    self.chooseIndex = 0;
+}
+// 刷新页面
+- (void)refreshView {
+    
+    NSMutableArray *titleArray = [NSMutableArray array];
+    for (NSDictionary *parm in self.parentArray) {
+        [titleArray addObject:[parm stringValueForKey:@"subjectName"]];
+    }
+    [self.segCtrl configWithArray:titleArray];
+    NSMutableArray *sourceArray = self.instrumentArray[self.chooseIndex];
+    self.imageArray = sourceArray;
+    [self.imageCycle scrollToItemAtIndex:0 animated:YES];
+    [self.imageCycle reloadData];
+    [self refreshBottomView:0];
+}
+
+- (void)refreshBottomView:(NSInteger)index {
+    InstrumentMessageModel *model = self.imageArray[index];
+    self.bodyView.subjectName.text = [NSString returnNoNullStringWithString:model.name];
+    self.bodyView.subjectDesc.text = [NSString returnNoNullStringWithString:model.desc];
+    [self.bodyView.sureButton setTitle:[NSString stringWithFormat:@"开启%@学习之路",model.name] forState:UIControlStateNormal];
+}
+
+- (void)configUI {
+    [self.view addSubview:self.segCtrl];
+    [self.segCtrl mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.view);
+        make.height.mas_equalTo(60);
+    }];
+    
+    [self.view addSubview:self.bodyView];
+    [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.segCtrl.mas_bottom);
+        make.bottom.mas_equalTo(self.view.mas_bottom);
+    }];
+    [self.bodyView.chooseView addSubview:self.imageCycle];
+    [self.imageCycle mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.bodyView.chooseView);
+    }];
+    self.imageCycle.itemSize = CGSizeMake(kScreenWidth - 132, 300);
+
+    [self.bodyView addSubview:self.pageControl];
+    [self.pageControl mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.bodyView);
+        make.top.mas_equalTo(self.bodyView.chooseView.mas_bottom).offset(10);
+        make.height.mas_equalTo(15.0f);
+    }];
+    
+}
+
+#pragma mark ----- segCtrl delegate
+- (void)didSelectIndex:(NSInteger)chooseIndex {
+    self.chooseIndex = chooseIndex;
+    [self refreshView];
+}
+
+#pragma mark -- ZKCycleScrollView DataSource
+- (NSInteger)numberOfItemsInCycleScrollView:(ZKCycleScrollView *)cycleScrollView {
+    return self.imageArray.count;
+}
+
+- (__kindof UICollectionViewCell *)cycleScrollView:(ZKCycleScrollView *)cycleScrollView cellForItemAtIndex:(NSInteger)index {
+    SubjectImageCell *cell = [cycleScrollView dequeueReusableCellWithReuseIdentifier:@"SubjectImageCell" forIndex:index];
+    InstrumentMessageModel *model = self.imageArray[index];
+    [cell.instrumentImage sd_setImageWithURL:[NSURL URLWithString:model.img]];
+    return cell;
+}
+
+#pragma mark -- ZKCycleScrollView Delegate
+- (void)cycleScrollView:(ZKCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index {
+    // 对应当前的数据源刷新数据
+    NSLog(@"index = %zd",index);
+}
+
+- (void)cycleScrollViewDidScroll:(ZKCycleScrollView *)cycleScrollView progress:(CGFloat)progress {
+    // 对应当前的数据源刷新数据
+    
+    _pageControl.progress = progress;
+    NSLog(@"progress = %f", progress);
+}
+
+- (void)cycleScrollView:(ZKCycleScrollView *)cycleScrollView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex {
+    [self refreshBottomView:toIndex];
+}
+
+#pragma mark ---- lazying
+- (ZKCycleScrollView *)imageCycle {
+    if (!_imageCycle) {
+        _imageCycle = [[ZKCycleScrollView alloc] initWithFrame:CGRectZero shouldInfiniteLoop:NO];
+        _imageCycle.delegate = self;
+        _imageCycle.dataSource = self;
+        _imageCycle.hidesPageControl = YES;
+        _imageCycle.autoScroll = NO;
+        _imageCycle.itemSpacing = 6.0f;
+        _imageCycle.itemZoomScale = 0.85;
+        [_imageCycle registerCellNib:[UINib nibWithNibName:@"SubjectImageCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"SubjectImageCell"];
+    }
+    return _imageCycle;
+}
+
+- (CHIPageControlJaloro *)pageControl {
+    if (!_pageControl) {
+        _pageControl = [[CHIPageControlJaloro alloc] initWithFrame:CGRectZero];
+        _pageControl.radius = 3;
+        _pageControl.padding = 8;
+        _pageControl.inactiveTransparency = 0.8f;// 未命中点的不透明度
+        _pageControl.tintColor = HexRGB(0xd8d8d8);
+        _pageControl.currentPageTintColor = THEMECOLOR;
+        _pageControl.numberOfPages = self.imageArray.count;
+        _pageControl.transform = CGAffineTransformMakeScale(0.5, 0.5);
+    }
+    return _pageControl;
+}
+
+- (KSSegmentControl *)segCtrl {
+    if (!_segCtrl) {
+        _segCtrl = [[KSSegmentControl alloc] init];
+        _segCtrl.delegate = self;
+    }
+    return _segCtrl;
+}
+
+- (SubjectChooseBodyView *)bodyView {
+    if (!_bodyView) {
+        _bodyView = [SubjectChooseBodyView shareInstance];
+        MJWeakSelf;
+        [_bodyView chooseSubjectCallback:^{
+            [weakSelf sureChooseSubject];
+        }];
+    }
+    return _bodyView;
+}
+
+
+- (void)sureChooseSubject {
+    
+}
+/*
+#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

+ 30 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/Model/InstrumentMessageModel.h

@@ -0,0 +1,30 @@
+//
+//  InstrumentMessageModel.h
+//
+//  Created by Steven  on 2022/4/5
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface InstrumentMessageModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, assign) id subjects;
+@property (nonatomic, strong) NSString *img;
+@property (nonatomic, assign) BOOL delFlag;
+@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *code;
+@property (nonatomic, strong) NSString *updateTime;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, strong) NSString *name;
+@property (nonatomic, strong) NSString *parentSubjectName;
+@property (nonatomic, strong) NSString *desc;
+@property (nonatomic, strong) NSString *parentSubjectId;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 169 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/Model/InstrumentMessageModel.m

@@ -0,0 +1,169 @@
+//
+//  InstrumentMessageModel.m
+//
+//  Created by Steven  on 2022/4/5
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "InstrumentMessageModel.h"
+
+
+NSString *const kInstrumentMessageModelSubjects = @"subjects";
+NSString *const kInstrumentMessageModelImg = @"img";
+NSString *const kInstrumentMessageModelDelFlag = @"delFlag";
+NSString *const kInstrumentMessageModelId = @"id";
+NSString *const kInstrumentMessageModelCode = @"code";
+NSString *const kInstrumentMessageModelUpdateTime = @"updateTime";
+NSString *const kInstrumentMessageModelCreateTime = @"createTime";
+NSString *const kInstrumentMessageModelName = @"name";
+NSString *const kInstrumentMessageModelParentSubjectName = @"parentSubjectName";
+NSString *const kInstrumentMessageModelDesc = @"desc";
+NSString *const kInstrumentMessageModelParentSubjectId = @"parentSubjectId";
+
+
+@interface InstrumentMessageModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation InstrumentMessageModel
+
+@synthesize subjects = _subjects;
+@synthesize img = _img;
+@synthesize delFlag = _delFlag;
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize code = _code;
+@synthesize updateTime = _updateTime;
+@synthesize createTime = _createTime;
+@synthesize name = _name;
+@synthesize parentSubjectName = _parentSubjectName;
+@synthesize desc = _desc;
+@synthesize parentSubjectId = _parentSubjectId;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.subjects = [self objectOrNilForKey:kInstrumentMessageModelSubjects fromDictionary:dict];
+            self.img = [self objectOrNilForKey:kInstrumentMessageModelImg fromDictionary:dict];
+            self.delFlag = [[self objectOrNilForKey:kInstrumentMessageModelDelFlag fromDictionary:dict] boolValue];
+            self.internalBaseClassIdentifier = [self objectOrNilForKey:kInstrumentMessageModelId fromDictionary:dict];
+            self.code = [self objectOrNilForKey:kInstrumentMessageModelCode fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kInstrumentMessageModelUpdateTime fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kInstrumentMessageModelCreateTime fromDictionary:dict];
+            self.name = [self objectOrNilForKey:kInstrumentMessageModelName fromDictionary:dict];
+            self.parentSubjectName = [self objectOrNilForKey:kInstrumentMessageModelParentSubjectName fromDictionary:dict];
+            self.desc = [self objectOrNilForKey:kInstrumentMessageModelDesc fromDictionary:dict];
+            self.parentSubjectId = [self objectOrNilForKey:kInstrumentMessageModelParentSubjectId fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.subjects forKey:kInstrumentMessageModelSubjects];
+    [mutableDict setValue:self.img forKey:kInstrumentMessageModelImg];
+    [mutableDict setValue:[NSNumber numberWithBool:self.delFlag] forKey:kInstrumentMessageModelDelFlag];
+    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kInstrumentMessageModelId];
+    [mutableDict setValue:self.code forKey:kInstrumentMessageModelCode];
+    [mutableDict setValue:self.updateTime forKey:kInstrumentMessageModelUpdateTime];
+    [mutableDict setValue:self.createTime forKey:kInstrumentMessageModelCreateTime];
+    [mutableDict setValue:self.name forKey:kInstrumentMessageModelName];
+    [mutableDict setValue:self.parentSubjectName forKey:kInstrumentMessageModelParentSubjectName];
+    [mutableDict setValue:self.desc forKey:kInstrumentMessageModelDesc];
+    [mutableDict setValue:self.parentSubjectId forKey:kInstrumentMessageModelParentSubjectId];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.subjects = [aDecoder decodeObjectForKey:kInstrumentMessageModelSubjects];
+    self.img = [aDecoder decodeObjectForKey:kInstrumentMessageModelImg];
+    self.delFlag = [aDecoder decodeBoolForKey:kInstrumentMessageModelDelFlag];
+    self.internalBaseClassIdentifier = [aDecoder decodeObjectForKey:kInstrumentMessageModelId];
+    self.code = [aDecoder decodeObjectForKey:kInstrumentMessageModelCode];
+    self.updateTime = [aDecoder decodeObjectForKey:kInstrumentMessageModelUpdateTime];
+    self.createTime = [aDecoder decodeObjectForKey:kInstrumentMessageModelCreateTime];
+    self.name = [aDecoder decodeObjectForKey:kInstrumentMessageModelName];
+    self.parentSubjectName = [aDecoder decodeObjectForKey:kInstrumentMessageModelParentSubjectName];
+    self.desc = [aDecoder decodeObjectForKey:kInstrumentMessageModelDesc];
+    self.parentSubjectId = [aDecoder decodeObjectForKey:kInstrumentMessageModelParentSubjectId];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_subjects forKey:kInstrumentMessageModelSubjects];
+    [aCoder encodeObject:_img forKey:kInstrumentMessageModelImg];
+    [aCoder encodeBool:_delFlag forKey:kInstrumentMessageModelDelFlag];
+    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kInstrumentMessageModelId];
+    [aCoder encodeObject:_code forKey:kInstrumentMessageModelCode];
+    [aCoder encodeObject:_updateTime forKey:kInstrumentMessageModelUpdateTime];
+    [aCoder encodeObject:_createTime forKey:kInstrumentMessageModelCreateTime];
+    [aCoder encodeObject:_name forKey:kInstrumentMessageModelName];
+    [aCoder encodeObject:_parentSubjectName forKey:kInstrumentMessageModelParentSubjectName];
+    [aCoder encodeObject:_desc forKey:kInstrumentMessageModelDesc];
+    [aCoder encodeObject:_parentSubjectId forKey:kInstrumentMessageModelParentSubjectId];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    InstrumentMessageModel *copy = [[InstrumentMessageModel alloc] init];
+    
+    if (copy) {
+
+        copy.subjects = [self.subjects copyWithZone:zone];
+        copy.img = [self.img copyWithZone:zone];
+        copy.delFlag = self.delFlag;
+        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.code = [self.code copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.name = [self.name copyWithZone:zone];
+        copy.parentSubjectName = [self.parentSubjectName copyWithZone:zone];
+        copy.desc = [self.desc copyWithZone:zone];
+        copy.parentSubjectId = [self.parentSubjectId copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 28 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/KSSegmentControl.h

@@ -0,0 +1,28 @@
+//
+//  KSSegmentControl.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol KSSegmentControlDelegate <NSObject>
+
+- (void)didSelectIndex:(NSInteger)chooseIndex;
+
+@end
+
+@interface KSSegmentControl : UIView
+
+@property (nonatomic, weak) id <KSSegmentControlDelegate>delegate;
+
+- (void)configWithArray:(NSArray *)titleArray;
+
+- (void)chooseSelectedIndex:(NSInteger)chooseIndex;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 205 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/KSSegmentControl.m

@@ -0,0 +1,205 @@
+//
+//  KSSegmentControl.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import "KSSegmentControl.h"
+
+@interface KSSegmentItem : UIView
+
+@property (nonatomic, strong) NSString *title;
+
+@property (nonatomic, assign) BOOL isChoose;
+
+@property (nonatomic, assign) NSInteger tagIndex;
+
+@property (nonatomic, strong) UILabel *titleLabel;
+
+@property (nonatomic, strong) UIButton *actionButton;
+
+- (instancetype)initWithFrame:(CGRect)frame tagIndex:(NSInteger)tagIndex title:(NSString *)titleString;
+
+@end
+
+@implementation KSSegmentItem
+
+- (instancetype)initWithFrame:(CGRect)frame tagIndex:(NSInteger)tagIndex title:(NSString *)titleString; {
+    if (self = [super initWithFrame:frame]) {
+        self.title = titleString;
+        self.tagIndex = tagIndex;
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    self.titleLabel = [[UILabel alloc] init];
+    self.titleLabel.font = [UIFont systemFontOfSize:16.0f];
+    self.titleLabel.textAlignment = NSTextAlignmentCenter;
+    self.titleLabel.textColor = HexRGB(0x7a7a7a);
+    self.titleLabel.text = self.title;
+    [self addSubview:self.titleLabel];
+    [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self);
+    }];
+    self.actionButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    [self addSubview:self.actionButton];
+    self.actionButton.tag = self.tagIndex+1000;
+    [self.actionButton mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self);
+    }];
+    self.tag = self.tagIndex + 2000;
+}
+
+- (void)setIsChoose:(BOOL)isChoose {
+    _isChoose = isChoose;
+    if (isChoose) {
+        self.titleLabel.textColor = THEMECOLOR;
+        self.titleLabel.font = [UIFont systemFontOfSize:16.f weight:UIFontWeightMedium];
+    }
+    else {
+        self.titleLabel.textColor = HexRGB(0x7a7a7a);
+        self.titleLabel.font = [UIFont systemFontOfSize:16.0f];
+    }
+}
+
+@end
+
+
+@interface KSSegmentControl ()
+
+@property (nonatomic, strong) NSMutableArray *sourceArray;
+
+@property (nonatomic, strong) UIView *lineView;
+
+@property (nonatomic, strong) UIScrollView *bgScrollView;
+
+@property (nonatomic, assign) NSInteger lastChooseIndex;
+
+@property (nonatomic, assign) CGFloat itemWidth;
+
+@end
+
+@implementation KSSegmentControl
+
+- (instancetype)init {
+    self = [super init];
+    if (self) {
+        [self configUI];
+    }
+    return self;
+}
+
+- (void)configUI {
+    [self addSubview:self.bgScrollView];
+    [self.bgScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.top.mas_equalTo(self);
+    }];
+}
+
+- (void)configWithArray:(NSArray *)titleArray {
+    self.sourceArray = [NSMutableArray arrayWithArray:titleArray];
+}
+
+- (void)setSourceArray:(NSMutableArray *)sourceArray {
+    _sourceArray = sourceArray;
+    [self.bgScrollView removeAllSubViews];
+    self.itemWidth = [self getSegmentItemWidth:sourceArray.count];
+    CGFloat positionX = 0.0f;
+    for (NSInteger i = 0; i < sourceArray.count; i++) {
+        NSInteger index = i;
+        KSSegmentItem *item = [[KSSegmentItem alloc] initWithFrame:CGRectMake(positionX, 0, self.itemWidth, CGRectGetHeight(self.bounds)) tagIndex:index title:sourceArray[i]];
+        [item.actionButton addTarget:self action:@selector(segmentChooseAction:) forControlEvents:UIControlEventTouchUpInside];
+        if (i == 0) {
+            item.isChoose = YES;
+        }
+        [self.bgScrollView addSubview:item];
+        positionX += self.itemWidth;
+    }
+    if (sourceArray.count > 4) {
+        self.bgScrollView.contentSize = CGSizeMake(self.itemWidth * sourceArray.count, CGRectGetHeight(self.bounds));
+        self.bgScrollView.scrollEnabled = YES;
+    }
+    else {
+        self.bgScrollView.contentSize = CGSizeMake(kScreenWidth, CGRectGetHeight(self.bounds));
+        self.bgScrollView.scrollEnabled = NO;
+    }
+    [self.bgScrollView addSubview:self.lineView];
+
+    self.lastChooseIndex = 0;
+}
+
+- (void)setLastChooseIndex:(NSInteger)lastChooseIndex {
+    _lastChooseIndex = lastChooseIndex;
+    [UIView animateWithDuration:0.3f animations:^{
+        CGRect frame = self.lineView.frame;
+        frame.origin.x = lastChooseIndex * self.itemWidth + (self.itemWidth - 26) / 2;
+        self.lineView.frame = frame;
+    }];
+}
+
+- (void)chooseSelectedIndex:(NSInteger)chooseIndex {
+    UIButton *btn = [self.bgScrollView viewWithTag:chooseIndex +1000];
+    [self segmentChooseAction:btn];
+}
+
+- (void)segmentChooseAction:(UIButton *)chooseButton {
+    
+    NSInteger index = chooseButton.tag - 1000;
+    if (index == _lastChooseIndex) {
+        return;
+    }
+    else {
+        KSSegmentItem *item = [self.bgScrollView viewWithTag:self.lastChooseIndex+2000];
+        item.isChoose = NO;
+    }
+    KSSegmentItem *item = [self.bgScrollView viewWithTag:index+2000];
+    item.isChoose = YES;
+    
+    if (self.delegate && [self.delegate respondsToSelector:@selector(didSelectIndex:)]) {
+        [self.delegate didSelectIndex:index];
+    }
+    self.lastChooseIndex = index;
+    
+}
+
+
+- (CGFloat)getSegmentItemWidth:(NSInteger)count {
+    if (count <= 4) {
+        return kScreenWidth / count;
+    }
+    else {
+        return kScreenWidth / 4;
+    }
+}
+
+#pragma mark ---- lazying
+- (UIView *)lineView {
+    if (!_lineView) {
+        _lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 56, 26, 4)];
+        _lineView.layer.cornerRadius = 2.0f;
+        _lineView.backgroundColor = THEMECOLOR;
+    }
+    return _lineView;
+}
+
+- (UIScrollView *)bgScrollView {
+    if (!_bgScrollView) {
+        _bgScrollView = [[UIScrollView alloc] init];
+        _bgScrollView.backgroundColor = [UIColor clearColor];
+        _bgScrollView.showsHorizontalScrollIndicator = NO;
+        _bgScrollView.showsVerticalScrollIndicator = NO;
+    }
+    return _bgScrollView;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 29 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectChooseBodyView.h

@@ -0,0 +1,29 @@
+//
+//  SubjectChooseBodyView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^SubjectChooseCallback)(void);
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SubjectChooseBodyView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *chooseView;
+
+@property (weak, nonatomic) IBOutlet UILabel *subjectName;
+
+@property (weak, nonatomic) IBOutlet UILabel *subjectDesc;
+
+@property (weak, nonatomic) IBOutlet UIButton *sureButton;
+
++ (instancetype)shareInstance;
+
+- (void)chooseSubjectCallback:(SubjectChooseCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 59 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectChooseBodyView.m

@@ -0,0 +1,59 @@
+//
+//  SubjectChooseBodyView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import "SubjectChooseBodyView.h"
+
+@interface SubjectChooseBodyView ()
+
+@property (weak, nonatomic) IBOutlet UIView *bottomView;
+
+@property (nonatomic, copy) SubjectChooseCallback callback;
+
+@end
+
+@implementation SubjectChooseBodyView
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    if (@available(iOS 11.0, *)) {
+        _bottomView.layer.cornerRadius = 24;
+        _bottomView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; // 左上圆角
+    }
+    else {
+        UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:_bottomView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(24, 24)];
+        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+        maskLayer.frame = _bottomView.bounds;
+        maskLayer.path = path.CGPath;
+        _bottomView.layer.mask = maskLayer;
+    }
+    _bottomView.layer.masksToBounds = YES;
+}
++ (instancetype)shareInstance {
+    SubjectChooseBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"SubjectChooseBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)chooseSubjectCallback:(SubjectChooseCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)chooseSubject:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 111 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectChooseBodyView.xib

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="SubjectChooseBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qqd-iU-Jbg">
+                    <rect key="frame" x="0.0" y="12" width="414" height="300"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="300" id="nVU-mm-jo4"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iRB-c9-yvr">
+                    <rect key="frame" x="0.0" y="635.5" width="414" height="260.5"/>
+                    <subviews>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="M7e-Wc-b0c">
+                            <rect key="frame" x="28" y="156.5" width="358" height="40"/>
+                            <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="40" id="TDW-Lx-VGj"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="开启管乐练习之路"/>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="20"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="chooseSubject:" destination="iN0-l3-epB" eventType="touchUpInside" id="YN7-k1-pxi"/>
+                            </connections>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="圆号" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aYe-dw-nhN">
+                            <rect key="frame" x="186.5" y="19" width="41" height="28"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="28" id="G56-Kf-acM"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
+                            <nil key="textColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fM9-D7-luq">
+                            <rect key="frame" x="34" y="65" width="346" height="66.5"/>
+                            <attributedString key="attributedText">
+                                <fragment content="音色具有铜管的特色,但又温和高雅,带有哀愁和诗意,在铜管和木管乐器之间起到媒介作用,表现力极其丰富,是铜管乐器中音域最宽,应用最广泛的乐器。">
+                                    <attributes>
+                                        <color key="NSColor" red="0.47843137254901957" green="0.47843137254901957" blue="0.47843137254901957" alpha="1" colorSpace="calibratedRGB"/>
+                                        <font key="NSFont" metaFont="system" size="14"/>
+                                        <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                    </attributes>
+                                </fragment>
+                            </attributedString>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="fM9-D7-luq" secondAttribute="trailing" constant="34" id="2fF-eb-Cyr"/>
+                        <constraint firstItem="M7e-Wc-b0c" firstAttribute="top" secondItem="fM9-D7-luq" secondAttribute="bottom" constant="25" id="5D5-Pw-mCA"/>
+                        <constraint firstItem="M7e-Wc-b0c" firstAttribute="leading" secondItem="iRB-c9-yvr" secondAttribute="leading" constant="28" id="HO0-EF-7LK"/>
+                        <constraint firstItem="fM9-D7-luq" firstAttribute="top" secondItem="aYe-dw-nhN" secondAttribute="bottom" constant="18" id="Xki-QY-IF9"/>
+                        <constraint firstItem="fM9-D7-luq" firstAttribute="leading" secondItem="iRB-c9-yvr" secondAttribute="leading" constant="34" id="Y5U-N1-oRY"/>
+                        <constraint firstItem="aYe-dw-nhN" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="iRB-c9-yvr" secondAttribute="leading" constant="12" id="dgC-KF-OPb"/>
+                        <constraint firstAttribute="bottom" secondItem="M7e-Wc-b0c" secondAttribute="bottom" constant="64" id="dlP-WT-l85"/>
+                        <constraint firstItem="aYe-dw-nhN" firstAttribute="centerX" secondItem="iRB-c9-yvr" secondAttribute="centerX" id="fYu-yh-zMq"/>
+                        <constraint firstItem="M7e-Wc-b0c" firstAttribute="centerX" secondItem="iRB-c9-yvr" secondAttribute="centerX" id="jyP-fn-Gwb"/>
+                        <constraint firstItem="aYe-dw-nhN" firstAttribute="top" secondItem="iRB-c9-yvr" secondAttribute="top" constant="19" id="odX-q5-aDS"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="qqd-iU-Jbg" secondAttribute="trailing" id="4ON-8c-u2f"/>
+                <constraint firstItem="iRB-c9-yvr" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="8pz-HY-C94"/>
+                <constraint firstItem="qqd-iU-Jbg" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="12" id="il7-Hs-SrC"/>
+                <constraint firstAttribute="trailing" secondItem="iRB-c9-yvr" secondAttribute="trailing" id="lJr-9v-Oiq"/>
+                <constraint firstItem="qqd-iU-Jbg" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="voL-QN-bci"/>
+                <constraint firstAttribute="bottom" secondItem="iRB-c9-yvr" secondAttribute="bottom" id="y25-Bw-DTY"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="bottomView" destination="iRB-c9-yvr" id="tzV-9X-8AY"/>
+                <outlet property="chooseView" destination="qqd-iU-Jbg" id="Rc7-V6-kGQ"/>
+                <outlet property="subjectDesc" destination="fM9-D7-luq" id="E6q-ue-jdM"/>
+                <outlet property="subjectName" destination="aYe-dw-nhN" id="Gbs-Xh-hfr"/>
+                <outlet property="sureButton" destination="M7e-Wc-b0c" id="k0s-pe-dH7"/>
+            </connections>
+            <point key="canvasLocation" x="137.68115942028987" y="64.955357142857139"/>
+        </view>
+    </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectImageCell.h

@@ -0,0 +1,18 @@
+//
+//  SubjectImageCell.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SubjectImageCell : UICollectionViewCell
+
+@property (weak, nonatomic) IBOutlet UIImageView *instrumentImage;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 17 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectImageCell.m

@@ -0,0 +1,17 @@
+//
+//  SubjectImageCell.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/5.
+//
+
+#import "SubjectImageCell.h"
+
+@implementation SubjectImageCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+@end

+ 53 - 0
KulexiuForStudent/KulexiuForStudent/Module/Login/View/SubjectImageCell.xib

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="SubjectImageCell">
+            <rect key="frame" x="0.0" y="0.0" width="154" height="141"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="154" height="141"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="u8P-6g-7gi">
+                        <rect key="frame" x="0.0" y="0.0" width="154" height="141"/>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="YES"/>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="13"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </imageView>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="u8P-6g-7gi" secondAttribute="bottom" id="Ppk-QM-GXt"/>
+                <constraint firstAttribute="trailing" secondItem="u8P-6g-7gi" secondAttribute="trailing" id="d10-zo-w6Z"/>
+                <constraint firstItem="u8P-6g-7gi" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="lmA-Qd-twu"/>
+                <constraint firstItem="u8P-6g-7gi" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="raj-Y0-HBl"/>
+            </constraints>
+            <size key="customSize" width="154" height="141"/>
+            <userDefinedRuntimeAttributes>
+                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                    <real key="value" value="13"/>
+                </userDefinedRuntimeAttribute>
+                <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="YES"/>
+            </userDefinedRuntimeAttributes>
+            <connections>
+                <outlet property="instrumentImage" destination="u8P-6g-7gi" id="t5v-Ql-L6t"/>
+            </connections>
+            <point key="canvasLocation" x="207.24637681159422" y="106.80803571428571"/>
+        </collectionViewCell>
+    </objects>
+</document>

+ 3 - 1
KulexiuForStudent/Podfile

@@ -23,6 +23,8 @@ target 'KulexiuForStudent' do
   pod 'Bugly'
   pod 'Whiteboard'
   pod 'RSKImageCropper'
+  pod 'ZKCycleScrollView'
+  pod 'CHIPageControl'
 #  友盟
   pod 'UMCommon'
   pod 'UMDevice'
@@ -34,7 +36,7 @@ target 'KulexiuForStudent' do
   pod 'RongCloudIM/IMKit',  '~> 5.2.0'
   pod 'RongCloudIM/Sight',  '~> 5.2.0'
   pod 'RongCloudRTC/RongRTCLib','~> 5.2.0'
-  pod 'RongCloudRTC/RongFaceBeautifier','~> 5.2.0'
+#  pod 'RongCloudRTC/RongFaceBeautifier','~> 5.2.0'
   # Pods for KulexiuForStudent
 
   target 'KulexiuForStudentTests' do

+ 27 - 3
KulexiuForStudent/Podfile.lock

@@ -15,6 +15,23 @@ PODS:
   - AFNetworking/UIKit (4.0.1):
     - AFNetworking/NSURLSession
   - Bugly (2.5.91)
+  - CHIPageControl (0.2):
+    - CHIPageControl/Aji (= 0.2)
+    - CHIPageControl/Aleppo (= 0.2)
+    - CHIPageControl/Chimayo (= 0.2)
+    - CHIPageControl/Fresno (= 0.2)
+    - CHIPageControl/Jalapeno (= 0.2)
+    - CHIPageControl/Jaloro (= 0.2)
+    - CHIPageControl/Paprika (= 0.2)
+    - CHIPageControl/Puya (= 0.2)
+  - CHIPageControl/Aji (0.2)
+  - CHIPageControl/Aleppo (0.2)
+  - CHIPageControl/Chimayo (0.2)
+  - CHIPageControl/Fresno (0.2)
+  - CHIPageControl/Jalapeno (0.2)
+  - CHIPageControl/Jaloro (0.2)
+  - CHIPageControl/Paprika (0.2)
+  - CHIPageControl/Puya (0.2)
   - dsBridge (3.0.6)
   - IQKeyboardManager (6.5.9)
   - JCore (2.7.1-noidfa)
@@ -85,10 +102,12 @@ PODS:
   - Whiteboard/Room (2.16.0):
     - Whiteboard/Base
   - YYModel (1.0.4)
+  - ZKCycleScrollView (2.0.1)
 
 DEPENDENCIES:
   - AFNetworking (~> 4.0)
   - Bugly
+  - CHIPageControl
   - IQKeyboardManager
   - JCore (= 2.7.1-noidfa)
   - JPush (= 4.3.0)
@@ -111,11 +130,13 @@ DEPENDENCIES:
   - UMCommon
   - UMDevice
   - Whiteboard
+  - ZKCycleScrollView
 
 SPEC REPOS:
   trunk:
     - AFNetworking
     - Bugly
+    - CHIPageControl
     - dsBridge
     - IQKeyboardManager
     - JCore
@@ -138,13 +159,15 @@ SPEC REPOS:
     - UMDevice
     - Whiteboard
     - YYModel
+    - ZKCycleScrollView
 
 SPEC CHECKSUMS:
   AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
   Bugly: afe841bba2ea6de6d432a3c125240a5e75949c55
+  CHIPageControl: a787bf7205c9b7e7fbfc412be36c5e8636b68f86
   dsBridge: 48b62ee8a411ad601a88d6f6c8cf6cb634b206b7
   IQKeyboardManager: 241cc94ccabc9deb8f8bd7d12f00d73288d13ecc
-  JCore: b7c28cfc056f83ab8fb0208ef50e3b91103bcdc5
+  JCore: b9d49b2e5364cce65dec86056c60b1b72825893a
   JPush: 88d6361fbec4be7c8b55b20b7fe1c292228f6bc2
   JXCategoryView: 2ef9ecfd3735158d009ce02d1f29811aa822da65
   JXPagingView: 90924b364a2ff7e94db534fad1fa50925ff69ee4
@@ -164,7 +187,8 @@ SPEC CHECKSUMS:
   UMDevice: 053478c4b4d7292f31f0a275c227d3c4007a5571
   Whiteboard: 16568e7e14f7f451d2aad2536f5fab9c06119934
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
+  ZKCycleScrollView: 4b353d17b7f469b245a1c606d5a977e72b940895
 
-PODFILE CHECKSUM: 077057c7fb9e9a5bf8ec20e2da1d4fb83d40811f
+PODFILE CHECKSUM: 04b96d3c9cef2ea6f6f511a9ef671b6b80141144
 
-COCOAPODS: 1.11.2
+COCOAPODS: 1.11.3

+ 115 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlAji.swift

@@ -0,0 +1,115 @@
+//
+//  CHIPageControlAji.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+open class CHIPageControlAji: CHIBasePageControl {
+    
+    fileprivate var diameter: CGFloat {
+        return radius * 2
+    }
+
+    fileprivate var inactive = [CHILayer]()
+    fileprivate var active = CHILayer()
+
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        inactive.forEach { $0.removeFromSuperlayer() }
+        inactive = [CHILayer]()
+        inactive = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+
+        self.layer.addSublayer(active)
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        
+        let floatCount = CGFloat(inactive.count)
+        let x = ceil((self.bounds.size.width - self.diameter*floatCount - self.padding*(floatCount-1))*0.5)
+        let y = ceil((self.bounds.size.height - self.diameter)*0.5)
+        var frame = CGRect(x: x, y: y, width: self.diameter, height: self.diameter)
+
+        active.cornerRadius = self.radius
+        active.backgroundColor = (self.currentPageTintColor ?? self.tintColor)?.cgColor
+        active.frame = frame
+
+        inactive.enumerated().forEach() { index, layer in
+            layer.backgroundColor = self.tintColor(position: index).withAlphaComponent(self.inactiveTransparency).cgColor
+            if self.borderWidth > 0 {
+                layer.borderWidth = self.borderWidth
+                layer.borderColor = self.tintColor(position: index).cgColor
+            }
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.diameter + self.padding
+        }
+        update(for: progress)
+    }
+
+    override func update(for progress: Double) {
+        guard let min = inactive.first?.frame,
+              let max = inactive.last?.frame,
+              numberOfPages > 1,
+              progress >= 0 && progress <= Double(numberOfPages - 1) else {
+                return
+        }
+
+        let total = Double(numberOfPages - 1)
+        let dist = max.origin.x - min.origin.x
+        let percent = CGFloat(progress / total)
+
+        let offset = dist * percent
+        active.frame.origin.x = min.origin.x + offset
+    }
+
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(inactive.count) * self.diameter + CGFloat(inactive.count - 1) * self.padding,
+                      height: self.diameter)
+    }
+    
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if let touchIndex = inactive.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 118 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlAleppo.swift

@@ -0,0 +1,118 @@
+//
+//  CHIPageControlAleppo.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+open class CHIPageControlAleppo: CHIBasePageControl {
+
+    fileprivate var diameter: CGFloat {
+        return radius * 2
+    }
+
+    fileprivate var inactive = [CHILayer]()
+
+    fileprivate var active: CHILayer = CHILayer()
+
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        inactive.forEach { $0.removeFromSuperlayer() }
+        inactive = [CHILayer]()
+        inactive = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+        self.layer.addSublayer(active)
+
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+
+    override func update(for progress: Double) {
+        guard progress >= 0 && progress <= Double(numberOfPages - 1),
+            let firstFrame = self.inactive.first?.frame,
+            numberOfPages > 1 else { return }
+
+        let normalized = progress * Double(diameter + padding)
+        let distance = abs(round(progress) - progress)
+        let mult = 1 + distance * 2
+
+        var frame = active.frame
+
+        frame.origin.x = CGFloat(normalized) + firstFrame.origin.x
+        frame.size.width = frame.height * CGFloat(mult)
+        frame.size.height = self.diameter
+
+        active.frame = frame
+    }
+
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        
+        let floatCount = CGFloat(inactive.count)
+        let x = (self.bounds.size.width - self.diameter*floatCount - self.padding*(floatCount-1))*0.5
+        let y = (self.bounds.size.height - self.diameter)*0.5
+        var frame = CGRect(x: x, y: y, width: self.diameter, height: self.diameter)
+
+        active.cornerRadius = self.radius
+        active.backgroundColor = (self.currentPageTintColor ?? self.tintColor)?.cgColor
+        active.frame = frame
+
+        inactive.enumerated().forEach() { index, layer in
+            layer.backgroundColor = self.tintColor(position: index).withAlphaComponent(self.inactiveTransparency).cgColor
+            if self.borderWidth > 0 {
+                layer.borderWidth = self.borderWidth
+                layer.borderColor = self.tintColor(position: index).cgColor
+            }
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.diameter + self.padding
+        }
+        update(for: progress)
+    }
+
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(inactive.count) * self.diameter + CGFloat(inactive.count - 1) * self.padding,
+                      height: self.diameter)
+    }
+    
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if let touchIndex = inactive.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 132 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlChimayo.swift

@@ -0,0 +1,132 @@
+//
+//  CHIPageControlChimayo.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+
+open class CHIPageControlChimayo: CHIBasePageControl {
+
+    fileprivate var diameter: CGFloat {
+        return radius * 2
+    }
+
+    fileprivate var inactive = [CHILayer]()
+
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override open func awakeFromNib() {
+        super.awakeFromNib()
+        self.update(for: self.progress)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        inactive.forEach { $0.removeFromSuperlayer() }
+        inactive = [CHILayer]()
+        inactive = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        let floatCount = CGFloat(inactive.count)
+        let x = (self.bounds.size.width - self.diameter*floatCount - self.padding*(floatCount-1))*0.5
+        let y = (self.bounds.size.height - self.diameter)*0.5
+        var frame = CGRect(x: x, y: y, width: self.diameter, height: self.diameter)
+
+        inactive.enumerated().forEach() { index, layer in
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.diameter + self.padding
+            layer.backgroundColor = self.tintColor(position: index).cgColor
+        }
+        update(for: progress)
+    }
+
+    override func update(for progress: Double) {
+        guard progress >= 0 && progress <= Double(numberOfPages - 1),
+            numberOfPages > 1 else { return }
+
+        let rect = CGRect(x: 0, y: 0, width: self.diameter, height: self.diameter).insetBy(dx: 1, dy: 1)
+
+        let left = floor(progress)
+        let page = Int(progress)
+        let move = rect.width / 2
+
+        let rightInset = move * CGFloat(progress - left)
+        let rightRect = rect.insetBy(dx: rightInset, dy: rightInset)
+
+        let leftInset = (1 - CGFloat(progress - left)) * move
+        let leftRect = rect.insetBy(dx: leftInset, dy: leftInset)
+
+        let mask = { (index: Int, layer: CHILayer) in
+            let mask = CAShapeLayer()
+            mask.fillRule = CAShapeLayerFillRule.evenOdd
+            let bounds = UIBezierPath(rect: layer.bounds)
+            switch index {
+            case page:
+                bounds.append(UIBezierPath(ovalIn: leftRect))
+            case page + 1:
+                bounds.append(UIBezierPath(ovalIn: rightRect))
+            default:
+                bounds.append(UIBezierPath(ovalIn: rect))
+            }
+            mask.path = bounds.cgPath
+            mask.frame = layer.bounds
+            layer.mask = mask
+        }
+
+        for (index, layer) in inactive.enumerated() {
+            mask(index, layer)
+        }
+    }
+        
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+        
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(inactive.count) * self.diameter + CGFloat(inactive.count - 1) * self.padding,
+                      height: self.diameter)
+    }
+    
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if let touchIndex = inactive.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 181 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlFresno.swift

@@ -0,0 +1,181 @@
+//
+//  CHIPageControlFresno.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+open class CHIPageControlFresno: CHIBasePageControl {
+
+    fileprivate var diameter: CGFloat {
+        return radius * 2
+    }
+
+    fileprivate var elements = [CHILayer]()
+
+    fileprivate var frames = [CGRect]()
+    fileprivate var min: CGRect?
+    fileprivate var max: CGRect?
+
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        elements.forEach { $0.removeFromSuperlayer() }
+        elements = [CHILayer]()
+        elements = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        
+        let floatCount = CGFloat(elements.count)
+        let x = (self.bounds.size.width - self.diameter*floatCount - self.padding*(floatCount-1))*0.5
+        let y = (self.bounds.size.height - self.diameter)*0.5
+        var frame = CGRect(x: x, y: y, width: self.diameter, height: self.diameter)
+
+        elements.enumerated().forEach() { index, layer in
+            layer.backgroundColor = self.tintColor(position: index).withAlphaComponent(self.inactiveTransparency).cgColor
+            if self.borderWidth > 0 {
+                layer.borderWidth = self.borderWidth
+                layer.borderColor = self.tintColor(position: index).cgColor
+            }
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.diameter + self.padding
+        }
+        
+        if let active = elements.first {
+            active.backgroundColor = (self.currentPageTintColor ?? self.tintColor)?.cgColor
+            active.borderWidth = 0
+        }
+
+        min = elements.first?.frame
+        max = elements.last?.frame
+
+        self.frames = elements.map { $0.frame }
+        update(for: progress)
+    }
+
+    override func update(for progress: Double) {
+        guard let min = self.min,
+            let max = self.max,
+            progress >= 0 && progress <= Double(numberOfPages - 1),
+            numberOfPages > 1 else {
+                return
+        }
+
+        let total = Double(numberOfPages - 1)
+        let dist = max.origin.x - min.origin.x
+        let percent = CGFloat(progress / total)
+        let page = Int(progress)
+        
+        for (index, _) in self.frames.enumerated() {
+            if page > index {
+                self.elements[index+1].frame = self.frames[index]
+            } else if page < index {
+                self.elements[index].frame = self.frames[index]
+            }
+        }
+
+        let offset = dist * percent
+        guard let active = elements.first else { return }
+        active.frame.origin.x = min.origin.x + offset
+
+        let index = page + 1
+
+        guard elements.indices.contains(index) else {
+            if frames.indices.contains(page) {
+                active.frame = frames[page]
+            }
+            return
+        }
+
+        let element = elements[index]
+        guard frames.indices.contains(index - 1), frames.indices.contains(index) else { return }
+
+        let prev = frames[index - 1]
+        let prevColor = tintColor(position: index - 1)
+        let current = frames[index]
+        let currentColor = tintColor(position: index)
+
+        let elementTotal: CGFloat = current.origin.x - prev.origin.x
+        let elementProgress: CGFloat = current.origin.x - active.frame.origin.x
+        let elementPercent = (elementTotal - elementProgress) / elementTotal
+        
+        // x: input, a: input min, b: input max, c: output min, d: output max
+        // returns mapped value x from (a,b) to (c, d)
+        let linearTransform = { (x: CGFloat, a: CGFloat, b: CGFloat, c: CGFloat, d: CGFloat) -> CGFloat in
+            return (x - a) / (b - a) * (d - c) + c
+        }
+
+        element.frame = prev
+        element.frame.origin.x = linearTransform(elementPercent, 1.0, 0.0, prev.origin.x, current.origin.x)
+        element.backgroundColor = blend(color1: currentColor, color2: prevColor, progress: elementPercent).withAlphaComponent(self.inactiveTransparency).cgColor
+
+        if elementPercent <= 0.5 {
+            let originY = linearTransform(elementPercent, 0.0, 0.5, 0, self.radius + self.padding)
+            element.frame.origin.y = (page % 2 == 0 ? originY : -originY) + min.origin.y
+        } else {
+            let originY = linearTransform(elementPercent, 0.5, 1.0, self.radius + self.padding, 0)
+            element.frame.origin.y = (page % 2 == 0 ? originY : -originY) + min.origin.y
+        }
+        active.frame.origin.y = 2*min.origin.y - element.frame.origin.y
+    }
+
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(elements.count) * self.diameter + CGFloat(elements.count - 1) * self.padding,
+                      height: self.diameter)
+    }
+    
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if var touchIndex = elements.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            let intProgress = Int(progress)
+            if intProgress > 0 {
+                if touchIndex == 0 {
+                    touchIndex = intProgress
+                } else if touchIndex <= intProgress {
+                    touchIndex -= 1
+                }
+            }
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 161 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlJalapeno.swift

@@ -0,0 +1,161 @@
+//
+//  CHIPageControlJalapeno.swift.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+open class CHIPageControlJalapeno: CHIBasePageControl {
+    
+    internal var lastPage:Int = 0
+    
+    fileprivate var diameter: CGFloat {
+        return radius * 2
+    }
+    
+    fileprivate var inactive = [CHILayer]()
+    
+    fileprivate var active: CHILayer = CHILayer()
+
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        inactive.forEach { $0.removeFromSuperlayer() }
+        inactive = [CHILayer]()
+        inactive = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+
+        self.layer.addSublayer(active)
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+    
+    override func update(for progress: Double) {
+        guard progress >= 0 && progress <= Double(numberOfPages - 1),
+            let firstFrame = self.inactive.first?.frame,
+            numberOfPages > 1 else {
+                return
+        }
+        let left = firstFrame.origin.x
+        let normalized = progress * Double(diameter + padding)
+        
+        let currentPage = Int(progress)
+        let stepSize = (diameter + padding)
+        var leftX = CGFloat(currentPage)*stepSize+left
+        var rightX = CGFloat(normalized)+left
+        let stepProgress = progress - Double(currentPage)
+        
+        if abs(self.lastPage - currentPage) > 1 {
+            self.lastPage = currentPage + (self.lastPage > currentPage ? 1 : -1)
+        }
+        
+        var middleX = CGFloat(normalized)
+        if stepProgress > 0.5 {
+            if self.lastPage > currentPage {
+                rightX = CGFloat(self.lastPage)*stepSize + left
+                leftX = leftX + ((CGFloat(stepProgress)-0.5)*stepSize*2)
+                middleX = leftX
+            } else {
+                leftX = leftX + ((CGFloat(stepProgress)-0.5)*stepSize*2)
+                rightX = CGFloat(self.currentPage)*stepSize + left
+                middleX = rightX
+            }
+        } else if self.lastPage > currentPage {
+            rightX = CGFloat(self.lastPage)*stepSize - ((0.5-CGFloat(stepProgress))*stepSize*2) + left
+            middleX = leftX
+        } else {
+            rightX = rightX + (CGFloat(stepProgress)*stepSize)
+            middleX = rightX
+        }
+        
+        let top = (self.bounds.size.height - self.diameter)*0.5
+        
+        let points:[CGPoint] = [
+            CGPoint(x:leftX, y:radius + top),
+            CGPoint(x:middleX+radius, y:top),
+            CGPoint(x:rightX+radius*2, y:radius + top),
+            CGPoint(x:middleX+radius, y:radius*2 + top)
+        ]
+        
+        let offset: CGFloat = radius*0.55
+        
+        let path = UIBezierPath()
+        path.move(to: points[0])
+        path.addCurve(to: points[1], controlPoint1: CGPoint(x:points[0].x, y: points[0].y-offset), controlPoint2: CGPoint(x:points[1].x-offset, y: points[1].y))
+        path.addCurve(to: points[2], controlPoint1: CGPoint(x:points[1].x+offset, y: points[1].y), controlPoint2: CGPoint(x:points[2].x, y: points[2].y-offset))
+        path.addCurve(to: points[3], controlPoint1: CGPoint(x:points[2].x, y: points[2].y+offset), controlPoint2: CGPoint(x:points[3].x+offset, y: points[3].y))
+        path.addCurve(to: points[0], controlPoint1: CGPoint(x:points[3].x-offset, y: points[3].y), controlPoint2: CGPoint(x:points[0].x, y: points[0].y+offset))
+        self.active.path = path.cgPath
+        
+        if progress.truncatingRemainder(dividingBy: 1) == 0 {
+            self.lastPage = Int(progress)
+        }
+    }
+    
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        
+        let floatCount = CGFloat(inactive.count)
+        let x = (self.bounds.size.width - self.diameter*floatCount - self.padding*(floatCount-1))*0.5
+        let y = (self.bounds.size.height - self.diameter)*0.5
+        var frame = CGRect(x: x, y: y, width: self.diameter, height: self.diameter)
+        
+        inactive.enumerated().forEach() { index, layer in
+            layer.backgroundColor = self.tintColor(position: index).withAlphaComponent(self.inactiveTransparency).cgColor
+            if self.borderWidth > 0 {
+                layer.borderWidth = self.borderWidth
+                layer.borderColor = self.tintColor(position: index).cgColor
+            }
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.diameter + self.padding
+        }
+        self.active.fillColor = (self.currentPageTintColor ?? self.tintColor)?.cgColor
+        update(for: progress)
+    }
+    
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+    
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(inactive.count) * self.diameter + CGFloat(inactive.count - 1) * self.padding,
+                      height: self.diameter)
+    }
+    
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if let touchIndex = inactive.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 125 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlJaloro.swift

@@ -0,0 +1,125 @@
+//
+//  CHIPageControlJaloro.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+open class CHIPageControlJaloro: CHIBasePageControl {
+
+    @IBInspectable open var elementWidth: CGFloat = 20 {
+        didSet {
+            setNeedsLayout()
+        }
+    }
+
+    @IBInspectable open var elementHeight: CGFloat = 6 {
+        didSet {
+            setNeedsLayout()
+        }
+    }
+
+    fileprivate var inactive = [CHILayer]()
+    fileprivate var active = CHILayer()
+
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        inactive.forEach { $0.removeFromSuperlayer() }
+        inactive = [CHILayer]()
+        inactive = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+
+        self.layer.addSublayer(active)
+
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        
+        let floatCount = CGFloat(inactive.count)
+        let x = (self.bounds.size.width - self.elementWidth*floatCount - self.padding*(floatCount-1))*0.5
+        let y = (self.bounds.size.height - self.elementHeight)*0.5
+        var frame = CGRect(x: x, y: y, width: self.elementWidth, height: self.elementHeight)
+
+        active.cornerRadius = self.radius
+        active.backgroundColor = (self.currentPageTintColor ?? self.tintColor)?.cgColor
+        active.frame = frame
+
+        inactive.enumerated().forEach() { index, layer in
+            layer.backgroundColor = self.tintColor(position: index).withAlphaComponent(self.inactiveTransparency).cgColor
+            if self.borderWidth > 0 {
+                layer.borderWidth = self.borderWidth
+                layer.borderColor = self.tintColor(position: index).cgColor
+            }
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.elementWidth + self.padding
+        }
+        update(for: progress)
+    }
+
+    override func update(for progress: Double) {
+        guard let min = inactive.first?.frame,
+              let max = inactive.last?.frame,
+              progress >= 0 && progress <= Double(numberOfPages - 1),
+              numberOfPages > 1 else {
+                return
+        }
+
+        let total = Double(numberOfPages - 1)
+        let dist = max.origin.x - min.origin.x
+        let percent = CGFloat(progress / total)
+
+        let offset = dist * percent
+        active.frame.origin.x = min.origin.x + offset
+
+    }
+
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(inactive.count) * self.elementWidth + CGFloat(inactive.count - 1) * self.padding,
+                      height: self.elementHeight)
+    }
+
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if let touchIndex = inactive.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 179 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlPaprika.swift

@@ -0,0 +1,179 @@
+//
+//  CHIPageControlPaprika.swift.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+import Darwin
+
+open class CHIPageControlPaprika: CHIBasePageControl {
+    
+    fileprivate var diameter: CGFloat {
+        return radius * 2
+    }
+    
+    fileprivate var elements = [CHILayer]()
+    
+    fileprivate var frames = [CGRect]()
+    fileprivate var min: CGRect?
+    fileprivate var max: CGRect?
+    
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        elements.forEach { $0.removeFromSuperlayer() }
+        elements.forEach() { $0.removeFromSuperlayer() }
+        elements = [CHILayer]()
+        elements = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+        
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+    
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        
+        let floatCount = CGFloat(elements.count)
+        let x = (self.bounds.size.width - self.diameter*floatCount - self.padding*(floatCount-1))*0.5
+        let y = (self.bounds.size.height - self.diameter)*0.5
+        var frame = CGRect(x: x, y: y, width: self.diameter, height: self.diameter)
+        
+        elements.enumerated().forEach() { index, layer in
+            layer.backgroundColor = self.tintColor(position: index).withAlphaComponent(self.inactiveTransparency).cgColor
+            if self.borderWidth > 0 {
+                layer.borderWidth = self.borderWidth
+                layer.borderColor = self.tintColor(position: index).cgColor
+            }
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.diameter + self.padding
+        }
+
+        if let active = elements.first {
+            active.backgroundColor = (self.currentPageTintColor ?? self.tintColor)?.cgColor
+            active.borderWidth = 0
+        }
+        
+        min = elements.first?.frame
+        max = elements.last?.frame
+        
+        self.frames = elements.map { $0.frame }
+        update(for: progress)
+    }
+    
+    override func update(for progress: Double) {
+        guard let min = self.min,
+            let max = self.max,
+            numberOfPages > 1 else {
+                return
+        }
+        var progress = progress
+        if progress < 0 {
+            progress = 0
+        }
+        let total = Double(numberOfPages - 1)
+        if progress > total {
+            progress = total
+        }
+        
+        let page = Int(progress)
+        
+        for (index, _) in self.frames.enumerated() {
+            if page > index {
+                self.elements[index+1].frame = self.frames[index]
+            } else if page < index {
+                self.elements[index].frame = self.frames[index]
+            }
+        }
+        
+        let dist = max.origin.x - min.origin.x
+        let percent = CGFloat(progress / total)
+        
+        let offset = dist * percent
+        guard let active = elements.first else { return }
+        let x = min.origin.x + offset
+        
+        let spacePerItem = (dist+diameter+padding)/CGFloat(numberOfPages)
+        let r = (spacePerItem)/2
+        let yDirection: CGFloat = page%2 == 1 ? 1 : -1
+        active.frame.origin.x = x
+        let xBetweenPoints = x - CGFloat(page)*spacePerItem - min.origin.x
+        let y = sqrt(pow(Double(r), 2) - pow(fabs(Double(r)-Double(xBetweenPoints)), 2))
+        active.frame.origin.y = (y.isNaN ? 0 : CGFloat(y)*yDirection) + min.origin.y
+        
+        let index = page + 1
+        guard elements.indices.contains(index) else {
+            return
+        }
+        let element = elements[index]
+        guard frames.indices.contains(page), frames.indices.contains(page + 1) else { return }
+        
+        let prev = frames[page]
+        let prevColor = tintColor(position: page)
+        let current = frames[page + 1]
+        let currentColor = tintColor(position: page + 1)
+        
+        let elementTotal: CGFloat = current.origin.x - prev.origin.x
+        let elementProgress: CGFloat = current.origin.x - active.frame.origin.x
+        let elementPercent = (elementTotal - elementProgress) / elementTotal
+        
+        element.borderColor = blend(color1: currentColor, color2: prevColor, progress: elementPercent).cgColor
+        element.frame = prev
+        element.frame.origin.x += elementProgress
+        element.frame.origin.y = 2*min.origin.y - active.frame.origin.y
+    }
+    
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+    
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(elements.count) * self.diameter + CGFloat(elements.count - 1) * self.padding,
+                      height: self.diameter)
+    }
+    
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if var touchIndex = elements.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            let intProgress = Int(progress)
+            if intProgress > 0 {
+                if touchIndex == 0 {
+                    touchIndex = intProgress
+                } else if touchIndex <= intProgress {
+                    touchIndex -= 1
+                }
+            }
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 160 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlPuya.swift

@@ -0,0 +1,160 @@
+//
+//  CHIPageControlPuya.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+open class CHIPageControlPuya: CHIBasePageControl {
+
+    fileprivate var diameter: CGFloat {
+        return radius * 2
+    }
+
+    fileprivate var elements = [CHILayer]()
+
+    fileprivate var frames = [CGRect]()
+    fileprivate var min: CGRect?
+    fileprivate var max: CGRect?
+
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+
+    override func updateNumberOfPages(_ count: Int) {
+        elements.forEach { $0.removeFromSuperlayer() }
+        elements = [CHILayer]()
+        elements = (0..<count).map {_ in
+            let layer = CHILayer()
+            self.layer.addSublayer(layer)
+            return layer
+        }
+
+        setNeedsLayout()
+        self.invalidateIntrinsicContentSize()
+    }
+
+    override open func layoutSubviews() {
+        super.layoutSubviews()
+        
+        let floatCount = CGFloat(elements.count)
+        let x = (self.bounds.size.width - self.diameter*floatCount - self.padding*(floatCount-1))*0.5
+        let y = (self.bounds.size.height - self.diameter)*0.5
+        var frame = CGRect(x: x, y: y, width: self.diameter, height: self.diameter)
+
+        elements.enumerated().forEach() { index, layer in
+            layer.backgroundColor = self.tintColor(position: index).withAlphaComponent(self.inactiveTransparency).cgColor
+            if self.borderWidth > 0 {
+                layer.borderWidth = self.borderWidth
+                layer.borderColor = self.tintColor(position: index).cgColor
+            }
+            layer.cornerRadius = self.radius
+            layer.frame = frame
+            frame.origin.x += self.diameter + self.padding
+        }
+
+        if let active = elements.first {
+            active.backgroundColor = (self.currentPageTintColor ?? self.tintColor)?.cgColor
+            active.borderWidth = 0
+        }
+
+        min = elements.first?.frame
+        max = elements.last?.frame
+
+        self.frames = elements.map { $0.frame }
+        update(for: progress)
+    }
+
+    override func update(for progress: Double) {
+        guard let min = self.min,
+              let max = self.max,
+              progress >= 0 && progress <= Double(numberOfPages - 1),
+              numberOfPages > 1 else {
+                return
+        }
+
+        let total = Double(numberOfPages - 1)
+        let dist = max.origin.x - min.origin.x
+        let percent = CGFloat(progress / total)
+        let page = Int(progress)
+        
+        for (index, _) in self.frames.enumerated() {
+            if page > index {
+                self.elements[index+1].frame = self.frames[index]
+            } else if page < index {
+                self.elements[index].frame = self.frames[index]
+            }
+        }
+
+        let offset = dist * percent
+        guard let active = elements.first else { return }
+        active.frame.origin.x = min.origin.x + offset
+        active.borderWidth = 0
+
+        let index = page + 1
+        guard elements.indices.contains(index) else { return }
+        let element = elements[index]
+        guard frames.indices.contains(page), frames.indices.contains(page + 1) else { return }
+
+        let prev = frames[page]
+        let prevColor = tintColor(position: page)
+        let current = frames[page + 1]
+        let currentColor = tintColor(position: page + 1)
+        
+        let elementTotal: CGFloat = current.origin.x - prev.origin.x
+        let elementProgress: CGFloat = current.origin.x - active.frame.origin.x
+        let elementPercent = (elementTotal - elementProgress) / elementTotal
+        
+        element.backgroundColor = blend(color1: currentColor, color2: prevColor, progress: elementPercent).withAlphaComponent(self.inactiveTransparency).cgColor
+        element.frame = prev
+        element.frame.origin.x += elementProgress
+    }
+
+    override open var intrinsicContentSize: CGSize {
+        return sizeThatFits(CGSize.zero)
+    }
+
+    override open func sizeThatFits(_ size: CGSize) -> CGSize {
+        return CGSize(width: CGFloat(elements.count) * self.diameter + CGFloat(elements.count - 1) * self.padding,
+                      height: self.diameter)
+    }
+    
+    override open func didTouch(gesture: UITapGestureRecognizer) {
+        let point = gesture.location(ofTouch: 0, in: self)
+        if var touchIndex = elements.enumerated().first(where: { $0.element.hitTest(point) != nil })?.offset {
+            let intProgress = Int(progress)
+            if intProgress > 0 {
+                if touchIndex == 0 {
+                    touchIndex = intProgress
+                } else if touchIndex <= intProgress {
+                    touchIndex -= 1
+                }
+            }
+            delegate?.didTouch(pager: self, index: touchIndex)
+        }
+    }
+}

+ 270 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/Core/CHIBasePageControl.swift

@@ -0,0 +1,270 @@
+//
+//  CHIBasePageControl.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import UIKit
+
+@IBDesignable open class CHIBasePageControl: UIControl, CHIPageControllable {
+    
+    open weak var delegate: CHIBasePageControlDelegate?
+
+    @IBInspectable open var numberOfPages: Int = 0 {
+        didSet {
+            populateTintColors()
+            updateNumberOfPages(numberOfPages)
+            self.isHidden = hidesForSinglePage && numberOfPages <= 1
+        }
+    }
+    
+    @IBInspectable open var progress: Double = 0 {
+        didSet {
+            update(for: progress)
+        }
+    }
+    
+    open var currentPage: Int {
+        return Int(round(progress))
+    }
+    
+    
+    @IBInspectable open var padding: CGFloat = 5 {
+        didSet {
+            setNeedsLayout()
+            update(for: progress)
+        }
+    }
+    
+    @IBInspectable open var radius: CGFloat = 10 {
+        didSet {
+            setNeedsLayout()
+            update(for: progress)
+        }
+    }
+    
+    @IBInspectable open var inactiveTransparency: CGFloat = 0.4 {
+        didSet {
+            setNeedsLayout()
+            update(for: progress)
+        }
+    }
+    
+    @IBInspectable open var hidesForSinglePage: Bool = true {
+        didSet {
+            setNeedsLayout()
+        }
+    }
+    
+    @IBInspectable open var borderWidth: CGFloat = 0 {
+        didSet {
+            setNeedsLayout()
+        }
+    }
+    
+    override open var tintColor: UIColor! {
+        didSet {
+            setNeedsLayout()
+        }
+    }
+    
+    open var tintColors: [UIColor] = [] {
+        didSet {
+            guard tintColors.count == numberOfPages else {
+                fatalError("The number of tint colors needs to be the same as the number of page")
+            }
+            setNeedsLayout()
+        }
+    }
+
+    @IBInspectable open var currentPageTintColor: UIColor? {
+        didSet {
+            setNeedsLayout()
+        }
+    }
+
+    internal var moveToProgress: Double?
+    
+    private var displayLink: CADisplayLink?
+    
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+        setupDisplayLink()
+    }
+
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+        setupDisplayLink()
+    }
+    
+    internal func setupDisplayLink() {
+        self.displayLink = CADisplayLink(target: WeakProxy(self), selector: #selector(updateFrame))
+        self.displayLink?.add(to: .current, forMode: .common)
+    }
+
+    @objc internal func updateFrame() {
+        self.animate()
+    }
+    
+    open func set(progress: Int, animated: Bool) {
+        guard progress <= numberOfPages - 1 && progress >= 0 else { return }
+        if animated == true {
+            self.moveToProgress = Double(progress)
+        } else {
+            self.progress = Double(progress)
+        }
+    }
+    
+    func tintColor(position: Int) -> UIColor {
+        if tintColors.count < numberOfPages {
+            return tintColor
+        } else {
+            return tintColors[position]
+        }
+    }
+    
+    open func insertTintColor(_ color: UIColor, position: Int) {
+        if tintColors.count < numberOfPages {
+            setupTintColors()
+        }
+        tintColors[position] = color
+    }
+    
+    private func setupTintColors() {
+        tintColors = Array<UIColor>(repeating: tintColor, count: numberOfPages)
+    }
+    
+    private func populateTintColors() {
+        guard tintColors.count > 0 else { return }
+        
+        if tintColors.count > numberOfPages {
+            tintColors = Array(tintColors.prefix(numberOfPages))
+        } else if tintColors.count < numberOfPages {
+            tintColors.append(contentsOf: Array<UIColor>(repeating: tintColor, count: numberOfPages - tintColors.count))
+        }
+    }
+    
+    private var tapEvent: UITapGestureRecognizer?
+    @IBInspectable open var enableTouchEvents: Bool = false {
+        didSet {
+            enableTouchEvents ? enableTouch() : disableTouch()
+        }
+    }
+    
+    private func enableTouch() {
+        if tapEvent == nil {
+            setupTouchEvent()
+        }
+    }
+    
+    private func disableTouch() {
+        if tapEvent != nil {
+            removeGestureRecognizer(tapEvent!)
+            tapEvent = nil
+        }
+    }
+    
+    internal func setupTouchEvent() {
+        tapEvent = UITapGestureRecognizer(target: self, action: #selector(self.didTouch(gesture:)))
+        addGestureRecognizer(tapEvent!)
+    }
+    
+    @objc internal func didTouch(gesture: UITapGestureRecognizer) {}
+    
+    func animate() {
+        guard let moveToProgress = self.moveToProgress else { return }
+        
+        let a = fabsf(Float(moveToProgress))
+        let b = fabsf(Float(progress))
+        
+        if a > b {
+            self.progress += 0.1
+        }
+        if a < b {
+            self.progress -= 0.1
+        }
+        
+        if a == b {
+            self.progress = moveToProgress
+            self.moveToProgress = nil
+        }
+        
+        if self.progress < 0 {
+            self.progress = 0
+            self.moveToProgress = nil
+        }
+        
+        if self.progress > Double(numberOfPages - 1) {
+            self.progress = Double(numberOfPages - 1)
+            self.moveToProgress = nil
+        }
+    }
+    
+    func updateNumberOfPages(_ count: Int) {
+        fatalError("Should be implemented in child class")
+    }
+    
+    func update(for progress: Double) {
+        fatalError("Should be implemented in child class")
+    }
+
+    deinit {
+        self.displayLink?.remove(from: .current, forMode: .common)
+        self.displayLink?.invalidate()
+    }
+}
+
+extension CHIBasePageControl {
+    internal func blend(color1: UIColor, color2: UIColor, progress: CGFloat) -> UIColor {
+        let l1 = 1 - progress
+        let l2 = progress
+        var (r1, g1, b1, a1): (CGFloat, CGFloat, CGFloat, CGFloat) = (0, 0, 0, 0)
+        var (r2, g2, b2, a2): (CGFloat, CGFloat, CGFloat, CGFloat) = (0, 0, 0, 0)
+        
+        color1.getRed(&r1, green: &g1, blue: &b1, alpha: &a1)
+        color2.getRed(&r2, green: &g2, blue: &b2, alpha: &a2)
+        
+        return UIColor(red: l1*r1 + l2*r2, green: l1*g1 + l2*g2, blue: l1*b1 + l2*b2, alpha: l1*a1 + l2*a2)
+    }
+}
+
+public protocol CHIBasePageControlDelegate: class {
+    func didTouch(pager: CHIBasePageControl, index: Int)
+}
+
+final class WeakProxy: NSObject {
+    weak var target: NSObjectProtocol?
+
+    init(_ target: NSObjectProtocol) {
+        self.target = target
+        super.init()
+    }
+
+    override func responds(to aSelector: Selector!) -> Bool {
+        guard let target = target else { return super.responds(to: aSelector) }
+        return target.responds(to: aSelector)
+    }
+
+    override func forwardingTarget(for aSelector: Selector!) -> Any? {
+        return target
+    }
+}

+ 48 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/Core/CHILayer.swift

@@ -0,0 +1,48 @@
+//
+//  CHILayer.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+
+import QuartzCore
+
+class CHILayer: CAShapeLayer {
+
+
+    override init() {
+        super.init()
+        self.actions = [
+            "bounds": NSNull(),
+            "frame": NSNull(),
+            "position": NSNull()
+        ]
+    }
+    
+    override public init(layer: Any) {
+        super.init(layer: layer)
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+}

+ 38 - 0
KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/Core/CHIPageControllable.swift

@@ -0,0 +1,38 @@
+//
+//  CHIPageControllable.swift
+//  CHIPageControl  ( https://github.com/ChiliLabs/CHIPageControl )
+//
+//  Copyright (c) 2017 Chili ( http://chi.lv )
+//
+//
+// 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.
+
+import Foundation
+import CoreGraphics
+import UIKit
+
+protocol CHIPageControllable: class {
+    var numberOfPages: Int { get set }
+    var currentPage: Int { get }
+    var progress: Double { get set }
+    var hidesForSinglePage: Bool { get set }
+    var borderWidth: CGFloat { get set }
+
+    func set(progress: Int, animated: Bool)
+}

+ 21 - 0
KulexiuForStudent/Pods/CHIPageControl/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Chili
+
+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.

+ 116 - 0
KulexiuForStudent/Pods/CHIPageControl/README.md

@@ -0,0 +1,116 @@
+# CHIPageControl
+
+CHIPageControl is a set of cool animated page controls to replace boring UIPageControl.
+We were inspired by [Jardson Almeida dribbble shot](https://dribbble.com/shots/2578447-Page-Control-Indicator-Transitions-Collection) and implemented a few more page controls.
+
+Made with ❤️ by [Chili](http://chi.lv).
+
+## Overview
+
+<img src="Images/demo.gif" width="600" height="450">
+
+## Requirements
+
+* iOS 8.0+
+* Xcode 8+
+* Swift 3
+
+## Installation
+
+### Manually
+
+Just add the `CHIPageControl` folder to your project.
+
+### CocoaPods
+
+use [CocoaPods](https://cocoapods.org) with Podfile:
+``` ruby
+pod 'CHIPageControl', '~> 0.1.3'
+
+# individual page control
+pod 'CHIPageControl/Aji'
+pod 'CHIPageControl/Aleppo'
+pod 'CHIPageControl/Chimayo'
+pod 'CHIPageControl/Fresno'
+pod 'CHIPageControl/Jalapeno'
+pod 'CHIPageControl/Jaloro'
+pod 'CHIPageControl/Paprika'
+pod 'CHIPageControl/Puya'
+```
+### Carthage
+
+use [Carthage](https://github.com/Carthage/Carthage) with Cartfile
+```ogdl
+github "ChiliLabs/CHIPageControl" ~> 0.1.3
+```
+
+
+## Usage
+### 🎨 Storyboards
+Just drop UIView and set its class to be one of CHIPageControls.
+<img src="Images/ibdesignable.gif" width="800" height="564">
+### 💻 Code
+``` swift
+let pageControl = CHIPageControlAji(frame: CGRect(x: 0, y:0, width: 100, height: 20))
+pageControl.numberOfPages = 4
+pageControl.radius = 4
+pageControl.tintColor = .red
+pageControl.currentPageTintColor = .green
+pageControl.padding = 6
+```
+
+### Adding multiple tintColors
+``` swift
+// The size of the array needs to match the numberOfPages or it will throw an fatal error
+pageControl.tintColors = [UIColor.black, UIColor.yellow, UIColor.black, UIColor.black]
+
+// or
+
+// If it is the first one, it will fill all colors with the selected tintColor and then replace the colors with the desired one
+pageControl.insertTintColor(UIColor.yellow, position: 1)
+```
+
+### Updating progress
+``` swift
+//update dynamically
+pageControl.progress = 0.5
+
+//set progress with animation
+pageControl.set(progress: 2, animated: true)
+```
+
+### Touch events
+
+You can hear touch events in any of the page indicators. 
+``` swift
+pageControl.enableTouchEvents = true
+```
+
+### Delegate
+
+Implement the `CHIBasePageControlDelegate` to catch touch events.
+
+```swift
+func didTouch(pager: CHIBasePageControl, index: Int)
+```
+
+### Page Controls 🌶️🌶️🌶️
+
+<img src="Images/Aji.gif" width="100" height="50"> CHIPageControlAji
+
+<img src="Images/Aleppo.gif" width="100" height="50"> CHIPageControlAleppo
+
+<img src="Images/Chimayo.gif" width="100" height="50"> CHIPageControlChimayo
+
+<img src="Images/Fresno.gif" width="100" height="50"> CHIPageControlFresno
+
+<img src="Images/Jalapeno.gif" width="100" height="50"> CHIPageControlJalapeno
+
+<img src="Images/Jaloro.gif" width="100" height="50"> CHIPageControlJaloro
+
+<img src="Images/Paprika.gif" width="100" height="50"> CHIPageControlPaprika
+
+<img src="Images/Puya.gif" width="100" height="50"> CHIPageControlPuya
+
+## License
+CHIPageControl is released under the MIT license. See [LICENSE](./LICENSE) for details.

BIN
KulexiuForStudent/Pods/JCore/libjcore-noidfa-ios-2.6.2.a → KulexiuForStudent/Pods/JCore/libjcore-noidfa-ios-2.7.1.a


+ 27 - 3
KulexiuForStudent/Pods/Manifest.lock

@@ -15,6 +15,23 @@ PODS:
   - AFNetworking/UIKit (4.0.1):
     - AFNetworking/NSURLSession
   - Bugly (2.5.91)
+  - CHIPageControl (0.2):
+    - CHIPageControl/Aji (= 0.2)
+    - CHIPageControl/Aleppo (= 0.2)
+    - CHIPageControl/Chimayo (= 0.2)
+    - CHIPageControl/Fresno (= 0.2)
+    - CHIPageControl/Jalapeno (= 0.2)
+    - CHIPageControl/Jaloro (= 0.2)
+    - CHIPageControl/Paprika (= 0.2)
+    - CHIPageControl/Puya (= 0.2)
+  - CHIPageControl/Aji (0.2)
+  - CHIPageControl/Aleppo (0.2)
+  - CHIPageControl/Chimayo (0.2)
+  - CHIPageControl/Fresno (0.2)
+  - CHIPageControl/Jalapeno (0.2)
+  - CHIPageControl/Jaloro (0.2)
+  - CHIPageControl/Paprika (0.2)
+  - CHIPageControl/Puya (0.2)
   - dsBridge (3.0.6)
   - IQKeyboardManager (6.5.9)
   - JCore (2.7.1-noidfa)
@@ -85,10 +102,12 @@ PODS:
   - Whiteboard/Room (2.16.0):
     - Whiteboard/Base
   - YYModel (1.0.4)
+  - ZKCycleScrollView (2.0.1)
 
 DEPENDENCIES:
   - AFNetworking (~> 4.0)
   - Bugly
+  - CHIPageControl
   - IQKeyboardManager
   - JCore (= 2.7.1-noidfa)
   - JPush (= 4.3.0)
@@ -111,11 +130,13 @@ DEPENDENCIES:
   - UMCommon
   - UMDevice
   - Whiteboard
+  - ZKCycleScrollView
 
 SPEC REPOS:
   trunk:
     - AFNetworking
     - Bugly
+    - CHIPageControl
     - dsBridge
     - IQKeyboardManager
     - JCore
@@ -138,13 +159,15 @@ SPEC REPOS:
     - UMDevice
     - Whiteboard
     - YYModel
+    - ZKCycleScrollView
 
 SPEC CHECKSUMS:
   AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
   Bugly: afe841bba2ea6de6d432a3c125240a5e75949c55
+  CHIPageControl: a787bf7205c9b7e7fbfc412be36c5e8636b68f86
   dsBridge: 48b62ee8a411ad601a88d6f6c8cf6cb634b206b7
   IQKeyboardManager: 241cc94ccabc9deb8f8bd7d12f00d73288d13ecc
-  JCore: b7c28cfc056f83ab8fb0208ef50e3b91103bcdc5
+  JCore: b9d49b2e5364cce65dec86056c60b1b72825893a
   JPush: 88d6361fbec4be7c8b55b20b7fe1c292228f6bc2
   JXCategoryView: 2ef9ecfd3735158d009ce02d1f29811aa822da65
   JXPagingView: 90924b364a2ff7e94db534fad1fa50925ff69ee4
@@ -164,7 +187,8 @@ SPEC CHECKSUMS:
   UMDevice: 053478c4b4d7292f31f0a275c227d3c4007a5571
   Whiteboard: 16568e7e14f7f451d2aad2536f5fab9c06119934
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
+  ZKCycleScrollView: 4b353d17b7f469b245a1c606d5a977e72b940895
 
-PODFILE CHECKSUM: 077057c7fb9e9a5bf8ec20e2da1d4fb83d40811f
+PODFILE CHECKSUM: 04b96d3c9cef2ea6f6f511a9ef671b6b80141144
 
-COCOAPODS: 1.11.2
+COCOAPODS: 1.11.3

File diff suppressed because it is too large
+ 1402 - 1322
KulexiuForStudent/Pods/Pods.xcodeproj/project.pbxproj


+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/AFNetworking.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "0130B3724283586C0E9D2A112D4F2AA1"
+               BuildableName = "AFNetworking.framework"
+               BlueprintName = "AFNetworking"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Bugly.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "4A68CFD979D413A619DF631BB121D98F"
+               BuildableName = "Bugly"
+               BlueprintName = "Bugly"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/CHIPageControl.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "58A7AC722D45BA5EF49F00D98C86978B"
+               BuildableName = "CHIPageControl.framework"
+               BlueprintName = "CHIPageControl"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "FBA456CB50E371584C11231929A0971E"
+               BuildableName = "IQKeyboardManager.framework"
+               BlueprintName = "IQKeyboardManager"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JCore.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D504B99928659EA67A1C3A9E981EB8FF"
+               BuildableName = "JCore"
+               BlueprintName = "JCore"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JPush.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "5FB6AB0A09E7A2F2BE11AD6BAEFD9AED"
+               BuildableName = "JPush"
+               BlueprintName = "JPush"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JXCategoryView.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "8BEAFAA726C1965864B79B4B441AA513"
+               BuildableName = "JXCategoryView.framework"
+               BlueprintName = "JXCategoryView"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/JXPagingView.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "C4E1020AF425614337737213AA26DBD5"
+               BuildableName = "JXPagingView.framework"
+               BlueprintName = "JXPagingView"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/MBProgressHUD.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "82B0A41D3031FF27D78E17B0A9A46FB0"
+               BuildableName = "MBProgressHUD.framework"
+               BlueprintName = "MBProgressHUD"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/MJExtension.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "4D3BA58D0583DF37575CACAB3DDADC85"
+               BuildableName = "MJExtension.framework"
+               BlueprintName = "MJExtension"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/MJRefresh.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "6868056D761E163D10FDAF8CF1C4D9B8"
+               BuildableName = "MJRefresh.framework"
+               BlueprintName = "MJRefresh"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Masonry.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "55AF53E6C77A10ED4985E04D74A8878E"
+               BuildableName = "Masonry.framework"
+               BlueprintName = "Masonry"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Pods-KulexiuForStudent-KulexiuForStudentUITests.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "8DDC98D767E7887854DC0276CC8D9410"
+               BuildableName = "Pods_KulexiuForStudent_KulexiuForStudentUITests.framework"
+               BlueprintName = "Pods-KulexiuForStudent-KulexiuForStudentUITests"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Pods-KulexiuForStudent.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "3CF3409EE4D93CDE2F0DAADECC700323"
+               BuildableName = "Pods_KulexiuForStudent.framework"
+               BlueprintName = "Pods-KulexiuForStudent"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Pods-KulexiuForStudentTests.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "13DF30C4A7335EF3B7BD8F963015BE94"
+               BuildableName = "Pods_KulexiuForStudentTests.framework"
+               BlueprintName = "Pods-KulexiuForStudentTests"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/RSKImageCropper.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "A30157FD17984D82FB7B26EE61267BE2"
+               BuildableName = "RSKImageCropper.framework"
+               BlueprintName = "RSKImageCropper"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Reachability.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "CAA047C0F5E4106F3904E8497FA17F97"
+               BuildableName = "Reachability.framework"
+               BlueprintName = "Reachability"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/RongCloudIM.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "5F1390C193C1C7A4549931293D944BC0"
+               BuildableName = "RongCloudIM"
+               BlueprintName = "RongCloudIM"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/RongCloudRTC.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "29B0F2E16ACBECA336BD142098A9039C"
+               BuildableName = "RongCloudRTC"
+               BlueprintName = "RongCloudRTC"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/SDWebImage.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "3847153A6E5EEFB86565BA840768F429"
+               BuildableName = "SDWebImage.framework"
+               BlueprintName = "SDWebImage"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/SSZipArchive.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "F60E38364AFF5E1349FF07415B944396"
+               BuildableName = "SSZipArchive.framework"
+               BlueprintName = "SSZipArchive"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/SocketRocket.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "1948D0B63D2CF6A48E18B0B292BC6091"
+               BuildableName = "SocketRocket.framework"
+               BlueprintName = "SocketRocket"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/UMAPM.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "F1E09035B7675D89EC69B16728E2833E"
+               BuildableName = "UMAPM"
+               BlueprintName = "UMAPM"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/UMCommon.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "09FABB7D06BB8D3958515FB15B4E7971"
+               BuildableName = "UMCommon"
+               BlueprintName = "UMCommon"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/UMDevice.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "CEB9AD2C3CFC208BFBE1F22F5EC3E1FC"
+               BuildableName = "UMDevice"
+               BlueprintName = "UMDevice"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Whiteboard-Whiteboard.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "0EB9E06B4A4636CA9288D815FC9DBFC5"
+               BuildableName = "Whiteboard.bundle"
+               BlueprintName = "Whiteboard-Whiteboard"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/Whiteboard.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "887E769F555AF76F514A7276E2BA1CB8"
+               BuildableName = "Whiteboard.framework"
+               BlueprintName = "Whiteboard"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/YYModel.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "84B44807A12996D487A4A591A481D6A0"
+               BuildableName = "YYModel.framework"
+               BlueprintName = "YYModel"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/ZKCycleScrollView.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "36A2305B276FAAAA5356557E6EE334F5"
+               BuildableName = "ZKCycleScrollView.framework"
+               BlueprintName = "ZKCycleScrollView"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 58 - 0
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/dsBridge.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1240"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "1A6F633BD0A4B9EF892715BEB76AC948"
+               BuildableName = "dsBridge.framework"
+               BlueprintName = "dsBridge"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 125 - 53
KulexiuForStudent/Pods/Pods.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -4,146 +4,218 @@
 <dict>
 	<key>SchemeUserState</key>
 	<dict>
-		<key>AFNetworking.xcscheme_^#shared#^_</key>
+		<key>AFNetworking.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>12</integer>
+			<integer>0</integer>
 		</dict>
-		<key>Bugly.xcscheme_^#shared#^_</key>
+		<key>Bugly.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>2</integer>
+			<integer>1</integer>
 		</dict>
-		<key>IQKeyboardManager.xcscheme_^#shared#^_</key>
+		<key>CHIPageControl.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>23</integer>
+			<integer>2</integer>
 		</dict>
-		<key>JCore.xcscheme_^#shared#^_</key>
+		<key>IQKeyboardManager.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>6</integer>
+			<integer>4</integer>
 		</dict>
-		<key>JPush.xcscheme_^#shared#^_</key>
+		<key>JCore.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>26</integer>
+			<integer>5</integer>
 		</dict>
-		<key>JXCategoryView.xcscheme_^#shared#^_</key>
+		<key>JPush.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>1</integer>
+			<integer>6</integer>
 		</dict>
-		<key>JXPagingView.xcscheme_^#shared#^_</key>
+		<key>JXCategoryView.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>18</integer>
+			<integer>7</integer>
 		</dict>
-		<key>MBProgressHUD.xcscheme_^#shared#^_</key>
+		<key>JXPagingView.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
 			<integer>8</integer>
 		</dict>
-		<key>MJExtension.xcscheme_^#shared#^_</key>
+		<key>MBProgressHUD.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>7</integer>
+			<integer>10</integer>
 		</dict>
-		<key>MJRefresh.xcscheme_^#shared#^_</key>
+		<key>MJExtension.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>15</integer>
+			<integer>11</integer>
 		</dict>
-		<key>Masonry.xcscheme_^#shared#^_</key>
+		<key>MJRefresh.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>14</integer>
+			<integer>12</integer>
 		</dict>
-		<key>Pods-KulexiuForStudent-KulexiuForStudentUITests.xcscheme_^#shared#^_</key>
+		<key>Masonry.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>4</integer>
+			<integer>9</integer>
 		</dict>
-		<key>Pods-KulexiuForStudent.xcscheme_^#shared#^_</key>
+		<key>Pods-KulexiuForStudent-KulexiuForStudentUITests.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>20</integer>
+			<integer>14</integer>
 		</dict>
-		<key>Pods-KulexiuForStudentTests.xcscheme_^#shared#^_</key>
+		<key>Pods-KulexiuForStudent.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>3</integer>
+			<integer>13</integer>
 		</dict>
-		<key>RSKImageCropper.xcscheme_^#shared#^_</key>
+		<key>Pods-KulexiuForStudentTests.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>27</integer>
+			<integer>15</integer>
 		</dict>
-		<key>Reachability.xcscheme_^#shared#^_</key>
+		<key>RSKImageCropper.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>21</integer>
+			<integer>19</integer>
 		</dict>
-		<key>RongCloudIM.xcscheme_^#shared#^_</key>
+		<key>Reachability.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>13</integer>
+			<integer>16</integer>
 		</dict>
-		<key>RongCloudRTC.xcscheme_^#shared#^_</key>
+		<key>RongCloudIM.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
 			<integer>17</integer>
 		</dict>
-		<key>SDWebImage.xcscheme_^#shared#^_</key>
+		<key>RongCloudRTC.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>9</integer>
+			<integer>18</integer>
 		</dict>
-		<key>SSZipArchive.xcscheme_^#shared#^_</key>
+		<key>SDWebImage.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>16</integer>
+			<integer>20</integer>
 		</dict>
-		<key>SocketRocket.xcscheme_^#shared#^_</key>
+		<key>SSZipArchive.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>24</integer>
+			<integer>22</integer>
 		</dict>
-		<key>UMAPM.xcscheme_^#shared#^_</key>
+		<key>SocketRocket.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>11</integer>
+			<integer>21</integer>
 		</dict>
-		<key>UMCommon.xcscheme_^#shared#^_</key>
+		<key>UMAPM.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>5</integer>
+			<integer>23</integer>
 		</dict>
-		<key>UMDevice.xcscheme_^#shared#^_</key>
+		<key>UMCommon.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>28</integer>
+			<integer>24</integer>
 		</dict>
-		<key>Whiteboard-Whiteboard.xcscheme_^#shared#^_</key>
+		<key>UMDevice.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
 			<integer>25</integer>
 		</dict>
-		<key>Whiteboard.xcscheme_^#shared#^_</key>
+		<key>Whiteboard-Whiteboard.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>0</integer>
+			<integer>27</integer>
 		</dict>
-		<key>YYModel.xcscheme_^#shared#^_</key>
+		<key>Whiteboard.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>19</integer>
+			<integer>26</integer>
 		</dict>
-		<key>dsBridge.xcscheme_^#shared#^_</key>
+		<key>YYModel.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>22</integer>
+			<integer>28</integer>
+		</dict>
+		<key>ZKCycleScrollView.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>29</integer>
+		</dict>
+		<key>dsBridge.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>3</integer>
 		</dict>
 	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
 </dict>
 </plist>

+ 26 - 0
KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-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>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>0.2.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 5 - 0
KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-dummy.m

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

+ 12 - 0
KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-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
+

+ 16 - 0
KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl-umbrella.h

@@ -0,0 +1,16 @@
+#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
+
+
+FOUNDATION_EXPORT double CHIPageControlVersionNumber;
+FOUNDATION_EXPORT const unsigned char CHIPageControlVersionString[];
+

+ 13 - 0
KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl.debug.xcconfig

@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CHIPageControl
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/CHIPageControl
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 6 - 0
KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl.modulemap

@@ -0,0 +1,6 @@
+framework module CHIPageControl {
+  umbrella header "CHIPageControl-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 13 - 0
KulexiuForStudent/Pods/Target Support Files/CHIPageControl/CHIPageControl.release.xcconfig

@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CHIPageControl
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
+OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/CHIPageControl
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 1 - 1
KulexiuForStudent/Pods/Target Support Files/JCore/JCore.debug.xcconfig

@@ -2,7 +2,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JCore
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore"
-OTHER_LDFLAGS = $(inherited) -l"jcore-noidfa-ios-2.6.2" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
+OTHER_LDFLAGS = $(inherited) -l"jcore-noidfa-ios-2.7.1" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}

+ 1 - 1
KulexiuForStudent/Pods/Target Support Files/JCore/JCore.release.xcconfig

@@ -2,7 +2,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JCore
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore"
-OTHER_LDFLAGS = $(inherited) -l"jcore-noidfa-ios-2.6.2" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
+OTHER_LDFLAGS = $(inherited) -l"jcore-noidfa-ios-2.7.1" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UserNotifications"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_ROOT = ${SRCROOT}

+ 1 - 0
KulexiuForStudent/Pods/Target Support Files/JPush/JPush.debug.xcconfig

@@ -11,4 +11,5 @@ PODS_TARGET_SRCROOT = ${PODS_ROOT}/JPush
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
+SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_ROOT}/JCore"
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 1 - 0
KulexiuForStudent/Pods/Target Support Files/JPush/JPush.release.xcconfig

@@ -11,4 +11,5 @@ PODS_TARGET_SRCROOT = ${PODS_ROOT}/JPush
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
 PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
 SKIP_INSTALL = YES
+SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_ROOT}/JCore"
 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 49 - 0
KulexiuForStudent/Pods/Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests-acknowledgements.markdown

@@ -29,6 +29,30 @@ THE SOFTWARE.
 Copyright (C) 2017 Tencent Bugly, Inc. All rights reserved.
 
 
+## CHIPageControl
+
+The MIT License (MIT)
+
+Copyright (c) 2017 Chili
+
+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
@@ -391,4 +415,29 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
+
+## ZKCycleScrollView
+
+MIT License
+
+Copyright (c) 2019 bestDew
+
+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.
+
 Generated by CocoaPods - https://cocoapods.org

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