Browse Source

RTC 5.3.0.1

Steven 2 years ago
parent
commit
d24fa583c6
100 changed files with 6435 additions and 899 deletions
  1. 254 255
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 3 3
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  3. 14 14
      KulexiuForTeacher/KulexiuForTeacher/Common/Define/PrefixHeader.pch
  4. 9 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m
  5. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatUserDetailViewController.m
  6. 11 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m
  7. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Controller/ToneTuningViewController.m
  8. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/Metronome/WidgetSpeedView.m
  9. 48 5
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeView.m
  10. 10 10
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeViewStyle3D.m
  11. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeViewStyleFlatThin.h
  12. 20 15
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeViewStyleFlatThin.m
  13. 19 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/DialPlateView.h
  14. 51 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/DialPlateView.m
  15. 73 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/ToneTuningBodyView.h
  16. 170 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/ToneTuningBodyView.m
  17. 449 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/ToneTuningBodyView.xib
  18. 37 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TunerSettingView.h
  19. 92 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TunerSettingView.m
  20. 249 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TunerSettingView.xib
  21. 29 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningForkSettingView.h
  22. 231 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningForkSettingView.m
  23. 768 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningForkSettingView.xib
  24. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningNavView.h
  25. 52 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningNavView.m
  26. 92 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningNavView.xib
  27. 5 5
      KulexiuForTeacher/Podfile
  28. 19 19
      KulexiuForTeacher/Podfile.lock
  29. 19 19
      KulexiuForTeacher/Pods/Manifest.lock
  30. 318 270
      KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj
  31. 8 8
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/Info.plist
  32. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-arm64_armv7/RongChatRoom.framework/Info.plist
  33. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-arm64_armv7/RongChatRoom.framework/RongChatRoom
  34. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-arm64_armv7/RongChatRoom.framework/_CodeSignature/CodeResources
  35. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-i386_x86_64-simulator/RongChatRoom.framework/Info.plist
  36. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-i386_x86_64-simulator/RongChatRoom.framework/RongChatRoom
  37. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-i386_x86_64-simulator/RongChatRoom.framework/_CodeSignature/CodeResources
  38. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-arm64_armv7/RongCustomerService.framework/Info.plist
  39. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-arm64_armv7/RongCustomerService.framework/RongCustomerService
  40. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-arm64_armv7/RongCustomerService.framework/_CodeSignature/CodeResources
  41. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-i386_x86_64-simulator/RongCustomerService.framework/Info.plist
  42. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-i386_x86_64-simulator/RongCustomerService.framework/RongCustomerService
  43. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-i386_x86_64-simulator/RongCustomerService.framework/_CodeSignature/CodeResources
  44. 8 8
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/Info.plist
  45. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-arm64_armv7/RongDiscussion.framework/Info.plist
  46. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-arm64_armv7/RongDiscussion.framework/RongDiscussion
  47. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-arm64_armv7/RongDiscussion.framework/_CodeSignature/CodeResources
  48. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-i386_x86_64-simulator/RongDiscussion.framework/Info.plist
  49. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-i386_x86_64-simulator/RongDiscussion.framework/RongDiscussion
  50. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-i386_x86_64-simulator/RongDiscussion.framework/_CodeSignature/CodeResources
  51. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Headers/RCConversationModel.h
  52. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Headers/RCConversationViewController.h
  53. 5 0
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Headers/RCMessageCell.h
  54. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Info.plist
  55. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/RongIMKit
  56. 10 10
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/_CodeSignature/CodeResources
  57. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Headers/RCConversationModel.h
  58. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Headers/RCConversationViewController.h
  59. 5 0
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Headers/RCMessageCell.h
  60. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Info.plist
  61. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/RongIMKit
  62. 10 10
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/_CodeSignature/CodeResources
  63. 8 8
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/Info.plist
  64. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/Headers/RCIMClient.h
  65. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/Info.plist
  66. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/RongIMLib
  67. 4 4
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/_CodeSignature/CodeResources
  68. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/Headers/RCIMClient.h
  69. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/Info.plist
  70. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/RongIMLib
  71. 4 4
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/_CodeSignature/CodeResources
  72. 8 8
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/Info.plist
  73. 745 34
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCChannelClient.h
  74. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCConversation.h
  75. 775 30
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCCoreClient.h
  76. 1 0
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCMentionedInfo.h
  77. 73 9
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCStatusDefine.h
  78. 3 0
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RongIMLibCore.h
  79. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Info.plist
  80. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/RongIMLibCore
  81. 34 19
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/_CodeSignature/CodeResources
  82. 745 34
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCChannelClient.h
  83. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCConversation.h
  84. 775 30
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCCoreClient.h
  85. 1 0
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCMentionedInfo.h
  86. 73 9
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCStatusDefine.h
  87. 3 0
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RongIMLibCore.h
  88. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Info.plist
  89. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/RongIMLibCore
  90. 34 19
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/_CodeSignature/CodeResources
  91. 8 8
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/Info.plist
  92. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-arm64_armv7/RongPublicService.framework/Info.plist
  93. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-arm64_armv7/RongPublicService.framework/RongPublicService
  94. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-arm64_armv7/RongPublicService.framework/_CodeSignature/CodeResources
  95. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-i386_x86_64-simulator/RongPublicService.framework/Info.plist
  96. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-i386_x86_64-simulator/RongPublicService.framework/RongPublicService
  97. 1 1
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-i386_x86_64-simulator/RongPublicService.framework/_CodeSignature/CodeResources
  98. 8 8
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongSight.xcframework/Info.plist
  99. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongSight.xcframework/ios-arm64_armv7/RongSight.framework/Info.plist
  100. BIN
      KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongSight.xcframework/ios-arm64_armv7/RongSight.framework/RongSight

+ 254 - 255
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -415,18 +415,6 @@
 		BC0238062865C4F6005560CA /* KSLiveChatroomMemberUp.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0238052865C4F6005560CA /* KSLiveChatroomMemberUp.m */; };
 		BC0238092865C601005560CA /* KSRCShopRushMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0238082865C601005560CA /* KSRCShopRushMessage.m */; };
 		BC02380F2865C6F9005560CA /* RCChatroomLikeCount.m in Sources */ = {isa = PBXBuildFile; fileRef = BC02380D2865C6F9005560CA /* RCChatroomLikeCount.m */; };
-		BC026BC5290AA84C00BF0A6C /* KSGaugeView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BC2290AA84C00BF0A6C /* KSGaugeView.m */; };
-		BC026BC6290AA84C00BF0A6C /* KSGaugeColorView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BC3290AA84C00BF0A6C /* KSGaugeColorView.m */; };
-		BC026BC7290AA84C00BF0A6C /* KSGaugeSectorView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BC4290AA84C00BF0A6C /* KSGaugeSectorView.m */; };
-		BC026BD7290AA85F00BF0A6C /* TuningNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC026BC9290AA85F00BF0A6C /* TuningNavView.xib */; };
-		BC026BD8290AA85F00BF0A6C /* TuningNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BCB290AA85F00BF0A6C /* TuningNavView.m */; };
-		BC026BD9290AA85F00BF0A6C /* TuningForkSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC026BCC290AA85F00BF0A6C /* TuningForkSettingView.xib */; };
-		BC026BDA290AA85F00BF0A6C /* TunerSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC026BD0290AA85F00BF0A6C /* TunerSettingView.xib */; };
-		BC026BDB290AA85F00BF0A6C /* TunerSettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BD1290AA85F00BF0A6C /* TunerSettingView.m */; };
-		BC026BDC290AA85F00BF0A6C /* TuningForkSettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BD2290AA85F00BF0A6C /* TuningForkSettingView.m */; };
-		BC026BDD290AA85F00BF0A6C /* DialPlateView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BD3290AA85F00BF0A6C /* DialPlateView.m */; };
-		BC026BDE290AA85F00BF0A6C /* ToneTuningBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC026BD5290AA85F00BF0A6C /* ToneTuningBodyView.m */; };
-		BC026BDF290AA85F00BF0A6C /* ToneTuningBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC026BD6290AA85F00BF0A6C /* ToneTuningBodyView.xib */; };
 		BC02BCDA28B3243F005CB483 /* LiveSeatActionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC02BCD928B3243F005CB483 /* LiveSeatActionView.m */; };
 		BC02BCDD28B324A5005CB483 /* SeatBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC02BCDC28B324A5005CB483 /* SeatBodyView.m */; };
 		BC02BCE428B324C9005CB483 /* LiveApplyControlView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC02BCDE28B324C8005CB483 /* LiveApplyControlView.m */; };
@@ -603,6 +591,39 @@
 		BC58E7D5281B9637004B0893 /* PublicNoticeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC58E7D4281B9637004B0893 /* PublicNoticeView.xib */; };
 		BC58E7DD281B969B004B0893 /* MinePageTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC58E7DC281B969B004B0893 /* MinePageTopView.m */; };
 		BC58E7DF281B96A4004B0893 /* MinePageTopView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC58E7DE281B96A4004B0893 /* MinePageTopView.xib */; };
+		BC5E4B18291E5E26001BBCD2 /* WidgetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4ADB291E5E26001BBCD2 /* WidgetViewController.m */; };
+		BC5E4B19291E5E26001BBCD2 /* ToneTuningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4ADC291E5E26001BBCD2 /* ToneTuningViewController.m */; };
+		BC5E4B1A291E5E26001BBCD2 /* SmallToolViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4ADE291E5E26001BBCD2 /* SmallToolViewController.m */; };
+		BC5E4B1B291E5E26001BBCD2 /* Tuner.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AE3291E5E26001BBCD2 /* Tuner.swift */; };
+		BC5E4B1C291E5E26001BBCD2 /* TunerForkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AE4291E5E26001BBCD2 /* TunerForkManager.swift */; };
+		BC5E4B1D291E5E26001BBCD2 /* KSMetronomePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AE5291E5E26001BBCD2 /* KSMetronomePlayer.m */; };
+		BC5E4B1E291E5E26001BBCD2 /* SmallToolBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AE7291E5E26001BBCD2 /* SmallToolBodyView.m */; };
+		BC5E4B1F291E5E26001BBCD2 /* KSGaugeView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AEC291E5E26001BBCD2 /* KSGaugeView.m */; };
+		BC5E4B20291E5E26001BBCD2 /* KSGaugeColorView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AED291E5E26001BBCD2 /* KSGaugeColorView.m */; };
+		BC5E4B21291E5E26001BBCD2 /* KSGaugeSectorView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AEE291E5E26001BBCD2 /* KSGaugeSectorView.m */; };
+		BC5E4B22291E5E26001BBCD2 /* SmallToolBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4AEF291E5E26001BBCD2 /* SmallToolBodyView.xib */; };
+		BC5E4B23291E5E26001BBCD2 /* TuningNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4AF1291E5E26001BBCD2 /* TuningNavView.xib */; };
+		BC5E4B24291E5E26001BBCD2 /* TuningNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AF3291E5E26001BBCD2 /* TuningNavView.m */; };
+		BC5E4B25291E5E26001BBCD2 /* TuningForkSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4AF4291E5E26001BBCD2 /* TuningForkSettingView.xib */; };
+		BC5E4B26291E5E26001BBCD2 /* TunerSettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4AF8291E5E26001BBCD2 /* TunerSettingView.xib */; };
+		BC5E4B27291E5E26001BBCD2 /* TunerSettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AF9291E5E26001BBCD2 /* TunerSettingView.m */; };
+		BC5E4B28291E5E26001BBCD2 /* TuningForkSettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AFA291E5E26001BBCD2 /* TuningForkSettingView.m */; };
+		BC5E4B29291E5E26001BBCD2 /* DialPlateView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AFB291E5E26001BBCD2 /* DialPlateView.m */; };
+		BC5E4B2A291E5E26001BBCD2 /* ToneTuningBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4AFD291E5E26001BBCD2 /* ToneTuningBodyView.m */; };
+		BC5E4B2B291E5E26001BBCD2 /* ToneTuningBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4AFE291E5E26001BBCD2 /* ToneTuningBodyView.xib */; };
+		BC5E4B2C291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B03291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.m */; };
+		BC5E4B2D291E5E26001BBCD2 /* WMGaugeViewStyle3D.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B05291E5E26001BBCD2 /* WMGaugeViewStyle3D.m */; };
+		BC5E4B2E291E5E26001BBCD2 /* WMGaugeView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B06291E5E26001BBCD2 /* WMGaugeView.m */; };
+		BC5E4B2F291E5E26001BBCD2 /* WidgetFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B09291E5E26001BBCD2 /* WidgetFunctionView.m */; };
+		BC5E4B30291E5E26001BBCD2 /* WidgetNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B0A291E5E26001BBCD2 /* WidgetNavView.m */; };
+		BC5E4B31291E5E26001BBCD2 /* WidgetSpeedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4B0B291E5E26001BBCD2 /* WidgetSpeedView.xib */; };
+		BC5E4B32291E5E26001BBCD2 /* WidgetBottomButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B0C291E5E26001BBCD2 /* WidgetBottomButtonView.m */; };
+		BC5E4B33291E5E26001BBCD2 /* WidgetDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B0E291E5E26001BBCD2 /* WidgetDotView.m */; };
+		BC5E4B34291E5E26001BBCD2 /* WidgetNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4B0F291E5E26001BBCD2 /* WidgetNavView.xib */; };
+		BC5E4B35291E5E26001BBCD2 /* WidgetFunctionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4B10291E5E26001BBCD2 /* WidgetFunctionView.xib */; };
+		BC5E4B36291E5E26001BBCD2 /* WidgetDotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4B11291E5E26001BBCD2 /* WidgetDotView.xib */; };
+		BC5E4B37291E5E26001BBCD2 /* WidgetSpeedView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5E4B12291E5E26001BBCD2 /* WidgetSpeedView.m */; };
+		BC5E4B38291E5E26001BBCD2 /* WidgetBottomButtonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5E4B14291E5E26001BBCD2 /* WidgetBottomButtonView.xib */; };
 		BC5EB5A92803D85300B4A3B0 /* AccompanyAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB5A82803D85300B4A3B0 /* AccompanyAlertView.m */; };
 		BC5EB5AB2803D86500B4A3B0 /* AccompanyAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC5EB5AA2803D86500B4A3B0 /* AccompanyAlertView.xib */; };
 		BC5EB5B22804027500B4A3B0 /* MyStyleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB5B12804027500B4A3B0 /* MyStyleViewController.m */; };
@@ -1032,27 +1053,6 @@
 		BCFE54182817BDFD00AD6786 /* IncomeHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE54172817BDFD00AD6786 /* IncomeHeaderView.m */; };
 		BCFE541A2817BE0800AD6786 /* IncomeHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFE54192817BE0800AD6786 /* IncomeHeaderView.xib */; };
 		BCFF4814290172C600E9293A /* AudioKit in Frameworks */ = {isa = PBXBuildFile; productRef = BCFF4813290172C600E9293A /* AudioKit */; };
-		BCFF51692901743400E9293A /* WidgetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF51332901743300E9293A /* WidgetViewController.m */; };
-		BCFF516A2901743400E9293A /* ToneTuningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF51342901743300E9293A /* ToneTuningViewController.m */; };
-		BCFF516B2901743400E9293A /* SmallToolViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF51362901743300E9293A /* SmallToolViewController.m */; };
-		BCFF516C2901743400E9293A /* Tuner.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCFF513B2901743300E9293A /* Tuner.swift */; };
-		BCFF516D2901743500E9293A /* TunerForkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCFF513C2901743300E9293A /* TunerForkManager.swift */; };
-		BCFF516E2901743500E9293A /* KSMetronomePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF513D2901743300E9293A /* KSMetronomePlayer.m */; };
-		BCFF516F2901743500E9293A /* SmallToolBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF513F2901743300E9293A /* SmallToolBodyView.m */; };
-		BCFF51702901743500E9293A /* SmallToolBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFF51402901743300E9293A /* SmallToolBodyView.xib */; };
-		BCFF517A2901743500E9293A /* WMGaugeViewStyleFlatThin.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF51542901743400E9293A /* WMGaugeViewStyleFlatThin.m */; };
-		BCFF517B2901743500E9293A /* WMGaugeViewStyle3D.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF51562901743400E9293A /* WMGaugeViewStyle3D.m */; };
-		BCFF517C2901743500E9293A /* WMGaugeView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF51572901743400E9293A /* WMGaugeView.m */; };
-		BCFF517D2901743500E9293A /* WidgetFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF515A2901743400E9293A /* WidgetFunctionView.m */; };
-		BCFF517E2901743500E9293A /* WidgetNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF515B2901743400E9293A /* WidgetNavView.m */; };
-		BCFF517F2901743500E9293A /* WidgetSpeedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFF515C2901743400E9293A /* WidgetSpeedView.xib */; };
-		BCFF51802901743500E9293A /* WidgetBottomButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF515D2901743400E9293A /* WidgetBottomButtonView.m */; };
-		BCFF51812901743500E9293A /* WidgetDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF515F2901743400E9293A /* WidgetDotView.m */; };
-		BCFF51822901743500E9293A /* WidgetNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFF51602901743400E9293A /* WidgetNavView.xib */; };
-		BCFF51832901743500E9293A /* WidgetFunctionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFF51612901743400E9293A /* WidgetFunctionView.xib */; };
-		BCFF51842901743500E9293A /* WidgetDotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFF51622901743400E9293A /* WidgetDotView.xib */; };
-		BCFF51852901743500E9293A /* WidgetSpeedView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFF51632901743400E9293A /* WidgetSpeedView.m */; };
-		BCFF51862901743500E9293A /* WidgetBottomButtonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFF51652901743400E9293A /* WidgetBottomButtonView.xib */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -1823,26 +1823,6 @@
 		BC0238082865C601005560CA /* KSRCShopRushMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSRCShopRushMessage.m; sourceTree = "<group>"; };
 		BC02380D2865C6F9005560CA /* RCChatroomLikeCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCChatroomLikeCount.m; sourceTree = "<group>"; };
 		BC02380E2865C6F9005560CA /* RCChatroomLikeCount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCChatroomLikeCount.h; sourceTree = "<group>"; };
-		BC026BBF290AA84C00BF0A6C /* KSGaugeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGaugeView.h; sourceTree = "<group>"; };
-		BC026BC0290AA84C00BF0A6C /* KSGaugeColorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGaugeColorView.h; sourceTree = "<group>"; };
-		BC026BC1290AA84C00BF0A6C /* KSGaugeSectorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGaugeSectorView.h; sourceTree = "<group>"; };
-		BC026BC2290AA84C00BF0A6C /* KSGaugeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGaugeView.m; sourceTree = "<group>"; };
-		BC026BC3290AA84C00BF0A6C /* KSGaugeColorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGaugeColorView.m; sourceTree = "<group>"; };
-		BC026BC4290AA84C00BF0A6C /* KSGaugeSectorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGaugeSectorView.m; sourceTree = "<group>"; };
-		BC026BC9290AA85F00BF0A6C /* TuningNavView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TuningNavView.xib; sourceTree = "<group>"; };
-		BC026BCA290AA85F00BF0A6C /* TunerSettingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TunerSettingView.h; sourceTree = "<group>"; };
-		BC026BCB290AA85F00BF0A6C /* TuningNavView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TuningNavView.m; sourceTree = "<group>"; };
-		BC026BCC290AA85F00BF0A6C /* TuningForkSettingView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TuningForkSettingView.xib; sourceTree = "<group>"; };
-		BC026BCD290AA85F00BF0A6C /* DialPlateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialPlateView.h; sourceTree = "<group>"; };
-		BC026BCE290AA85F00BF0A6C /* TuningForkSettingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TuningForkSettingView.h; sourceTree = "<group>"; };
-		BC026BCF290AA85F00BF0A6C /* ToneTuningBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToneTuningBodyView.h; sourceTree = "<group>"; };
-		BC026BD0290AA85F00BF0A6C /* TunerSettingView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TunerSettingView.xib; sourceTree = "<group>"; };
-		BC026BD1290AA85F00BF0A6C /* TunerSettingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TunerSettingView.m; sourceTree = "<group>"; };
-		BC026BD2290AA85F00BF0A6C /* TuningForkSettingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TuningForkSettingView.m; sourceTree = "<group>"; };
-		BC026BD3290AA85F00BF0A6C /* DialPlateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DialPlateView.m; sourceTree = "<group>"; };
-		BC026BD4290AA85F00BF0A6C /* TuningNavView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TuningNavView.h; sourceTree = "<group>"; };
-		BC026BD5290AA85F00BF0A6C /* ToneTuningBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToneTuningBodyView.m; sourceTree = "<group>"; };
-		BC026BD6290AA85F00BF0A6C /* ToneTuningBodyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ToneTuningBodyView.xib; sourceTree = "<group>"; };
 		BC02BCD828B3243F005CB483 /* LiveSeatActionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveSeatActionView.h; sourceTree = "<group>"; };
 		BC02BCD928B3243F005CB483 /* LiveSeatActionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveSeatActionView.m; sourceTree = "<group>"; };
 		BC02BCDB28B324A5005CB483 /* SeatBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SeatBodyView.h; sourceTree = "<group>"; };
@@ -2126,6 +2106,62 @@
 		BC58E7DB281B969B004B0893 /* MinePageTopView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageTopView.h; sourceTree = "<group>"; };
 		BC58E7DC281B969B004B0893 /* MinePageTopView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageTopView.m; sourceTree = "<group>"; };
 		BC58E7DE281B96A4004B0893 /* MinePageTopView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageTopView.xib; sourceTree = "<group>"; };
+		BC5E4AD9291E5E26001BBCD2 /* ToneTuningViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToneTuningViewController.h; sourceTree = "<group>"; };
+		BC5E4ADA291E5E26001BBCD2 /* SmallToolViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmallToolViewController.h; sourceTree = "<group>"; };
+		BC5E4ADB291E5E26001BBCD2 /* WidgetViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetViewController.m; sourceTree = "<group>"; };
+		BC5E4ADC291E5E26001BBCD2 /* ToneTuningViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToneTuningViewController.m; sourceTree = "<group>"; };
+		BC5E4ADD291E5E26001BBCD2 /* WidgetViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetViewController.h; sourceTree = "<group>"; };
+		BC5E4ADE291E5E26001BBCD2 /* SmallToolViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmallToolViewController.m; sourceTree = "<group>"; };
+		BC5E4AE0291E5E26001BBCD2 /* KSMetronomePlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSMetronomePlayer.h; sourceTree = "<group>"; };
+		BC5E4AE2291E5E26001BBCD2 /* KulexiuForTeacher-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KulexiuForTeacher-Bridging-Header.h"; sourceTree = "<group>"; };
+		BC5E4AE3291E5E26001BBCD2 /* Tuner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tuner.swift; sourceTree = "<group>"; };
+		BC5E4AE4291E5E26001BBCD2 /* TunerForkManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunerForkManager.swift; sourceTree = "<group>"; };
+		BC5E4AE5291E5E26001BBCD2 /* KSMetronomePlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSMetronomePlayer.m; sourceTree = "<group>"; };
+		BC5E4AE7291E5E26001BBCD2 /* SmallToolBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmallToolBodyView.m; sourceTree = "<group>"; };
+		BC5E4AE9291E5E26001BBCD2 /* KSGaugeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGaugeView.h; sourceTree = "<group>"; };
+		BC5E4AEA291E5E26001BBCD2 /* KSGaugeColorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGaugeColorView.h; sourceTree = "<group>"; };
+		BC5E4AEB291E5E26001BBCD2 /* KSGaugeSectorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGaugeSectorView.h; sourceTree = "<group>"; };
+		BC5E4AEC291E5E26001BBCD2 /* KSGaugeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGaugeView.m; sourceTree = "<group>"; };
+		BC5E4AED291E5E26001BBCD2 /* KSGaugeColorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGaugeColorView.m; sourceTree = "<group>"; };
+		BC5E4AEE291E5E26001BBCD2 /* KSGaugeSectorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGaugeSectorView.m; sourceTree = "<group>"; };
+		BC5E4AEF291E5E26001BBCD2 /* SmallToolBodyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SmallToolBodyView.xib; sourceTree = "<group>"; };
+		BC5E4AF1291E5E26001BBCD2 /* TuningNavView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TuningNavView.xib; sourceTree = "<group>"; };
+		BC5E4AF2291E5E26001BBCD2 /* TunerSettingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TunerSettingView.h; sourceTree = "<group>"; };
+		BC5E4AF3291E5E26001BBCD2 /* TuningNavView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TuningNavView.m; sourceTree = "<group>"; };
+		BC5E4AF4291E5E26001BBCD2 /* TuningForkSettingView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TuningForkSettingView.xib; sourceTree = "<group>"; };
+		BC5E4AF5291E5E26001BBCD2 /* DialPlateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialPlateView.h; sourceTree = "<group>"; };
+		BC5E4AF6291E5E26001BBCD2 /* TuningForkSettingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TuningForkSettingView.h; sourceTree = "<group>"; };
+		BC5E4AF7291E5E26001BBCD2 /* ToneTuningBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToneTuningBodyView.h; sourceTree = "<group>"; };
+		BC5E4AF8291E5E26001BBCD2 /* TunerSettingView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TunerSettingView.xib; sourceTree = "<group>"; };
+		BC5E4AF9291E5E26001BBCD2 /* TunerSettingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TunerSettingView.m; sourceTree = "<group>"; };
+		BC5E4AFA291E5E26001BBCD2 /* TuningForkSettingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TuningForkSettingView.m; sourceTree = "<group>"; };
+		BC5E4AFB291E5E26001BBCD2 /* DialPlateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DialPlateView.m; sourceTree = "<group>"; };
+		BC5E4AFC291E5E26001BBCD2 /* TuningNavView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TuningNavView.h; sourceTree = "<group>"; };
+		BC5E4AFD291E5E26001BBCD2 /* ToneTuningBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToneTuningBodyView.m; sourceTree = "<group>"; };
+		BC5E4AFE291E5E26001BBCD2 /* ToneTuningBodyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ToneTuningBodyView.xib; sourceTree = "<group>"; };
+		BC5E4AFF291E5E26001BBCD2 /* SmallToolBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmallToolBodyView.h; sourceTree = "<group>"; };
+		BC5E4B01291E5E26001BBCD2 /* WMGaugeViewStyle3D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeViewStyle3D.h; sourceTree = "<group>"; };
+		BC5E4B02291E5E26001BBCD2 /* WMGaugeViewStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeViewStyle.h; sourceTree = "<group>"; };
+		BC5E4B03291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMGaugeViewStyleFlatThin.m; sourceTree = "<group>"; };
+		BC5E4B04291E5E26001BBCD2 /* WMGaugeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeView.h; sourceTree = "<group>"; };
+		BC5E4B05291E5E26001BBCD2 /* WMGaugeViewStyle3D.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMGaugeViewStyle3D.m; sourceTree = "<group>"; };
+		BC5E4B06291E5E26001BBCD2 /* WMGaugeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMGaugeView.m; sourceTree = "<group>"; };
+		BC5E4B07291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeViewStyleFlatThin.h; sourceTree = "<group>"; };
+		BC5E4B09291E5E26001BBCD2 /* WidgetFunctionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetFunctionView.m; sourceTree = "<group>"; };
+		BC5E4B0A291E5E26001BBCD2 /* WidgetNavView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetNavView.m; sourceTree = "<group>"; };
+		BC5E4B0B291E5E26001BBCD2 /* WidgetSpeedView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetSpeedView.xib; sourceTree = "<group>"; };
+		BC5E4B0C291E5E26001BBCD2 /* WidgetBottomButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetBottomButtonView.m; sourceTree = "<group>"; };
+		BC5E4B0D291E5E26001BBCD2 /* WidgetSpeedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetSpeedView.h; sourceTree = "<group>"; };
+		BC5E4B0E291E5E26001BBCD2 /* WidgetDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetDotView.m; sourceTree = "<group>"; };
+		BC5E4B0F291E5E26001BBCD2 /* WidgetNavView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetNavView.xib; sourceTree = "<group>"; };
+		BC5E4B10291E5E26001BBCD2 /* WidgetFunctionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetFunctionView.xib; sourceTree = "<group>"; };
+		BC5E4B11291E5E26001BBCD2 /* WidgetDotView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetDotView.xib; sourceTree = "<group>"; };
+		BC5E4B12291E5E26001BBCD2 /* WidgetSpeedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetSpeedView.m; sourceTree = "<group>"; };
+		BC5E4B13291E5E26001BBCD2 /* WidgetBottomButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetBottomButtonView.h; sourceTree = "<group>"; };
+		BC5E4B14291E5E26001BBCD2 /* WidgetBottomButtonView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetBottomButtonView.xib; sourceTree = "<group>"; };
+		BC5E4B15291E5E26001BBCD2 /* WidgetNavView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetNavView.h; sourceTree = "<group>"; };
+		BC5E4B16291E5E26001BBCD2 /* WidgetFunctionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetFunctionView.h; sourceTree = "<group>"; };
+		BC5E4B17291E5E26001BBCD2 /* WidgetDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetDotView.h; sourceTree = "<group>"; };
 		BC5EB5A72803D85300B4A3B0 /* AccompanyAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccompanyAlertView.h; sourceTree = "<group>"; };
 		BC5EB5A82803D85300B4A3B0 /* AccompanyAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AccompanyAlertView.m; sourceTree = "<group>"; };
 		BC5EB5AA2803D86500B4A3B0 /* AccompanyAlertView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AccompanyAlertView.xib; sourceTree = "<group>"; };
@@ -2811,42 +2847,6 @@
 		BCFE54162817BDFD00AD6786 /* IncomeHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IncomeHeaderView.h; sourceTree = "<group>"; };
 		BCFE54172817BDFD00AD6786 /* IncomeHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IncomeHeaderView.m; sourceTree = "<group>"; };
 		BCFE54192817BE0800AD6786 /* IncomeHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IncomeHeaderView.xib; sourceTree = "<group>"; };
-		BCFF4815290172E400E9293A /* KulexiuForTeacher-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KulexiuForTeacher-Bridging-Header.h"; sourceTree = "<group>"; };
-		BCFF51312901743300E9293A /* ToneTuningViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToneTuningViewController.h; sourceTree = "<group>"; };
-		BCFF51322901743300E9293A /* SmallToolViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmallToolViewController.h; sourceTree = "<group>"; };
-		BCFF51332901743300E9293A /* WidgetViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetViewController.m; sourceTree = "<group>"; };
-		BCFF51342901743300E9293A /* ToneTuningViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToneTuningViewController.m; sourceTree = "<group>"; };
-		BCFF51352901743300E9293A /* WidgetViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetViewController.h; sourceTree = "<group>"; };
-		BCFF51362901743300E9293A /* SmallToolViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmallToolViewController.m; sourceTree = "<group>"; };
-		BCFF51382901743300E9293A /* KSMetronomePlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSMetronomePlayer.h; sourceTree = "<group>"; };
-		BCFF513B2901743300E9293A /* Tuner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tuner.swift; sourceTree = "<group>"; };
-		BCFF513C2901743300E9293A /* TunerForkManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunerForkManager.swift; sourceTree = "<group>"; };
-		BCFF513D2901743300E9293A /* KSMetronomePlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSMetronomePlayer.m; sourceTree = "<group>"; };
-		BCFF513F2901743300E9293A /* SmallToolBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SmallToolBodyView.m; sourceTree = "<group>"; };
-		BCFF51402901743300E9293A /* SmallToolBodyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SmallToolBodyView.xib; sourceTree = "<group>"; };
-		BCFF51502901743400E9293A /* SmallToolBodyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmallToolBodyView.h; sourceTree = "<group>"; };
-		BCFF51522901743400E9293A /* WMGaugeViewStyle3D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeViewStyle3D.h; sourceTree = "<group>"; };
-		BCFF51532901743400E9293A /* WMGaugeViewStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeViewStyle.h; sourceTree = "<group>"; };
-		BCFF51542901743400E9293A /* WMGaugeViewStyleFlatThin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMGaugeViewStyleFlatThin.m; sourceTree = "<group>"; };
-		BCFF51552901743400E9293A /* WMGaugeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeView.h; sourceTree = "<group>"; };
-		BCFF51562901743400E9293A /* WMGaugeViewStyle3D.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMGaugeViewStyle3D.m; sourceTree = "<group>"; };
-		BCFF51572901743400E9293A /* WMGaugeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WMGaugeView.m; sourceTree = "<group>"; };
-		BCFF51582901743400E9293A /* WMGaugeViewStyleFlatThin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMGaugeViewStyleFlatThin.h; sourceTree = "<group>"; };
-		BCFF515A2901743400E9293A /* WidgetFunctionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetFunctionView.m; sourceTree = "<group>"; };
-		BCFF515B2901743400E9293A /* WidgetNavView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetNavView.m; sourceTree = "<group>"; };
-		BCFF515C2901743400E9293A /* WidgetSpeedView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetSpeedView.xib; sourceTree = "<group>"; };
-		BCFF515D2901743400E9293A /* WidgetBottomButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetBottomButtonView.m; sourceTree = "<group>"; };
-		BCFF515E2901743400E9293A /* WidgetSpeedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetSpeedView.h; sourceTree = "<group>"; };
-		BCFF515F2901743400E9293A /* WidgetDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetDotView.m; sourceTree = "<group>"; };
-		BCFF51602901743400E9293A /* WidgetNavView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetNavView.xib; sourceTree = "<group>"; };
-		BCFF51612901743400E9293A /* WidgetFunctionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetFunctionView.xib; sourceTree = "<group>"; };
-		BCFF51622901743400E9293A /* WidgetDotView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetDotView.xib; sourceTree = "<group>"; };
-		BCFF51632901743400E9293A /* WidgetSpeedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetSpeedView.m; sourceTree = "<group>"; };
-		BCFF51642901743400E9293A /* WidgetBottomButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetBottomButtonView.h; sourceTree = "<group>"; };
-		BCFF51652901743400E9293A /* WidgetBottomButtonView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetBottomButtonView.xib; sourceTree = "<group>"; };
-		BCFF51662901743400E9293A /* WidgetNavView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetNavView.h; sourceTree = "<group>"; };
-		BCFF51672901743400E9293A /* WidgetFunctionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetFunctionView.h; sourceTree = "<group>"; };
-		BCFF51682901743400E9293A /* WidgetDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetDotView.h; sourceTree = "<group>"; };
 		CC310B10C17622ABB179BC7C /* libPods-KulexiuForTeacher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-KulexiuForTeacher.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
@@ -3944,7 +3944,7 @@
 		277935D927E325B90010E277 /* Module */ = {
 			isa = PBXGroup;
 			children = (
-				BCFF512F2901743300E9293A /* Widget */,
+				BC5E4AD7291E5E26001BBCD2 /* Widget */,
 				BC71D17E2887FDAB0010F14B /* AnimationLaunch */,
 				BC24570E286C437D00D1F7C0 /* SoundFontFile */,
 				BC245708286C436E00D1F7C0 /* beat */,
@@ -4843,41 +4843,6 @@
 			path = View;
 			sourceTree = "<group>";
 		};
-		BC026BBE290AA84C00BF0A6C /* KSGaugeView */ = {
-			isa = PBXGroup;
-			children = (
-				BC026BBF290AA84C00BF0A6C /* KSGaugeView.h */,
-				BC026BC0290AA84C00BF0A6C /* KSGaugeColorView.h */,
-				BC026BC1290AA84C00BF0A6C /* KSGaugeSectorView.h */,
-				BC026BC2290AA84C00BF0A6C /* KSGaugeView.m */,
-				BC026BC3290AA84C00BF0A6C /* KSGaugeColorView.m */,
-				BC026BC4290AA84C00BF0A6C /* KSGaugeSectorView.m */,
-			);
-			path = KSGaugeView;
-			sourceTree = "<group>";
-		};
-		BC026BC8290AA85F00BF0A6C /* toneTuning */ = {
-			isa = PBXGroup;
-			children = (
-				BC026BCD290AA85F00BF0A6C /* DialPlateView.h */,
-				BC026BD3290AA85F00BF0A6C /* DialPlateView.m */,
-				BC026BCF290AA85F00BF0A6C /* ToneTuningBodyView.h */,
-				BC026BD5290AA85F00BF0A6C /* ToneTuningBodyView.m */,
-				BC026BD6290AA85F00BF0A6C /* ToneTuningBodyView.xib */,
-				BC026BCA290AA85F00BF0A6C /* TunerSettingView.h */,
-				BC026BD1290AA85F00BF0A6C /* TunerSettingView.m */,
-				BC026BD0290AA85F00BF0A6C /* TunerSettingView.xib */,
-				BC026BCE290AA85F00BF0A6C /* TuningForkSettingView.h */,
-				BC026BD2290AA85F00BF0A6C /* TuningForkSettingView.m */,
-				BC026BCC290AA85F00BF0A6C /* TuningForkSettingView.xib */,
-				BC026BD4290AA85F00BF0A6C /* TuningNavView.h */,
-				BC026BCB290AA85F00BF0A6C /* TuningNavView.m */,
-				BC026BC9290AA85F00BF0A6C /* TuningNavView.xib */,
-			);
-			name = toneTuning;
-			path = ../../../../../../Klx_student/KulexiuForStudent/KulexiuForStudent/Module/Widget/View/toneTuning;
-			sourceTree = "<group>";
-		};
 		BC02BCD728B32418005CB483 /* SeatListView */ = {
 			isa = PBXGroup;
 			children = (
@@ -5387,6 +5352,133 @@
 			path = images;
 			sourceTree = "<group>";
 		};
+		BC5E4AD7291E5E26001BBCD2 /* Widget */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4AD8291E5E26001BBCD2 /* Controller */,
+				BC5E4ADF291E5E26001BBCD2 /* Model */,
+				BC5E4AE6291E5E26001BBCD2 /* View */,
+			);
+			path = Widget;
+			sourceTree = "<group>";
+		};
+		BC5E4AD8291E5E26001BBCD2 /* Controller */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4ADA291E5E26001BBCD2 /* SmallToolViewController.h */,
+				BC5E4ADE291E5E26001BBCD2 /* SmallToolViewController.m */,
+				BC5E4AD9291E5E26001BBCD2 /* ToneTuningViewController.h */,
+				BC5E4ADC291E5E26001BBCD2 /* ToneTuningViewController.m */,
+				BC5E4ADD291E5E26001BBCD2 /* WidgetViewController.h */,
+				BC5E4ADB291E5E26001BBCD2 /* WidgetViewController.m */,
+			);
+			path = Controller;
+			sourceTree = "<group>";
+		};
+		BC5E4ADF291E5E26001BBCD2 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4AE0291E5E26001BBCD2 /* KSMetronomePlayer.h */,
+				BC5E4AE1291E5E26001BBCD2 /* TuningFunction */,
+				BC5E4AE5291E5E26001BBCD2 /* KSMetronomePlayer.m */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		BC5E4AE1291E5E26001BBCD2 /* TuningFunction */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4AE2291E5E26001BBCD2 /* KulexiuForTeacher-Bridging-Header.h */,
+				BC5E4AE3291E5E26001BBCD2 /* Tuner.swift */,
+				BC5E4AE4291E5E26001BBCD2 /* TunerForkManager.swift */,
+			);
+			path = TuningFunction;
+			sourceTree = "<group>";
+		};
+		BC5E4AE6291E5E26001BBCD2 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4AE8291E5E26001BBCD2 /* KSGaugeView */,
+				BC5E4B08291E5E26001BBCD2 /* Metronome */,
+				BC5E4AFF291E5E26001BBCD2 /* SmallToolBodyView.h */,
+				BC5E4AE7291E5E26001BBCD2 /* SmallToolBodyView.m */,
+				BC5E4AEF291E5E26001BBCD2 /* SmallToolBodyView.xib */,
+				BC5E4AF0291E5E26001BBCD2 /* toneTuning */,
+				BC5E4B00291E5E26001BBCD2 /* WMGaugeView */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
+		BC5E4AE8291E5E26001BBCD2 /* KSGaugeView */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4AE9291E5E26001BBCD2 /* KSGaugeView.h */,
+				BC5E4AEA291E5E26001BBCD2 /* KSGaugeColorView.h */,
+				BC5E4AEB291E5E26001BBCD2 /* KSGaugeSectorView.h */,
+				BC5E4AEC291E5E26001BBCD2 /* KSGaugeView.m */,
+				BC5E4AED291E5E26001BBCD2 /* KSGaugeColorView.m */,
+				BC5E4AEE291E5E26001BBCD2 /* KSGaugeSectorView.m */,
+			);
+			path = KSGaugeView;
+			sourceTree = "<group>";
+		};
+		BC5E4AF0291E5E26001BBCD2 /* toneTuning */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4AF1291E5E26001BBCD2 /* TuningNavView.xib */,
+				BC5E4AF2291E5E26001BBCD2 /* TunerSettingView.h */,
+				BC5E4AF3291E5E26001BBCD2 /* TuningNavView.m */,
+				BC5E4AF4291E5E26001BBCD2 /* TuningForkSettingView.xib */,
+				BC5E4AF5291E5E26001BBCD2 /* DialPlateView.h */,
+				BC5E4AF6291E5E26001BBCD2 /* TuningForkSettingView.h */,
+				BC5E4AF7291E5E26001BBCD2 /* ToneTuningBodyView.h */,
+				BC5E4AF8291E5E26001BBCD2 /* TunerSettingView.xib */,
+				BC5E4AF9291E5E26001BBCD2 /* TunerSettingView.m */,
+				BC5E4AFA291E5E26001BBCD2 /* TuningForkSettingView.m */,
+				BC5E4AFB291E5E26001BBCD2 /* DialPlateView.m */,
+				BC5E4AFC291E5E26001BBCD2 /* TuningNavView.h */,
+				BC5E4AFD291E5E26001BBCD2 /* ToneTuningBodyView.m */,
+				BC5E4AFE291E5E26001BBCD2 /* ToneTuningBodyView.xib */,
+			);
+			path = toneTuning;
+			sourceTree = "<group>";
+		};
+		BC5E4B00291E5E26001BBCD2 /* WMGaugeView */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4B01291E5E26001BBCD2 /* WMGaugeViewStyle3D.h */,
+				BC5E4B02291E5E26001BBCD2 /* WMGaugeViewStyle.h */,
+				BC5E4B03291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.m */,
+				BC5E4B04291E5E26001BBCD2 /* WMGaugeView.h */,
+				BC5E4B05291E5E26001BBCD2 /* WMGaugeViewStyle3D.m */,
+				BC5E4B06291E5E26001BBCD2 /* WMGaugeView.m */,
+				BC5E4B07291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.h */,
+			);
+			path = WMGaugeView;
+			sourceTree = "<group>";
+		};
+		BC5E4B08291E5E26001BBCD2 /* Metronome */ = {
+			isa = PBXGroup;
+			children = (
+				BC5E4B13291E5E26001BBCD2 /* WidgetBottomButtonView.h */,
+				BC5E4B0C291E5E26001BBCD2 /* WidgetBottomButtonView.m */,
+				BC5E4B14291E5E26001BBCD2 /* WidgetBottomButtonView.xib */,
+				BC5E4B17291E5E26001BBCD2 /* WidgetDotView.h */,
+				BC5E4B0E291E5E26001BBCD2 /* WidgetDotView.m */,
+				BC5E4B11291E5E26001BBCD2 /* WidgetDotView.xib */,
+				BC5E4B16291E5E26001BBCD2 /* WidgetFunctionView.h */,
+				BC5E4B09291E5E26001BBCD2 /* WidgetFunctionView.m */,
+				BC5E4B10291E5E26001BBCD2 /* WidgetFunctionView.xib */,
+				BC5E4B15291E5E26001BBCD2 /* WidgetNavView.h */,
+				BC5E4B0A291E5E26001BBCD2 /* WidgetNavView.m */,
+				BC5E4B0F291E5E26001BBCD2 /* WidgetNavView.xib */,
+				BC5E4B0D291E5E26001BBCD2 /* WidgetSpeedView.h */,
+				BC5E4B12291E5E26001BBCD2 /* WidgetSpeedView.m */,
+				BC5E4B0B291E5E26001BBCD2 /* WidgetSpeedView.xib */,
+			);
+			path = Metronome;
+			sourceTree = "<group>";
+		};
 		BC5EB5AC2804016200B4A3B0 /* CreateStyle */ = {
 			isa = PBXGroup;
 			children = (
@@ -6896,99 +6988,6 @@
 			path = View;
 			sourceTree = "<group>";
 		};
-		BCFF512F2901743300E9293A /* Widget */ = {
-			isa = PBXGroup;
-			children = (
-				BCFF51302901743300E9293A /* Controller */,
-				BCFF51372901743300E9293A /* Model */,
-				BCFF513E2901743300E9293A /* View */,
-			);
-			path = Widget;
-			sourceTree = "<group>";
-		};
-		BCFF51302901743300E9293A /* Controller */ = {
-			isa = PBXGroup;
-			children = (
-				BCFF51322901743300E9293A /* SmallToolViewController.h */,
-				BCFF51362901743300E9293A /* SmallToolViewController.m */,
-				BCFF51312901743300E9293A /* ToneTuningViewController.h */,
-				BCFF51342901743300E9293A /* ToneTuningViewController.m */,
-				BCFF51352901743300E9293A /* WidgetViewController.h */,
-				BCFF51332901743300E9293A /* WidgetViewController.m */,
-			);
-			path = Controller;
-			sourceTree = "<group>";
-		};
-		BCFF51372901743300E9293A /* Model */ = {
-			isa = PBXGroup;
-			children = (
-				BCFF51382901743300E9293A /* KSMetronomePlayer.h */,
-				BCFF513D2901743300E9293A /* KSMetronomePlayer.m */,
-				BCFF51392901743300E9293A /* TuningFunction */,
-			);
-			path = Model;
-			sourceTree = "<group>";
-		};
-		BCFF51392901743300E9293A /* TuningFunction */ = {
-			isa = PBXGroup;
-			children = (
-				BCFF4815290172E400E9293A /* KulexiuForTeacher-Bridging-Header.h */,
-				BCFF513B2901743300E9293A /* Tuner.swift */,
-				BCFF513C2901743300E9293A /* TunerForkManager.swift */,
-			);
-			path = TuningFunction;
-			sourceTree = "<group>";
-		};
-		BCFF513E2901743300E9293A /* View */ = {
-			isa = PBXGroup;
-			children = (
-				BC026BC8290AA85F00BF0A6C /* toneTuning */,
-				BC026BBE290AA84C00BF0A6C /* KSGaugeView */,
-				BCFF51592901743400E9293A /* Metronome */,
-				BCFF51502901743400E9293A /* SmallToolBodyView.h */,
-				BCFF513F2901743300E9293A /* SmallToolBodyView.m */,
-				BCFF51402901743300E9293A /* SmallToolBodyView.xib */,
-				BCFF51512901743400E9293A /* WMGaugeView */,
-			);
-			path = View;
-			sourceTree = "<group>";
-		};
-		BCFF51512901743400E9293A /* WMGaugeView */ = {
-			isa = PBXGroup;
-			children = (
-				BCFF51522901743400E9293A /* WMGaugeViewStyle3D.h */,
-				BCFF51532901743400E9293A /* WMGaugeViewStyle.h */,
-				BCFF51542901743400E9293A /* WMGaugeViewStyleFlatThin.m */,
-				BCFF51552901743400E9293A /* WMGaugeView.h */,
-				BCFF51562901743400E9293A /* WMGaugeViewStyle3D.m */,
-				BCFF51572901743400E9293A /* WMGaugeView.m */,
-				BCFF51582901743400E9293A /* WMGaugeViewStyleFlatThin.h */,
-			);
-			path = WMGaugeView;
-			sourceTree = "<group>";
-		};
-		BCFF51592901743400E9293A /* Metronome */ = {
-			isa = PBXGroup;
-			children = (
-				BCFF51642901743400E9293A /* WidgetBottomButtonView.h */,
-				BCFF515D2901743400E9293A /* WidgetBottomButtonView.m */,
-				BCFF51652901743400E9293A /* WidgetBottomButtonView.xib */,
-				BCFF51682901743400E9293A /* WidgetDotView.h */,
-				BCFF515F2901743400E9293A /* WidgetDotView.m */,
-				BCFF51622901743400E9293A /* WidgetDotView.xib */,
-				BCFF51672901743400E9293A /* WidgetFunctionView.h */,
-				BCFF515A2901743400E9293A /* WidgetFunctionView.m */,
-				BCFF51612901743400E9293A /* WidgetFunctionView.xib */,
-				BCFF51662901743400E9293A /* WidgetNavView.h */,
-				BCFF515B2901743400E9293A /* WidgetNavView.m */,
-				BCFF51602901743400E9293A /* WidgetNavView.xib */,
-				BCFF515E2901743400E9293A /* WidgetSpeedView.h */,
-				BCFF51632901743400E9293A /* WidgetSpeedView.m */,
-				BCFF515C2901743400E9293A /* WidgetSpeedView.xib */,
-			);
-			path = Metronome;
-			sourceTree = "<group>";
-		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -7147,7 +7146,6 @@
 				BC1365BD280D163200EB03E2 /* MyVideoSearchView.xib in Resources */,
 				BC14A61428A0AC880086395C /* MineTeachToolView.xib in Resources */,
 				BC02BCEC28B324FE005CB483 /* LiveMemberSeatCell.xib in Resources */,
-				BC026BDA290AA85F00BF0A6C /* TunerSettingView.xib in Resources */,
 				27F9030127E864AE00C08A19 /* NetworkBodyView.xib in Resources */,
 				BCB14112288A49710022C13A /* HomeButtonView.xib in Resources */,
 				BC4BCE7F2823B66A00522C8B /* AddressDetailBodyView.xib in Resources */,
@@ -7156,14 +7154,13 @@
 				BCC583FC28A9FA8100BAB4CF /* cloud_animation_19.png in Resources */,
 				BCB908FD2850C9CB00F5FF69 /* MusicChooseSearchView.xib in Resources */,
 				BC221FA228C72B9500F99802 /* MyStyleVideoCell.xib in Resources */,
-				BCFF517F2901743500E9293A /* WidgetSpeedView.xib in Resources */,
+				BC5E4B31291E5E26001BBCD2 /* WidgetSpeedView.xib in Resources */,
 				275E8A7227E18F2300DD3F6E /* Main.storyboard in Resources */,
 				BC3673DE28A606A500059721 /* musicRoom_animation_1.png in Resources */,
 				2780C92927E490CA00A95A4F /* VefiBodyView.xib in Resources */,
 				BCC5840828A9FA8100BAB4CF /* cloud_animation_10.png in Resources */,
 				BCA9CE4427FD947C00D558C6 /* AccompanyArrangeCell.xib in Resources */,
 				BCF61BF128042FA90000ACFE /* InstrumentChooseBottonView.xib in Resources */,
-				BC026BD7290AA85F00BF0A6C /* TuningNavView.xib in Resources */,
 				BC221FAA28C72FC100F99802 /* StyleInstrumentView.xib in Resources */,
 				BC6BEAAC288E3D7B00022109 /* HomeNewHeadView.xib in Resources */,
 				277D433027E9A50800107DB7 /* PhoneChangeBodyView.xib in Resources */,
@@ -7173,7 +7170,7 @@
 				BC71D2052887FDD40010F14B /* img_27.png in Resources */,
 				BC542E3828406F8000633781 /* UserAuthBodyView.xib in Resources */,
 				27A54CEE27E9B986007309A3 /* ModifyNameBodyView.xib in Resources */,
-				BCFF51862901743500E9293A /* WidgetBottomButtonView.xib in Resources */,
+				BC5E4B38291E5E26001BBCD2 /* WidgetBottomButtonView.xib in Resources */,
 				BC221FA128C72B9500F99802 /* MyStyleVideoView.xib in Resources */,
 				BCC583FA28A9FA8100BAB4CF /* cloud_animation_26.png in Resources */,
 				2708565E27EDA83100EC8E72 /* GroupMemberListCell.xib in Resources */,
@@ -7212,7 +7209,6 @@
 				2723B68E27F1686100E0B90B /* HomeNavView.xib in Resources */,
 				BC71D1F22887FDD40010F14B /* img_16.png in Resources */,
 				BCDB093F2805C0EF00D0BDAD /* NewClassPopCell.xib in Resources */,
-				BC026BDF290AA85F00BF0A6C /* ToneTuningBodyView.xib in Resources */,
 				BCAD01C22872F5560002CC40 /* LiveVideoListView.xib in Resources */,
 				275E3DE927F4679E0010EC30 /* LiveRoomHeadView.xib in Resources */,
 				BC6BEAA3288A4C2A00022109 /* KSHomeButton.xib in Resources */,
@@ -7229,10 +7225,9 @@
 				275B16F127EAF9DD0081FDEF /* ChatNavView.xib in Resources */,
 				2773205327EDB75B008FAECA /* GroupNoticeCell.xib in Resources */,
 				2755C08627ED5770007D9070 /* GroupApplyMemberCell.xib in Resources */,
-				BCFF51832901743500E9293A /* WidgetFunctionView.xib in Resources */,
+				BC5E4B35291E5E26001BBCD2 /* WidgetFunctionView.xib in Resources */,
 				BC71D297288811BF0010F14B /* tabbar2.json in Resources */,
-				BCFF51702901743500E9293A /* SmallToolBodyView.xib in Resources */,
-				BC026BD9290AA85F00BF0A6C /* TuningForkSettingView.xib in Resources */,
+				BC5E4B22291E5E26001BBCD2 /* SmallToolBodyView.xib in Resources */,
 				27BC3B3027F2FC7200D81E30 /* VideoCourseCell.xib in Resources */,
 				BC7CFFB62817E90700CAEB21 /* KSSegView.xib in Resources */,
 				2779362227E334470010E277 /* KSUpdateAlert.xib in Resources */,
@@ -7241,6 +7236,7 @@
 				BC71D2082887FDD40010F14B /* img_20.png in Resources */,
 				BC7705FF287676DC003EFA7F /* HomeActionView.xib in Resources */,
 				BCC5840028A9FA8100BAB4CF /* cloud_animation_15.png in Resources */,
+				BC5E4B2B291E5E26001BBCD2 /* ToneTuningBodyView.xib in Resources */,
 				BC4BCE772823AA3F00522C8B /* areainfo.json in Resources */,
 				BC71D1F62887FDD40010F14B /* img_29.png in Resources */,
 				BCF1BA5627F5CBA100FA36C4 /* LiveSeatApplyView.xib in Resources */,
@@ -7252,6 +7248,7 @@
 				BCC583FB28A9FA8100BAB4CF /* cloud_animation_27.png in Resources */,
 				BC12637E28FEB5B900509E90 /* UserDetailNavView.xib in Resources */,
 				BCB9FA4F28717BBD005D766B /* MyMusicSearchView.xib in Resources */,
+				BC5E4B25291E5E26001BBCD2 /* TuningForkSettingView.xib in Resources */,
 				BCC5840A28A9FA8100BAB4CF /* cloud_animation_6.png in Resources */,
 				BC483233282A6473005F534C /* HomeRecentCourseView.xib in Resources */,
 				2708565927ED961900EC8E72 /* ApplyBottomView.xib in Resources */,
@@ -7298,7 +7295,7 @@
 				BCC5841628A9FA9D00BAB4CF /* AccompanyLoadingView.xib in Resources */,
 				BC2456EA286BEF8000D1F7C0 /* MineEmptyGroupCell.xib in Resources */,
 				BCB6340527F6A2F000ACFDCF /* tock.wav in Resources */,
-				BCFF51842901743500E9293A /* WidgetDotView.xib in Resources */,
+				BC5E4B36291E5E26001BBCD2 /* WidgetDotView.xib in Resources */,
 				BCC03F9A2805681100461B7C /* MyLessonSearchView.xib in Resources */,
 				BCC5840B28A9FA8100BAB4CF /* cloud_animation_7.png in Resources */,
 				BCC03F9F280579A500461B7C /* MyLiveCourseCell.xib in Resources */,
@@ -7382,7 +7379,8 @@
 				BC221FAF28C736C300F99802 /* MyCreateGroupBottomView.xib in Resources */,
 				BCC5841128A9FA8100BAB4CF /* cloud_animation_2.png in Resources */,
 				275E3DE327F467410010EC30 /* BaseEmoji.plist in Resources */,
-				BCFF51822901743500E9293A /* WidgetNavView.xib in Resources */,
+				BC5E4B34291E5E26001BBCD2 /* WidgetNavView.xib in Resources */,
+				BC5E4B23291E5E26001BBCD2 /* TuningNavView.xib in Resources */,
 				BCC5842028AA559700BAB4CF /* cloud_animation_29.png in Resources */,
 				273C75A027E9681700F7C26F /* SettingBodyView.xib in Resources */,
 				BCC5840528A9FA8100BAB4CF /* cloud_animation_17.png in Resources */,
@@ -7397,6 +7395,7 @@
 				BC71D2032887FDD40010F14B /* img_24.png in Resources */,
 				BC71D1F52887FDD40010F14B /* img_17.png in Resources */,
 				BCA9CE5127FD954800D558C6 /* AccompanyRemarkCell.xib in Resources */,
+				BC5E4B26291E5E26001BBCD2 /* TunerSettingView.xib in Resources */,
 				BCB9FA682872C8F0005D766B /* FinishedLiveCell.xib in Resources */,
 				BC513E7C28A4D868003F58C4 /* musicRoom_animation.json in Resources */,
 				BCC03F89280460C000461B7C /* InstrumentHeaderView.xib in Resources */,
@@ -7533,7 +7532,7 @@
 				BCA1135328A242FD007FAFB9 /* HomeBannerView.m in Sources */,
 				BC8831042873D67C00C702A0 /* LiveVideoCollectionViewCell.m in Sources */,
 				BC12638428FEB5B900509E90 /* RecentMusicView.m in Sources */,
-				BCFF516F2901743500E9293A /* SmallToolBodyView.m in Sources */,
+				BC5E4B1E291E5E26001BBCD2 /* SmallToolBodyView.m in Sources */,
 				BCB633F527F6A18200ACFDCF /* NewClassRoomViewController.m in Sources */,
 				BC4BCE6C28239EEB00522C8B /* MyAddressListCell.m in Sources */,
 				BCD6D16228195A17009A773E /* WithdrawApplyViewController.m in Sources */,
@@ -7564,8 +7563,8 @@
 				BCC9F44627F69BD200647449 /* RoomMember.m in Sources */,
 				2780C92727E490BD00A95A4F /* VefiBodyView.m in Sources */,
 				277932B827E30FFE0010E277 /* SDCollectionViewCell.m in Sources */,
+				BC5E4B29291E5E26001BBCD2 /* DialPlateView.m in Sources */,
 				2779326527E30FD80010E277 /* FSCalendarDelegationFactory.m in Sources */,
-				BCFF51812901743500E9293A /* WidgetDotView.m in Sources */,
 				277931E127E30FC20010E277 /* NSString+zh_SafeAccess.m in Sources */,
 				BCEA75302819336200886A86 /* WithdrawBodyView.m in Sources */,
 				BC76146A280D4F670080FD1F /* HomeworkDetailModel.m in Sources */,
@@ -7583,14 +7582,15 @@
 				275B170827EB13D50081FDEF /* KSChatConversationViewController.m in Sources */,
 				2779320527E30FC30010E277 /* KSAudioRecordFileManager.m in Sources */,
 				277931C627E30FC20010E277 /* NSObject+KSImpChangeTool.m in Sources */,
+				BC5E4B2C291E5E26001BBCD2 /* WMGaugeViewStyleFlatThin.m in Sources */,
 				275E3DAD27F45BE90010EC30 /* KSChatroomMessageCenter.m in Sources */,
 				BCC9F41427F69BD200647449 /* MessageHelper.m in Sources */,
+				BC5E4B2D291E5E26001BBCD2 /* WMGaugeViewStyle3D.m in Sources */,
 				BCA353CE2858A86200377661 /* MusicRoomCourseCell.m in Sources */,
 				BCA9CE4327FD947C00D558C6 /* AccompanyArrangeCell.m in Sources */,
 				2779322C27E30FC30010E277 /* ALCalendarHeader.m in Sources */,
 				2779360F27E32BF20010E277 /* HomeViewController.m in Sources */,
 				27A2F62927E6C996009E2380 /* KSImageAlert.m in Sources */,
-				BC026BC7290AA84C00BF0A6C /* KSGaugeSectorView.m in Sources */,
 				277931FB27E30FC20010E277 /* UIImage+Color.m in Sources */,
 				BCC9F43A27F69BD200647449 /* SongDownloadCallbackMessage.m in Sources */,
 				BC9473FD282A5E71004B3B27 /* NoticeSourceModel.m in Sources */,
@@ -7620,7 +7620,7 @@
 				277935EB27E32A930010E277 /* KSBaseWKWebViewController.m in Sources */,
 				BCA1134C28A23221007FAFB9 /* HomeHotMusicCellView.m in Sources */,
 				275B172627EB1C6C0081FDEF /* KSBaseTableViewController.m in Sources */,
-				BCFF516D2901743500E9293A /* TunerForkManager.swift in Sources */,
+				BC5E4B1C291E5E26001BBCD2 /* TunerForkManager.swift in Sources */,
 				BC2456E9286BEF8000D1F7C0 /* MineEmptyGroupCell.m in Sources */,
 				BCC9F43D27F69BD200647449 /* InviteUpgradeMessage.m in Sources */,
 				BC7CFFCD2817FE8C00CAEB21 /* BandCardViewController.m in Sources */,
@@ -7635,7 +7635,7 @@
 				BCD6D16A28195FBE009A773E /* CashRecordHeadView.m in Sources */,
 				277931F027E30FC20010E277 /* UIView+AddConstraints.m in Sources */,
 				277D432527E9A46A00107DB7 /* ModifyPhoneCheckController.m in Sources */,
-				BCFF516C2901743400E9293A /* Tuner.swift in Sources */,
+				BC5E4B1B291E5E26001BBCD2 /* Tuner.swift in Sources */,
 				BCC9F43327F69BD200647449 /* KSRemoteUserManager.m in Sources */,
 				27F9CAF727EC1A16003E0FE4 /* UITableView+SCIndexView.m in Sources */,
 				275E3DC827F460720010EC30 /* KSLiveChatroomKickOut.m in Sources */,
@@ -7643,7 +7643,7 @@
 				BCC03F95280562F700461B7C /* MyLessonBodyView.m in Sources */,
 				BCE6A09027F823BE00C97704 /* LiveCourseCell.m in Sources */,
 				BCC03F98280567CC00461B7C /* MyLessonSearchView.m in Sources */,
-				BCFF516A2901743400E9293A /* ToneTuningViewController.m in Sources */,
+				BC5E4B19291E5E26001BBCD2 /* ToneTuningViewController.m in Sources */,
 				BCE6A07F27F7FACA00C97704 /* UIView+SubViewExtension.m in Sources */,
 				BCA9CE5027FD954800D558C6 /* AccompanyRemarkCell.m in Sources */,
 				BCDE359B289BC02200A9A560 /* HomeHotAlbumCell.m in Sources */,
@@ -7660,7 +7660,6 @@
 				BCE6A09F27F84E4500C97704 /* MineIntroduceCell.m in Sources */,
 				BC12638C28FEB5E600509E90 /* ChatUserInfo.m in Sources */,
 				BCF1BA5A27F5CF3C00FA36C4 /* LiveSeatApplyCell.m in Sources */,
-				BCFF517D2901743500E9293A /* WidgetFunctionView.m in Sources */,
 				BCC9F43527F69BD200647449 /* DisplayCommandMessage.m in Sources */,
 				BC7CFFAF2817E6C900CAEB21 /* IncomeCountBottomView.m in Sources */,
 				BCC9F43F27F69BD200647449 /* DeviceMessage.m in Sources */,
@@ -7683,7 +7682,6 @@
 				27F9030E27E875DD00C08A19 /* AudioPlayManager.m in Sources */,
 				BCC9F41127F69BD200647449 /* MessageCell.m in Sources */,
 				277935E227E327F00010E277 /* KSTabBarViewController.m in Sources */,
-				BCFF517A2901743500E9293A /* WMGaugeViewStyleFlatThin.m in Sources */,
 				2779322727E30FC30010E277 /* KSInputView.m in Sources */,
 				BC71D293288811BF0010F14B /* AnimationHelper.m in Sources */,
 				BC60E3C0287D447F00B05441 /* DeleteAccountBodyView.m in Sources */,
@@ -7745,6 +7743,7 @@
 				275B171A27EB1BBC0081FDEF /* KSSearchResultModel.m in Sources */,
 				27F9CB0B27EC5C06003E0FE4 /* KSSelectConversationViewController.m in Sources */,
 				BC8B6DBF28532DB800866917 /* MusicSheetVoList.m in Sources */,
+				BC5E4B37291E5E26001BBCD2 /* WidgetSpeedView.m in Sources */,
 				2755C08D27ED5DB2007D9070 /* GroupApplyChooseCell.m in Sources */,
 				BC02BCF128B32771005CB483 /* KSDownSeatAllMessage.m in Sources */,
 				BCA7C33F284760AB009D20EC /* NSObject+KeyWindow.m in Sources */,
@@ -7758,7 +7757,6 @@
 				BC1191F6280EBC7D00A716F7 /* AccompanyDetailBottomView.m in Sources */,
 				BCB909042851E25D00F5FF69 /* KSShareChooseViewController.m in Sources */,
 				277932B927E30FFE0010E277 /* TADotView.m in Sources */,
-				BCFF517E2901743500E9293A /* WidgetNavView.m in Sources */,
 				2773204D27EDB72B008FAECA /* LFPopupMenu.m in Sources */,
 				BCC03F8F2805484200461B7C /* StyleVideoModel.m in Sources */,
 				BC0167A627FC06D600AE66A1 /* MyCourseViewController.m in Sources */,
@@ -7768,7 +7766,6 @@
 				2779320127E30FC30010E277 /* KSStatusView.m in Sources */,
 				2779323027E30FC30010E277 /* ALCalendarPicker.m in Sources */,
 				BCB9FA13286C7C6C005D766B /* KSShareGroupViewController.m in Sources */,
-				BCFF517B2901743500E9293A /* WMGaugeViewStyle3D.m in Sources */,
 				2779323E27E30FC30010E277 /* VoCacheManager.m in Sources */,
 				277931DE27E30FC20010E277 /* NSObject+AssociatedObject.m in Sources */,
 				27D83F4927F3EBC400062476 /* CreateLiveViewController.m in Sources */,
@@ -7788,7 +7785,6 @@
 				BC48C3AE28292FB600EE65C5 /* ReceiveHeaderView.m in Sources */,
 				BCC9F42427F69BD200647449 /* VideoMaskView.m in Sources */,
 				BCB399BC27F9831D00AFF376 /* CourseForLiveCell.m in Sources */,
-				BC026BDE290AA85F00BF0A6C /* ToneTuningBodyView.m in Sources */,
 				275B172227EB1BE60081FDEF /* KSRCSearchBar.m in Sources */,
 				BCC9F35527F5F4FD00647449 /* LiveSeatMember.m in Sources */,
 				277931DB27E30FC20010E277 /* UIButton+EnlargeEdge.m in Sources */,
@@ -7885,11 +7881,13 @@
 				27A54CF127E9BD3B007309A3 /* FeedbackViewController.m in Sources */,
 				BC7705FD287676D3003EFA7F /* HomeActionView.m in Sources */,
 				275E3DE127F467410010EC30 /* KSChatInputView.m in Sources */,
+				BC5E4B30291E5E26001BBCD2 /* WidgetNavView.m in Sources */,
 				2779335527E316DD0010E277 /* WMPlayerModel.m in Sources */,
 				BCA7C34328476533009D20EC /* KSBoardAddStaffView.m in Sources */,
 				277931BE27E30FC20010E277 /* NSObject+Archiving.m in Sources */,
 				2728086727E6BD1F00DB71EA /* FirstSettingViewController.m in Sources */,
 				BCC9F42B27F69BD200647449 /* SelectionButton.m in Sources */,
+				BC5E4B33291E5E26001BBCD2 /* WidgetDotView.m in Sources */,
 				2779322A27E30FC30010E277 /* ALCalendarCell.m in Sources */,
 				275FA1A027E7250700CFEA2E /* KSAccompanyWebViewController.m in Sources */,
 				BC1365CC280D478F00EB03E2 /* NotiferMessageModel.m in Sources */,
@@ -7899,21 +7897,19 @@
 				BC32E10C286AB31C001434DD /* KSPublicAlertView.m in Sources */,
 				BC5EB5B6280402CB00B4A3B0 /* MyStyleInstrumentCell.m in Sources */,
 				277931C527E30FC20010E277 /* NSObject+KSSwizzling.m in Sources */,
-				BC026BDB290AA85F00BF0A6C /* TunerSettingView.m in Sources */,
 				27A54CF727E9BD7C007309A3 /* FeedbackBodyView.m in Sources */,
+				BC5E4B20291E5E26001BBCD2 /* KSGaugeColorView.m in Sources */,
 				277932BD27E30FFE0010E277 /* SDQWMaskCustomView.m in Sources */,
 				277931E027E30FC20010E277 /* UIDevice+zhDeviceType.m in Sources */,
 				BCD457B72865651A0010B493 /* LiveMoreDisplayView.m in Sources */,
 				2779329227E30FEB0010E277 /* MSSBrowseActionSheet.m in Sources */,
 				27F9CB0027EC3D42003E0FE4 /* GroupListViewCell.m in Sources */,
 				BC6C303A27F586A60044BC0F /* KSRCMessageModel.m in Sources */,
-				BCFF517C2901743500E9293A /* WMGaugeView.m in Sources */,
 				BC8B6DC028532DB800866917 /* MusicShareModel.m in Sources */,
 				2780C91C27E48A0700A95A4F /* PasswordLoginController.m in Sources */,
 				BCC9F43827F69BD200647449 /* TicketExpiredMessage.m in Sources */,
 				2779336027E31CB40010E277 /* UIView+KSExtension.m in Sources */,
 				BC0A22A7284751F80065C1AB /* AccompanyProgressView.m in Sources */,
-				BCFF51852901743500E9293A /* WidgetSpeedView.m in Sources */,
 				2779321C27E30FC30010E277 /* prodectButton.m in Sources */,
 				BC7E770C2900DD8E00EB37AF /* HomeDragButton.m in Sources */,
 				BCE6A08B27F823A300C97704 /* AccompanyCourseCell.m in Sources */,
@@ -7932,6 +7928,7 @@
 				277931C727E30FC20010E277 /* NSMutableString+KSSafe.m in Sources */,
 				BCA353D82858B18100377661 /* StudentHomeworkList.m in Sources */,
 				BCC9F44527F69BD200647449 /* Whiteboard.m in Sources */,
+				BC5E4B2A291E5E26001BBCD2 /* ToneTuningBodyView.m in Sources */,
 				BCAD01C02872F54F0002CC40 /* LiveVideoListView.m in Sources */,
 				BCC9F44327F69BD200647449 /* AccompanyDownloadCallbackMessage.m in Sources */,
 				2779322327E30FC30010E277 /* PIckView.m in Sources */,
@@ -7953,15 +7950,18 @@
 				BCA9CE1527FD339400D558C6 /* AuthDisplayView.m in Sources */,
 				2779329B27E30FEB0010E277 /* UIView+MSSLayout.m in Sources */,
 				2779322B27E30FC30010E277 /* ALCalendarConfig.m in Sources */,
-				BCFF51692901743400E9293A /* WidgetViewController.m in Sources */,
+				BC5E4B18291E5E26001BBCD2 /* WidgetViewController.m in Sources */,
 				BC1365BB280D162400EB03E2 /* MyVideoSearchView.m in Sources */,
 				BC8B6E72285838D200866917 /* KSQRCreateManager.m in Sources */,
 				2779323527E30FC30010E277 /* LLPhotoBrowser.m in Sources */,
 				27A54CF427E9BD53007309A3 /* AboutUsViewController.m in Sources */,
 				277931D827E30FC20010E277 /* UIButton+HasChooseImage.m in Sources */,
 				BC0A22A2284751F80065C1AB /* TeachToolView.m in Sources */,
+				BC5E4B21291E5E26001BBCD2 /* KSGaugeSectorView.m in Sources */,
+				BC5E4B24291E5E26001BBCD2 /* TuningNavView.m in Sources */,
 				277931E627E30FC20010E277 /* UITextView+ZWLimitCounter.m in Sources */,
 				275E3DEC27F467B20010EC30 /* LiveRoomBottomView.m in Sources */,
+				BC5E4B2E291E5E26001BBCD2 /* WMGaugeView.m in Sources */,
 				2780A06427E81E4900447CFD /* MineNavView.m in Sources */,
 				2779326E27E30FD80010E277 /* FSCalendarCalculator.m in Sources */,
 				BCB9FA6B2872D57E005D766B /* LiveListModel.m in Sources */,
@@ -7970,7 +7970,6 @@
 				BC14A61228A0AC820086395C /* MineTeachToolView.m in Sources */,
 				BC02380F2865C6F9005560CA /* RCChatroomLikeCount.m in Sources */,
 				2779321727E30FC30010E277 /* UITextField_Toolbar.m in Sources */,
-				BCFF51802901743500E9293A /* WidgetBottomButtonView.m in Sources */,
 				BCB633F927F6A18200ACFDCF /* ClassVideoListView.m in Sources */,
 				BC2456E3286BE85A00D1F7C0 /* MineStyleEmptyView.m in Sources */,
 				277D432F27E9A50800107DB7 /* PhoneChangeBodyView.m in Sources */,
@@ -7978,7 +7977,7 @@
 				BCB908FB2850C9C300F5FF69 /* MusicChooseSearchView.m in Sources */,
 				BC0A22AA284751F80065C1AB /* FullVideoCell.m in Sources */,
 				BCC9F41627F69BD200647449 /* TimeStampMessage.m in Sources */,
-				BCFF516E2901743500E9293A /* KSMetronomePlayer.m in Sources */,
+				BC5E4B1D291E5E26001BBCD2 /* KSMetronomePlayer.m in Sources */,
 				BC2456EE286BEFC600D1F7C0 /* MineEmptyIntroduceCell.m in Sources */,
 				2779326C27E30FD80010E277 /* FSCalendarExtensions.m in Sources */,
 				BCF61BEC28042D1A0000ACFE /* InstrumentMessageModel.m in Sources */,
@@ -7994,6 +7993,7 @@
 				277931E927E30FC20010E277 /* pinyin.c in Sources */,
 				275FA55827F30AE300EB6240 /* VideoCourseModel.m in Sources */,
 				275B172927EB26920081FDEF /* ChatAddressHeaderView.m in Sources */,
+				BC5E4B1F291E5E26001BBCD2 /* KSGaugeView.m in Sources */,
 				BC7CFFA22817D72200CAEB21 /* IncomeListModel.m in Sources */,
 				BC0A22A9284751F80065C1AB /* FullVideoView.m in Sources */,
 				2755C06C27EC7F0E007D9070 /* KSChatComplainController.m in Sources */,
@@ -8003,8 +8003,8 @@
 				27FC2F5F27F1930400FCC239 /* KSStarView.m in Sources */,
 				BC24570D286C436E00D1F7C0 /* KSCloudBeatView.m in Sources */,
 				BCC9F44427F69BD200647449 /* NodePlayMessage.m in Sources */,
-				BC026BD8290AA85F00BF0A6C /* TuningNavView.m in Sources */,
 				2779320A27E30FC30010E277 /* HomeButton.m in Sources */,
+				BC5E4B27291E5E26001BBCD2 /* TunerSettingView.m in Sources */,
 				2773204E27EDB72B008FAECA /* LFPopupMenuDefaultConfig.m in Sources */,
 				BC0A22BA2847523E0065C1AB /* MemberListCell.m in Sources */,
 				2779329727E30FEB0010E277 /* MSSBrowseRemindView.m in Sources */,
@@ -8044,9 +8044,7 @@
 				BC0A2285284751DF0065C1AB /* KSValuePopView.m in Sources */,
 				BCDBC59D286156E700647197 /* LiveRoomViewController.m in Sources */,
 				BCC9F40B27F69BD200647449 /* CREmojiCollectionCell.m in Sources */,
-				BC026BDD290AA85F00BF0A6C /* DialPlateView.m in Sources */,
 				2779320927E30FC30010E277 /* KSRecordPowerAnimationView.m in Sources */,
-				BC026BDC290AA85F00BF0A6C /* TuningForkSettingView.m in Sources */,
 				BC02BCE628B324C9005CB483 /* LiveDownSeatView.m in Sources */,
 				27BC3B3327F2FD2D00D81E30 /* VideoListBodyView.m in Sources */,
 				BC0A2283284751DF0065C1AB /* MetronomeControlView.m in Sources */,
@@ -8078,7 +8076,6 @@
 				27A54CEC27E9B96F007309A3 /* ModifyNameBodyView.m in Sources */,
 				BC9070A728C71C8700237958 /* MyCreateGroupHeadView.m in Sources */,
 				27F9030B27E875C500C08A19 /* AudioRecordManager.m in Sources */,
-				BC026BC6290AA84C00BF0A6C /* KSGaugeColorView.m in Sources */,
 				27A2F62D27E70D0A009E2380 /* UserInfoManager.m in Sources */,
 				BC3DE088280D89E90027DC0E /* EvaluateDetailViewController.m in Sources */,
 				BC023803286594EA005560CA /* KSTipsAlert.m in Sources */,
@@ -8087,7 +8084,6 @@
 				BCE6A0A427F8517900C97704 /* MineVideoCell.m in Sources */,
 				BC0A22C0284752900065C1AB /* WhiteboardListCell.m in Sources */,
 				BCD457BE2865694B0010B493 /* KSRCPauseLiveMessage.m in Sources */,
-				BC026BC5290AA84C00BF0A6C /* KSGaugeView.m in Sources */,
 				BC0A22C1284752900065C1AB /* WhiteboardListView.m in Sources */,
 				BCC9F43B27F69BD200647449 /* AssistantTransferMessage.m in Sources */,
 				BC332DB3284866BE005AEF95 /* KSOrderManager.m in Sources */,
@@ -8106,6 +8102,7 @@
 				BCD457B2286564DB0010B493 /* LiveRoomAlertView.m in Sources */,
 				BCB399AC27F946A200AFF376 /* CourseNavView.m in Sources */,
 				BCED5CBE28508831009A42DE /* KSChatMusicShareCell.m in Sources */,
+				BC5E4B32291E5E26001BBCD2 /* WidgetBottomButtonView.m in Sources */,
 				BCC9F41E27F69BD200647449 /* UpgradeDidApplyView.m in Sources */,
 				BCE06F2B2818146700234817 /* KSConfirmAlertView.m in Sources */,
 				275B16FA27EB08230081FDEF /* CreateFansGroupViewController.m in Sources */,
@@ -8118,7 +8115,7 @@
 				275E3DD427F463580010EC30 /* KSLiveChatroomSeatResponse.m in Sources */,
 				BCC9F41927F69BD200647449 /* VideoListCell.m in Sources */,
 				BCEA751D2818F6C900886A86 /* MyCardModel.m in Sources */,
-				BCFF516B2901743400E9293A /* SmallToolViewController.m in Sources */,
+				BC5E4B1A291E5E26001BBCD2 /* SmallToolViewController.m in Sources */,
 				2779327027E30FD80010E277 /* FSCalendarTransitionCoordinator.m in Sources */,
 				BCC9F42C27F69BD200647449 /* InputTextField.m in Sources */,
 				2779320727E30FC30010E277 /* KSRecordStatusView.m in Sources */,
@@ -8148,6 +8145,7 @@
 				277931F427E30FC20010E277 /* NSDate+Extension.m in Sources */,
 				277931C127E30FC20010E277 /* NSDictionary+KSSafe.m in Sources */,
 				277931FF27E30FC30010E277 /* GRCreateManager.m in Sources */,
+				BC5E4B28291E5E26001BBCD2 /* TuningForkSettingView.m in Sources */,
 				BC14A62428A212C50086395C /* HomeHotMusicView.m in Sources */,
 				2779326627E30FD80010E277 /* FSCalendarCell.m in Sources */,
 				BC3ACD9A2890D88600060E97 /* IncomeRecordHeadView.m in Sources */,
@@ -8191,6 +8189,7 @@
 				BC2456F7286C421700D1F7C0 /* KSVideoRecordManager.m in Sources */,
 				BCC03F9E280579A500461B7C /* MyLiveCourseCell.m in Sources */,
 				27D5D5D527EDBCB900B4720C /* GroupNoticeModel.m in Sources */,
+				BC5E4B2F291E5E26001BBCD2 /* WidgetFunctionView.m in Sources */,
 				BCC9F41527F69BD200647449 /* MessageModel.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -8377,7 +8376,7 @@
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForTeacher/KulexiuForTeacher.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1.4.2.1;
+				CURRENT_PROJECT_VERSION = 1.4.3;
 				DEVELOPMENT_TEAM = B2AP53HHTU;
 				ENABLE_BITCODE = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -8423,7 +8422,7 @@
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/SocialLibraries/QQ",
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.4.2;
+				MARKETING_VERSION = 1.4.3;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForTeacher;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -8443,7 +8442,7 @@
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForTeacher/KulexiuForTeacher.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1.4.2.1;
+				CURRENT_PROJECT_VERSION = 1.4.3;
 				DEVELOPMENT_TEAM = B2AP53HHTU;
 				ENABLE_BITCODE = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -8489,7 +8488,7 @@
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/SocialLibraries/QQ",
 					"$(PROJECT_DIR)/KulexiuForTeacher/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.4/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.4.2;
+				MARKETING_VERSION = 1.4.3;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForTeacher;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;

+ 3 - 3
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -80,7 +80,7 @@
             NSLog(@"%lld--%lld",bytesRead,totalBytes);
             
         } successBlock:^(id response) {
-            
+            NSLog(@"success call back---- %@", myUrl);
             dic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
             
             if ([dic integerValueForKey:@"code"] == 403) { // token验证失败
@@ -99,7 +99,7 @@
             return;
             
         } failBlock:^(NSError *error) {
-            NSLog(@"%@",error.description);
+            NSLog(@"-------requestUrlError %@- %@",myUrl ,error.description);
             faliure(error);
             if (error.code == -1001) {
                 [self showMessage:@"网络请求超时"];
@@ -1256,7 +1256,7 @@
     [parm setValue:@(10) forKey:@"rows"];
     [parm setValue:version forKey:@"version"];
     [parm setValue:@"ios-teacher" forKey:@"platform"];
-    [parm setValue:@"subjectIds" forKey:@"subjectIds"];
+    [parm setValue:subjectIds forKey:@"subjectIds"];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 

+ 14 - 14
KulexiuForTeacher/KulexiuForTeacher/Common/Define/PrefixHeader.pch

@@ -135,13 +135,13 @@ shouldPrevent = NO; \
 
 //#ifdef DEBUG
 
-#define hostURL (@"https://dev.colexiu.com")
-#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
-#define WEBHOST (@"https://dev.colexiu.com/teacher")
-#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
-#define JSPUSH_ENVIRONMENT (NO)
-#define RCIM_KEY (@"0vnjpoad0jbdz")
-#define SUBMIT_UUID (YES)
+//#define hostURL (@"https://dev.colexiu.com")
+//#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
+//#define WEBHOST (@"https://dev.colexiu.com/teacher")
+//#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
+//#define JSPUSH_ENVIRONMENT (NO)
+//#define RCIM_KEY (@"0vnjpoad0jbdz")
+//#define SUBMIT_UUID (YES)
 
 // 预生产环境
 //#define hostURL (@"https://ponline.colexiu.com")
@@ -154,13 +154,13 @@ shouldPrevent = NO; \
 
 //#else
 
-//#define hostURL (@"https://online.colexiu.com")
-//#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
-//#define WEBHOST (@"https://online.colexiu.com/teacher")
-//#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
-//#define JSPUSH_ENVIRONMENT (YES)
-//#define RCIM_KEY (@"e5t4ouvpe42pa")
-//#define SUBMIT_UUID (YES)
+#define hostURL (@"https://online.colexiu.com")
+#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
+#define WEBHOST (@"https://online.colexiu.com/teacher")
+#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
+#define JSPUSH_ENVIRONMENT (YES)
+#define RCIM_KEY (@"e5t4ouvpe42pa")
+#define SUBMIT_UUID (YES)
 
 
 //#endif

+ 9 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m

@@ -832,7 +832,7 @@
                 [self displayStudent:userId];
             }
             else {
-                [self displayMineInfo];
+                [self displayTeacherInfo:userId];
             }
         }
         else {
@@ -842,7 +842,7 @@
                 [self displayStudent:userId];
             }
             else {
-                [self displayMineInfo];
+                [self displayTeacherInfo:userId];
             }
             
         }
@@ -854,6 +854,13 @@
     [self.navigationController pushViewController:pageCtrl animated:YES];
 }
 
+
+- (void)displayTeacherInfo:(NSString *)teacherId {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/teacherHome?teacherId=", teacherId];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
 - (void)displayStudent:(NSString *)stuentId {
     KSChatUserDetailViewController *ctrl = [[KSChatUserDetailViewController alloc] init];
     ctrl.rongCloudId = stuentId;

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatUserDetailViewController.m

@@ -67,7 +67,7 @@
         make.height.mas_equalTo(kNaviBarHeight);
     }];
     
-    [self.view addSubview:self.bodyView];
+    [self.scrollView addSubview:self.bodyView];
     CGFloat bodyViewHeight = [UserDetailBodyView getViewHeight];
     if (bodyViewHeight < KPortraitHeight - kNaviBarHeight - 70) {
         bodyViewHeight = KPortraitHeight - kNaviBarHeight - 70;
@@ -77,7 +77,7 @@
         make.left.right.mas_equalTo(self.view);
         make.height.mas_equalTo(bodyViewHeight);
     }];
-    [self.view addSubview:self.bottomView];
+    [self.scrollView addSubview:self.bottomView];
     [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.view);
         make.top.mas_equalTo(self.bodyView.mas_bottom);

+ 11 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m

@@ -64,7 +64,7 @@
 #define TTimeLableWidth   (180)
 #define TTimeLableHeight  (20)
 
-@interface NewClassroomViewController ()<ClassTitleViewDelegate, RCRTCRoomEventDelegate, KSWhiteboardControlDelegate, ClassroomDelegate, ClassroomMainContainerDelegate, UIGestureRecognizerDelegate, RCRTCStatusReportDelegate,ClassVideoListViewDelegate, ClassMemberListViewDelegate, WhiteboardListViewDelegate,ClassroomTimerManagerDelegate, FullVideoViewDelegate, TeachToolViewDelegate, LLPhotoBrowserDelegate>
+@interface NewClassroomViewController ()<ClassTitleViewDelegate, RCRTCRoomEventDelegate, KSWhiteboardControlDelegate, ClassroomDelegate, ClassroomMainContainerDelegate, UIGestureRecognizerDelegate, RCRTCStatusReportDelegate,ClassVideoListViewDelegate, ClassMemberListViewDelegate, WhiteboardListViewDelegate,ClassroomTimerManagerDelegate, FullVideoViewDelegate, TeachToolViewDelegate, LLPhotoBrowserDelegate,RCRTCEngineEventDelegate>
 
 @property (nonatomic, strong) ClassTitleView *titleView;
 @property (nonatomic, strong) ClassroomMainContainer *containerView;
@@ -145,6 +145,7 @@
     [UIDevice switchNewOrientation:UIInterfaceOrientationLandscapeRight inController:self];
     [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
     [RCRTCEngine sharedInstance].statusReportDelegate = self;
+    [RCRTCEngine sharedInstance].delegate = self;
     _isPushChooseView = NO;
     if (_isPushChooseView)  {
         NSLog(@"-----");
@@ -542,6 +543,7 @@
         [self.videoListView reloadVideoList];
         [self.hud hideAnimated:YES];
         [RCRTCEngine sharedInstance].statusReportDelegate = self;
+        [RCRTCEngine sharedInstance].delegate = self;
         self.songName = nil;
         self.songId = nil;
     } error:^(RCRTCCode code) {
@@ -2114,4 +2116,12 @@
     return hud;
 }
 
+
+#pragma mark ----- RCRTCEngineEventDelegate
+- (void)didOccurError:(RCRTCCode)errorCode {
+    if (errorCode == RCRTCCodeAudioDeviceStartError) {
+        // 提示
+        [self.tipsView showTipsMessage:@"音频设备启动失败,请尝试重启设备后重新进入" inView:self.view];
+    }
+}
 @end

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Controller/ToneTuningViewController.m

@@ -407,7 +407,7 @@ static float correctTime = 0.5;
 - (void)setToneChangeRate:(NSInteger)toneChangeRate {
     _toneChangeRate = toneChangeRate;
     self.tuner.toneChangeRate = toneChangeRate;
-    if (_toneChangeRate == 0) { //
+    if (_toneChangeRate == 0) { // 
         self.isTransfer = NO;
     }
     else {

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/Metronome/WidgetSpeedView.m

@@ -38,7 +38,7 @@
 - (void)createUI {
     _centerPoint = CGPointMake(300 / 2, kScreenWidth / 2);//中心点
     
-    self.controlSpeedView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"speed_dot_s"]];
+    self.controlSpeedView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"speed_dot"]];
     [self.bgView addSubview:self.controlSpeedView];
     [self.controlSpeedView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.right.bottom.left.mas_equalTo(self.bgView);

+ 48 - 5
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeView.m

@@ -179,7 +179,7 @@
         rootNeedleLayer = [CALayer new];
 
         // For performance puporse, the needle layer is not scaled to [0-1] range
-        rootNeedleLayer.frame = self.bounds;
+        rootNeedleLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height*2);
         [self.layer addSublayer:rootNeedleLayer];
         
         // Draw needle
@@ -208,6 +208,7 @@
 
     if (_showRangeLabels)
         [self drawRangeLabels:context];
+    
 }
 
 /**
@@ -216,6 +217,48 @@
 - (void)drawRim:(CGContextRef)context
 {
     // TODO
+//    // 绘制内圈渐变色圆弧
+//    CGContextSaveGState(context);
+////    CGContextRef ctx = UIGraphicsGetCurrentContext();
+//    CGContextSetLineWidth(context, 18.0f);
+//    //设置圆环线条的两个端点做圆滑处理
+//    CGContextSetLineCap(context, kCGLineCapRound);
+//    //设置画笔颜色
+//    CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
+//    //设置圆心
+//    CGFloat originX = self.bounds.size.width / 2;
+//    CGFloat originY = self.bounds.size.height / 2;
+//    //计算半径
+//    CGFloat radius = MIN(originX, originY) - 18/2.0 - 10;
+//
+//    CGContextAddArc(context, originX, originY, radius, -M_PI_2 - 5, M_PI_2 + 5, NO);
+//
+//    //2. 创建一个渐变色
+//    CGFloat locations[2];
+//    NSArray *locationArray = @[@0,@0.5];
+//    NSArray *colorArray = @[(id)HexRGB(0xFF41D3).CGColor,(id)HexRGB(0x4EFFC2).CGColor];
+//    for (NSInteger index = 0; index < 2; index++) {
+//        locations[index] = [locationArray[index] floatValue];
+//    }
+//
+//    //创建RGB色彩空间,创建这个以后,context里面用的颜色都是用RGB表示
+//    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+//    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace,(__bridge CFArrayRef _Nonnull)colorArray, locations);
+//
+//    //释放色彩空间
+//    CGColorSpaceRelease(colorSpace);
+//    colorSpace = NULL;
+//
+//    //3.画出圆环路径
+//    CGContextReplacePathWithStrokedPath(context);
+//    //剪裁路径
+//    CGContextClip(context);
+//
+//    //4.用渐变色填充,修改填充色的方向,_startPoint和_endPoint两个点的连线,就是颜色的分布方向
+//    CGContextDrawLinearGradient(context, gradient, CGPointMake(10, self.bounds.size.height / 2), CGPointMake(self.bounds.size.width - 28, self.bounds.size.height / 2), 1);
+//
+//    //释放渐变色
+//    CGGradientRelease(gradient);
 }
 
 /**
@@ -259,9 +302,9 @@
         if (_scalesubdivisionsAligment == WMGaugeViewSubdivisionsAlignmentCenter) offset = (_scaleDivisionsLength - _scaleSubdivisionsLength) / 2.0;
         if (_scalesubdivisionsAligment == WMGaugeViewSubdivisionsAlignmentBottom) offset = _scaleDivisionsLength - _scaleSubdivisionsLength;
         
-        CGFloat y1 = scaleRect.origin.y;
+        CGFloat y1 = scaleRect.origin.y + 0.1;
         CGFloat y2 = y1 + _scaleSubdivisionsLength;
-        CGFloat y3 = y1 + _scaleDivisionsLength;
+        CGFloat y3 = y1 - _scaleDivisionsLength;
         
         float value = [self valueForTick:i];
         float div = (_maxValue - _minValue) / _scaleDivisions;
@@ -285,12 +328,12 @@
             if(_showScaleValues) {
                 NSString *valueString = [NSString stringWithFormat:@"%0.0f",value];
                 UIFont* font = _scaleFont ? _scaleFont : [UIFont fontWithName:@"Helvetica-Bold" size:0.05];
-                NSDictionary* stringAttrs = @{ NSFontAttributeName : font, NSForegroundColorAttributeName : color };
+                NSDictionary* stringAttrs = @{ NSFontAttributeName : font, NSForegroundColorAttributeName : HexRGB(0x999999) };
                 NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:valueString attributes:stringAttrs];
                 CGSize fontWidth;
                 fontWidth = [valueString sizeWithAttributes:stringAttrs];
                 
-                [attrStr drawAtPoint:CGPointMake(0.5 - fontWidth.width / 2.0, y3 + 0.005)];
+                [attrStr drawAtPoint:CGPointMake(0.5 - fontWidth.width / 2.0, y3 - 0.065)];
             }
         }
         // Subdivision

+ 10 - 10
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeViewStyle3D.m

@@ -39,9 +39,9 @@
     // Left Needle
     CAShapeLayer *leftNeedleLayer = [CAShapeLayer layer];
     UIBezierPath *leftNeedlePath = [UIBezierPath bezierPath];
-    [leftNeedlePath moveToPoint:CGPointMake(FULLSCALE(kCenterX, kCenterY))];
-    [leftNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX - _needleWidth, kCenterY))];
-    [leftNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX, kCenterY - _needleHeight))];
+    [leftNeedlePath moveToPoint:CGPointMake(FULLSCALE(kCenterX, 1))];
+    [leftNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX - _needleWidth, 1))];
+    [leftNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX, 1 - _needleHeight))];
     [leftNeedlePath closePath];
     
     leftNeedleLayer.path = leftNeedlePath.CGPath;
@@ -53,9 +53,9 @@
     // Right Needle
     CAShapeLayer *rightNeedleLayer = [CAShapeLayer layer];
     UIBezierPath *rightNeedlePath = [UIBezierPath bezierPath];
-    [rightNeedlePath moveToPoint:CGPointMake(FULLSCALE(kCenterX, kCenterY))];
-    [rightNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX + _needleWidth, kCenterY))];
-    [rightNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX, kCenterY - _needleHeight))];
+    [rightNeedlePath moveToPoint:CGPointMake(FULLSCALE(kCenterX, 1))];
+    [rightNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX + _needleWidth, 1))];
+    [rightNeedlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX, 1 - _needleHeight))];
     [rightNeedlePath closePath];
     
     rightNeedleLayer.path = rightNeedlePath.CGPath;
@@ -72,8 +72,8 @@
     
     // Screw drawing
     CAShapeLayer *screwLayer = [CAShapeLayer layer];
-    screwLayer.bounds = CGRectMake(FULLSCALE(kCenterX - _needleScrewRadius, kCenterY - _needleScrewRadius), FULLSCALE(_needleScrewRadius * 2.0, _needleScrewRadius * 2.0));
-    screwLayer.position = CGPointMake(FULLSCALE(kCenterX, kCenterY));
+    screwLayer.bounds = CGRectMake(FULLSCALE(kCenterX - _needleScrewRadius, 1 - _needleScrewRadius), FULLSCALE(_needleScrewRadius * 2.0, _needleScrewRadius * 2.0));
+    screwLayer.position = CGPointMake(FULLSCALE(kCenterX, 1));
     screwLayer.path = [UIBezierPath bezierPathWithOvalInRect:screwLayer.bounds].CGPath;
     screwLayer.fillColor = _screwFillColor.CGColor;
     screwLayer.strokeColor = _screwStrokeColor.CGColor;
@@ -99,7 +99,7 @@
     baseSpace = NULL;
     CGContextAddEllipseInRect(context, rect);
     CGContextClip(context);
-    CGContextDrawRadialGradient(context, gradient, kCenterPoint, 0, kCenterPoint, rect.size.width / 2.0, kCGGradientDrawsAfterEndLocation);
+    CGContextDrawRadialGradient(context, gradient, CGPointMake(kCenterX, 1), 0, CGPointMake(kCenterX, 1), rect.size.width / 2.0, kCGGradientDrawsAfterEndLocation);
     CGGradientRelease(gradient);
     gradient = NULL;
     free(positions); positions = NULL;
@@ -112,7 +112,7 @@
     CGColorSpaceRelease(baseSpace); baseSpace = NULL;
     CGContextAddEllipseInRect(context, rect);
     CGContextClip(context);
-    CGContextDrawRadialGradient(context, gradient, kCenterPoint, 0, kCenterPoint, rect.size.width / 2.0, kCGGradientDrawsAfterEndLocation);
+    CGContextDrawRadialGradient(context, gradient, CGPointMake(kCenterX, 1), 0, CGPointMake(kCenterX, 1), rect.size.width / 2.0, kCGGradientDrawsAfterEndLocation);
     CGGradientRelease(gradient); gradient = NULL;
     free(positions); positions = NULL;
     

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeViewStyleFlatThin.h

@@ -9,9 +9,11 @@
 #import "WMGaugeViewStyle.h"
 
 @interface WMGaugeViewStyleFlatThin : NSObject<WMGaugeViewStyle>
-
+// 指针 线宽
 @property (nonatomic) CGFloat needleWidth;
+// 指针 线高
 @property (nonatomic) CGFloat needleHeight;
+// 顶部表盘大小
 @property (nonatomic) CGFloat needleScrewRadius;
 
 @property (nonatomic) UIColor* needleColor;

+ 20 - 15
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/WMGaugeView/WMGaugeViewStyleFlatThin.m

@@ -19,21 +19,25 @@
 - (instancetype)init
 {
     if (self = [super init]) {
-        _needleWidth = 0.012;
-        _needleHeight = 0.4;
-        _needleScrewRadius = 0.05;
+        _needleWidth = 0.002;
+        _needleHeight = 0.8;
+        _needleScrewRadius = 0.12;
 //        _needleColor = RGB(255, 104, 97);//橘红色
-        _needleColor = [[UIColor redColor] colorWithAlphaComponent:0.2];
+//        _needleColor = [[UIColor redColor] colorWithAlphaComponent:0.2];
+        _needleColor = [UIColor whiteColor];
 //        _needleScrewColor = RGB(68, 84, 105);//蓝紫灰色
-        _needleScrewColor = [UIColor systemTealColor];
+//        _needleScrewColor = [UIColor systemTealColor];
+        _needleScrewColor = HexRGB(0x1A1C21);
         
         _externalRingRadius = 0.24;
 //        _externalFaceColor = RGB(255, 104, 97);
-        _externalFaceColor = [[UIColor redColor] colorWithAlphaComponent:0.2];
-
+//        _externalFaceColor = [[[UIColor redColor] colorWithAlphaComponent:0.2]];
+        _externalFaceColor = [UIColor clearColor];
+        
         _internalRingRadius = 0.1;
 //        _internalFaceColor = RGB(242, 99, 92);//亮橘红色
         _internalFaceColor = [[UIColor yellowColor] colorWithAlphaComponent:0.2];
+        _internalFaceColor = [UIColor clearColor];
         
 //        _borderColor = RGBA(81, 84, 89, 160);//火山灰色
         _borderColor = [UIColor blackColor];
@@ -46,16 +50,17 @@
 {
     _needleLayer = [CAShapeLayer layer];
     UIBezierPath *needlePath = [UIBezierPath bezierPath];
-    [needlePath moveToPoint:CGPointMake(FULLSCALE(kCenterX - _needleWidth, kCenterY))];
-    [needlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX + _needleWidth, kCenterY))];
-    [needlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX, kCenterY - _needleHeight))];
+    [needlePath moveToPoint:CGPointMake(FULLSCALE(kCenterX - _needleWidth, 1))];
+    [needlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX + _needleWidth, 1))];
+    [needlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX + _needleWidth, 1 - _needleHeight))];
+    [needlePath addLineToPoint:CGPointMake(FULLSCALE(kCenterX - _needleWidth, 1 - _needleHeight))];
     [needlePath closePath];
     
     _needleLayer.path = needlePath.CGPath;
     _needleLayer.backgroundColor = [[UIColor clearColor] CGColor];
     _needleLayer.fillColor = _needleColor.CGColor;
     _needleLayer.strokeColor = _needleColor.CGColor;
-    _needleLayer.lineWidth = 1.2;
+    _needleLayer.lineWidth = 2;
     
     // Needle shadow
     _needleLayer.shadowColor = [[UIColor blackColor] CGColor];
@@ -67,8 +72,8 @@
     
     // Screw drawing
     CAShapeLayer *screwLayer = [CAShapeLayer layer];
-    screwLayer.bounds = CGRectMake(FULLSCALE(kCenterX - _needleScrewRadius, kCenterY - _needleScrewRadius), FULLSCALE(_needleScrewRadius * 2.0, _needleScrewRadius * 2.0));
-    screwLayer.position = CGPointMake(FULLSCALE(kCenterX, kCenterY));
+    screwLayer.bounds = CGRectMake(FULLSCALE(kCenterX - _needleScrewRadius, 1 - _needleScrewRadius), FULLSCALE(_needleScrewRadius * 2.0, _needleScrewRadius * 2.0));
+    screwLayer.position = CGPointMake(FULLSCALE(kCenterX, 1));
     screwLayer.path = [UIBezierPath bezierPathWithOvalInRect:screwLayer.bounds].CGPath;
     screwLayer.fillColor = _needleScrewColor.CGColor;
     
@@ -84,12 +89,12 @@
 - (void)drawFaceWithContext:(CGContextRef)context inRect:(CGRect)rect
 {
     // External circle
-    CGRect externalRect = CGRectMake(kCenterX - _externalRingRadius, kCenterY - _externalRingRadius, _externalRingRadius * 2.0, _externalRingRadius * 2.0);
+    CGRect externalRect = CGRectMake(kCenterX - _externalRingRadius, 1 - _externalRingRadius, _externalRingRadius * 2.0, _externalRingRadius * 2.0);
     CGContextSetFillColorWithColor(context, _externalFaceColor.CGColor);
     CGContextFillEllipseInRect(context, externalRect);
 
     // Inner circle
-    CGRect internalRect = CGRectMake(kCenterX - _internalRingRadius, kCenterY - _internalRingRadius, _internalRingRadius * 2.0, _internalRingRadius * 2.0);
+    CGRect internalRect = CGRectMake(kCenterX - _internalRingRadius, 1 - _internalRingRadius, _internalRingRadius * 2.0, _internalRingRadius * 2.0);
     CGContextSetFillColorWithColor(context, _internalFaceColor.CGColor);
     CGContextFillEllipseInRect(context, internalRect);
     

+ 19 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/DialPlateView.h

@@ -0,0 +1,19 @@
+//
+//  DialPlateView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/14.
+//
+
+#import <UIKit/UIKit.h>
+#import "KSGaugeView.h"
+NS_ASSUME_NONNULL_BEGIN
+
+/// 表盘View
+@interface DialPlateView : UIView
+
+@property (nonatomic, strong) KSGaugeView *gaugeView;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 51 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/DialPlateView.m

@@ -0,0 +1,51 @@
+//
+//  DialPlateView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/14.
+//
+
+#import "DialPlateView.h"
+#import "WMGaugeViewStyleFlatThin.h"
+
+@interface DialPlateView ()
+
+
+@end
+
+@implementation DialPlateView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self configUI];
+    }
+    return self;
+}
+
+- (void)configUI {
+    self.backgroundColor = [UIColor clearColor];
+    [self addSubview:self.gaugeView];
+    [self.gaugeView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.top.bottom.right.mas_equalTo(self);
+    }];
+    
+}
+
+- (KSGaugeView *)gaugeView {
+    if (!_gaugeView) {
+        _gaugeView = [[KSGaugeView alloc] init];
+    }
+    return _gaugeView;
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 73 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/ToneTuningBodyView.h

@@ -0,0 +1,73 @@
+//
+//  ToneTuningBodyView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/14.
+//
+
+#import <UIKit/UIKit.h>
+
+#define MAXFREQUENCE (445)
+#define MINFREQUENCE (415)
+
+typedef NS_ENUM(NSInteger, TUNINGACTION) {
+    TUNINGACTION_FREQUENCE,   // 调节频率
+    TUNINGACTION_FORKSETTING, // 音叉设置
+    TUNINGACTION_PLAY,        // 播放音叉
+    TUNINGACTION_STOP,        // 停止播放
+};
+
+typedef void(^TuningActionCallback)(TUNINGACTION action, NSInteger frequence);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ToneTuningBodyView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *plateView;
+
+@property (weak, nonatomic) IBOutlet UIView *pitchBgView;
+
+@property (weak, nonatomic) IBOutlet UILabel *nomalPitch;
+
+@property (weak, nonatomic) IBOutlet UIView *transferView;
+
+@property (weak, nonatomic) IBOutlet UILabel *transferNomalPitch;
+
+@property (weak, nonatomic) IBOutlet UILabel *transferPitch;
+
+@property (weak, nonatomic) IBOutlet UILabel *transferDesc;
+
+@property (weak, nonatomic) IBOutlet UILabel *A4FrequenceLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *pitchFrequenceLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *preFrequence;
+
+@property (weak, nonatomic) IBOutlet UILabel *nextFrequence;
+
+@property (nonatomic, assign) NSInteger A4Frequence;
+
+@property (nonatomic, assign) BOOL isPlaying;
+
+// 是否移调
+@property (nonatomic, assign) BOOL isTransfer;
+// 移调调号
+@property (nonatomic, strong) NSString *transferPitchDesc;
+
+// 偏移
+@property (nonatomic, assign) NSInteger distance;
+
+// 频率是否正常
+@property (nonatomic, assign) BOOL frequenceCorrect;
+
+@property (nonatomic, assign) CGFloat rateFrequence;
+
++ (instancetype)shareInstance;
+
+- (void)tuningViewAction:(TuningActionCallback)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 170 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/ToneTuningBodyView.m

@@ -0,0 +1,170 @@
+//
+//  ToneTuningBodyView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/14.
+//
+
+#import "ToneTuningBodyView.h"
+
+@interface ToneTuningBodyView ()
+
+@property (weak, nonatomic) IBOutlet UIView *minusView;
+
+@property (weak, nonatomic) IBOutlet UIButton *minusButton;
+
+@property (weak, nonatomic) IBOutlet UIView *addView;
+
+@property (weak, nonatomic) IBOutlet UIButton *addButton;
+
+@property (weak, nonatomic) IBOutlet UIButton *playButton;
+@property (weak, nonatomic) IBOutlet UILabel *distanceLabel;
+
+@property (weak, nonatomic) IBOutlet UIImageView *rightImage;
+
+@property (nonatomic, copy) TuningActionCallback callback;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *lineWidth;
+
+@end
+
+@implementation ToneTuningBodyView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    
+    CAGradientLayer *layer = [self createGradientLayerFromColor:HexRGB(0x323D50) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0x1C2331) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, KPortraitWidth - 28, 170)];
+    layer.cornerRadius = 11.0f;
+    layer.masksToBounds = YES;
+    [self.pitchBgView.layer addSublayer:layer];
+    
+    CAGradientLayer *minusLayer = [self createGradientLayerFromColor:HexRGB(0x3C495F) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0x1C2331) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, 50, 31)];
+    minusLayer.cornerRadius = 15.5f;
+    minusLayer.masksToBounds = YES;
+    [self.minusView.layer addSublayer:minusLayer];
+    
+    CAGradientLayer *addViewLayer = [self createGradientLayerFromColor:HexRGB(0x3C495F) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0x1C2331) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, 50, 31)];
+    addViewLayer.cornerRadius = 15.5f;
+    addViewLayer.masksToBounds = YES;
+    [self.addView.layer addSublayer:addViewLayer];
+    self.transferView.hidden = YES;
+    
+}
+
++ (instancetype)shareInstance {
+    ToneTuningBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"ToneTuningBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (CAGradientLayer *)createGradientLayerFromColor:(UIColor *)fromColor startPoint:(CGPoint)startPoint endColor:(UIColor *)endColor endPoint:(CGPoint)endPoint bounds:(CGRect)bounds {
+    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
+    gradientLayer.colors = @[(__bridge id)fromColor.CGColor, (__bridge id)endColor.CGColor];
+    gradientLayer.startPoint = startPoint;
+    gradientLayer.endPoint = endPoint;
+    gradientLayer.frame = bounds;
+    gradientLayer.locations = @[@(0),@(1.0f)];
+    return gradientLayer;
+}
+
+
+- (void)tuningViewAction:(TuningActionCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)frequenceMinus:(id)sender {
+    NSInteger frequence = self.A4Frequence;
+    if (self.A4Frequence <= MINFREQUENCE) {
+        return;
+    }
+    self.A4Frequence = frequence - 1;
+    if (self.callback) {
+        self.callback(TUNINGACTION_FREQUENCE, self.A4Frequence);
+    }
+}
+
+- (IBAction)frequenceAdd:(id)sender {
+    NSInteger frequence = self.A4Frequence;
+    if (self.A4Frequence >= MAXFREQUENCE) {
+        return;
+    }
+    self.A4Frequence = frequence + 1;
+    if (self.callback) {
+        self.callback(TUNINGACTION_FREQUENCE, self.A4Frequence);
+    }
+}
+
+
+- (void)setA4Frequence:(NSInteger)A4Frequence {
+    _A4Frequence = A4Frequence;
+    self.A4FrequenceLabel.text = [NSString stringWithFormat:@"A4=%zdHz",A4Frequence];
+}
+
+- (IBAction)forkSetting:(id)sender {
+    if (self.callback) {
+        self.callback(TUNINGACTION_FORKSETTING, self.A4Frequence);
+    }
+}
+
+- (IBAction)playButtonAction:(id)sender {
+    self.isPlaying = !self.isPlaying;
+    TUNINGACTION action = self.isPlaying ? TUNINGACTION_PLAY : TUNINGACTION_STOP;
+    if (self.callback) {
+        self.callback(action, self.A4Frequence);
+    }
+}
+
+- (void)setIsPlaying:(BOOL)isPlaying {
+    _isPlaying = isPlaying;
+    NSString *playImage = isPlaying ? @"fork_play" : @"fork_unPlay";
+    [self.playButton setImage:[UIImage imageNamed:playImage] forState:UIControlStateNormal];
+}
+
+- (void)setIsTransfer:(BOOL)isTransfer {
+    _isTransfer = isTransfer;
+    if (isTransfer) {
+        self.nomalPitch.hidden = YES;
+        self.transferView.hidden = NO;
+    }
+    else {
+        self.nomalPitch.hidden = NO;
+        self.transferView.hidden = YES;
+    }
+}
+
+- (void)setDistance:(NSInteger)distance {
+    _distance = distance;
+    self.distanceLabel.text = [NSString stringWithFormat:@"%zd¢", distance];
+}
+
+- (void)setFrequenceCorrect:(BOOL)frequenceCorrect {
+    _frequenceCorrect = frequenceCorrect;
+    if (frequenceCorrect) {
+        self.rightImage.hidden = NO;
+    }
+    else {
+        self.rightImage.hidden = YES;
+    }
+}
+
+- (void)setRateFrequence:(CGFloat)rateFrequence {
+    _rateFrequence = rateFrequence;
+    [UIView animateWithDuration:0.8 animations:^{
+        self.lineWidth.constant = (kScreenWidth - 50) * rateFrequence;
+    } completion:^(BOOL finished) {
+
+    }];
+}
+
++ (CGFloat)getViewHeight {
+    return (KPortraitWidth - 16) / 187 * 127 - 244 + 705;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 449 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/ToneTuningBodyView.xib

@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_0" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <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="ToneTuningBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="705"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A4=440Hz" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ux8-2g-RqK">
+                    <rect key="frame" x="22" y="10" width="80" height="22"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="22" id="0p2-aR-QPJ"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tuning_warning" translatesAutoresizingMaskIntoConstraints="NO" id="Sbe-L2-liH">
+                    <rect key="frame" x="107" y="15" width="13" height="12"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="13" id="A7f-bT-aBO"/>
+                        <constraint firstAttribute="height" constant="12" id="gve-gP-2q7"/>
+                    </constraints>
+                </imageView>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="plate_bg" translatesAutoresizingMaskIntoConstraints="NO" id="SXB-cz-Qdh">
+                    <rect key="frame" x="8" y="41.999999999999986" width="359" height="243.66666666666663"/>
+                    <constraints>
+                        <constraint firstAttribute="width" secondItem="SXB-cz-Qdh" secondAttribute="height" multiplier="187:127" id="ixC-MD-R46"/>
+                    </constraints>
+                </imageView>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Zrx-Pe-2NT">
+                    <rect key="frame" x="15" y="77.666666666666671" width="345" height="172.33333333333331"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="width" secondItem="Zrx-Pe-2NT" secondAttribute="height" multiplier="2:1" id="J6J-6P-lDY"/>
+                    </constraints>
+                </view>
+                <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="frequence_right" translatesAutoresizingMaskIntoConstraints="NO" id="dOO-kx-vvP">
+                    <rect key="frame" x="172.66666666666666" y="142.66666666666666" width="30" height="30"/>
+                </imageView>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9aU-LL-Lsq">
+                    <rect key="frame" x="147.66666666666666" y="190" width="80" height="80"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0¢" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D7p-nE-fr1">
+                            <rect key="frame" x="20.333333333333343" y="24.666666666666657" width="39" height="31"/>
+                            <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="26"/>
+                            <color key="textColor" red="0.0" green="1" blue="0.81176470588235294" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" red="0.062745098039215685" green="0.074509803921568626" blue="0.094117647058823528" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="80" id="EVn-sM-7ft"/>
+                        <constraint firstItem="D7p-nE-fr1" firstAttribute="centerY" secondItem="9aU-LL-Lsq" secondAttribute="centerY" id="YyQ-A4-OY3"/>
+                        <constraint firstAttribute="width" constant="80" id="gV3-KZ-iAV"/>
+                        <constraint firstItem="D7p-nE-fr1" firstAttribute="centerX" secondItem="9aU-LL-Lsq" secondAttribute="centerX" id="rVT-76-xxU"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="40"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="g4h-vE-BMO">
+                    <rect key="frame" x="99.666666666666671" y="312.33333333333331" width="50.000000000000014" height="31"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Cai-ev-v5E">
+                    <rect key="frame" x="99.666666666666671" y="312.33333333333331" width="50.000000000000014" height="31"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="31" id="Uqc-Hy-CFM"/>
+                        <constraint firstAttribute="width" constant="50" id="aIN-Pe-lUG"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" image="frequence_minus"/>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                            <size key="value" width="0.0" height="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                            <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.27000000000000002" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="15.5"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <action selector="frequenceMinus:" destination="iN0-l3-epB" eventType="touchUpInside" id="BeR-xr-RYR"/>
+                    </connections>
+                </button>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uwR-ra-cDH">
+                    <rect key="frame" x="225.66666666666666" y="312.33333333333331" width="49.999999999999972" height="31"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VJU-LE-Pdq">
+                    <rect key="frame" x="225.66666666666666" y="312.33333333333331" width="49.999999999999972" height="31"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="31" id="30u-8l-H8Y"/>
+                        <constraint firstAttribute="width" constant="50" id="nH5-lU-4GN"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" image="freguqnce_add"/>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                            <size key="value" width="0.0" height="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="15.5"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <action selector="frequenceAdd:" destination="iN0-l3-epB" eventType="touchUpInside" id="k9j-Rr-TnO"/>
+                    </connections>
+                </button>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CALIB" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sZj-ZO-VHR">
+                    <rect key="frame" x="166.66666666666666" y="317.66666666666669" width="42" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="NtT-NM-EEj"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="16"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Em-FC-3EL">
+                    <rect key="frame" x="14" y="369.66666666666669" width="347" height="170.00000000000006"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="170" id="z4J-oh-ydh"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="11"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
+                            <size key="value" width="0.0" height="2"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="boolean" keyPath="maskToBounces" value="YES"/>
+                        <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
+                            <color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZeX-qM-LJD">
+                    <rect key="frame" x="14" y="369.66666666666669" width="347" height="170.00000000000006"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uIc-iL-EXg">
+                            <rect key="frame" x="141" y="56" width="65" height="50"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="50" id="CLE-2e-wuG"/>
+                                <constraint firstAttribute="width" constant="65" id="eee-My-kgb"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="boldSystem" pointSize="40"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6FP-hm-dfl">
+                            <rect key="frame" x="11" y="153.99999999999994" width="325" height="5"/>
+                            <subviews>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="i3w-7a-0hL">
+                                    <rect key="frame" x="0.0" y="0.0" width="0.0" height="5"/>
+                                    <color key="backgroundColor" red="0.0" green="1" blue="0.81176470588235294" alpha="1" colorSpace="calibratedRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" id="Ndf-lc-KO2"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="2.5"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
+                            </subviews>
+                            <color key="backgroundColor" red="0.1764705882352941" green="0.21176470588235294" blue="0.28235294117647058" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="5" id="3Xi-hl-yD4"/>
+                                <constraint firstAttribute="bottom" secondItem="i3w-7a-0hL" secondAttribute="bottom" id="54u-rc-9uK"/>
+                                <constraint firstItem="i3w-7a-0hL" firstAttribute="top" secondItem="6FP-hm-dfl" secondAttribute="top" id="KB8-r8-QVf"/>
+                                <constraint firstItem="i3w-7a-0hL" firstAttribute="leading" secondItem="6FP-hm-dfl" secondAttribute="leading" id="qxd-Xa-3KK"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="2.5"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ya5-kp-sTW">
+                            <rect key="frame" x="0.0" y="0.0" width="347" height="143"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tuning_transfer" translatesAutoresizingMaskIntoConstraints="NO" id="guW-zj-dkh">
+                                    <rect key="frame" x="163.66666666666666" y="80" width="20" height="23"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="20" id="3Ic-Ab-Zdu"/>
+                                        <constraint firstAttribute="height" constant="23" id="Jad-yu-6YO"/>
+                                    </constraints>
+                                </imageView>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MNR-s0-re6">
+                                    <rect key="frame" x="47.666666666666657" y="65" width="65" height="53"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="65" id="UZx-8Z-YUR"/>
+                                        <constraint firstAttribute="height" constant="53" id="rPI-W9-m7n"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="40"/>
+                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vku-Yz-AEN">
+                                    <rect key="frame" x="234.66666666666663" y="65" width="65" height="53"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="65" id="J62-5N-w7f"/>
+                                        <constraint firstAttribute="height" constant="53" id="vCR-NZ-KzZ"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="40"/>
+                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Concert" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FLn-wI-hyg">
+                                    <rect key="frame" x="57.666666666666671" y="38" width="45" height="17"/>
+                                    <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="14"/>
+                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" ins." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tD3-d1-rfd">
+                                    <rect key="frame" x="255.00000000000003" y="38" width="24.333333333333343" height="17"/>
+                                    <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="14"/>
+                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="MNR-s0-re6" firstAttribute="top" secondItem="FLn-wI-hyg" secondAttribute="bottom" constant="10" id="CiQ-l5-VOE"/>
+                                <constraint firstItem="guW-zj-dkh" firstAttribute="top" secondItem="ya5-kp-sTW" secondAttribute="top" constant="80" id="KZl-F4-IKz"/>
+                                <constraint firstItem="vku-Yz-AEN" firstAttribute="leading" secondItem="guW-zj-dkh" secondAttribute="trailing" constant="51" id="Lab-An-ath"/>
+                                <constraint firstItem="guW-zj-dkh" firstAttribute="centerY" secondItem="MNR-s0-re6" secondAttribute="centerY" id="N1i-3X-n6R"/>
+                                <constraint firstItem="MNR-s0-re6" firstAttribute="centerX" secondItem="FLn-wI-hyg" secondAttribute="centerX" id="Ozw-yh-mZ2"/>
+                                <constraint firstItem="vku-Yz-AEN" firstAttribute="centerY" secondItem="MNR-s0-re6" secondAttribute="centerY" id="Sxq-0v-HVY"/>
+                                <constraint firstItem="guW-zj-dkh" firstAttribute="centerX" secondItem="ya5-kp-sTW" secondAttribute="centerX" id="U6o-GX-a5D"/>
+                                <constraint firstItem="vku-Yz-AEN" firstAttribute="top" secondItem="tD3-d1-rfd" secondAttribute="bottom" constant="10" id="tg6-Gb-dMJ"/>
+                                <constraint firstItem="vku-Yz-AEN" firstAttribute="centerX" secondItem="tD3-d1-rfd" secondAttribute="centerX" id="wTA-Ek-KF6"/>
+                                <constraint firstItem="guW-zj-dkh" firstAttribute="leading" secondItem="MNR-s0-re6" secondAttribute="trailing" constant="51" id="x7v-5G-Dlt"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="uIc-iL-EXg" firstAttribute="centerX" secondItem="ZeX-qM-LJD" secondAttribute="centerX" id="2Bp-Ty-UhN"/>
+                        <constraint firstAttribute="bottom" secondItem="6FP-hm-dfl" secondAttribute="bottom" constant="11" id="31N-v4-lk3"/>
+                        <constraint firstItem="ya5-kp-sTW" firstAttribute="top" secondItem="ZeX-qM-LJD" secondAttribute="top" id="8zF-cX-C0k"/>
+                        <constraint firstAttribute="trailing" secondItem="ya5-kp-sTW" secondAttribute="trailing" id="T8f-BR-fRF"/>
+                        <constraint firstItem="ya5-kp-sTW" firstAttribute="leading" secondItem="ZeX-qM-LJD" secondAttribute="leading" id="beh-Nw-l30"/>
+                        <constraint firstItem="6FP-hm-dfl" firstAttribute="leading" secondItem="ZeX-qM-LJD" secondAttribute="leading" constant="11" id="dcC-0h-BqT"/>
+                        <constraint firstItem="6FP-hm-dfl" firstAttribute="top" secondItem="ya5-kp-sTW" secondAttribute="bottom" constant="11" id="ioo-lM-ERL"/>
+                        <constraint firstItem="uIc-iL-EXg" firstAttribute="top" secondItem="ZeX-qM-LJD" secondAttribute="top" constant="56" id="kgc-uR-hoE"/>
+                        <constraint firstAttribute="trailing" secondItem="6FP-hm-dfl" secondAttribute="trailing" constant="11" id="lZt-Ec-22l"/>
+                    </constraints>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tkl-Cw-Mdz">
+                    <rect key="frame" x="6" y="551.66666666666663" width="181.66666666666666" height="90"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="90" id="t6I-nJ-9Qd"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" image="fork_unchoose" backgroundImage="forkButton_bg"/>
+                    <connections>
+                        <action selector="forkSetting:" destination="iN0-l3-epB" eventType="touchUpInside" id="wcc-Y0-dc2"/>
+                    </connections>
+                </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="p0z-qL-bMm">
+                    <rect key="frame" x="187.66666666666663" y="551.66666666666663" width="181.33333333333337" height="90"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="90" id="D2z-en-N9g"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" image="fork_unPlay" backgroundImage="playButton_bg"/>
+                    <connections>
+                        <action selector="playButtonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="xnp-kV-r78"/>
+                    </connections>
+                </button>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="toning_bottom" translatesAutoresizingMaskIntoConstraints="NO" id="IXi-hL-in1">
+                    <rect key="frame" x="18.666666666666657" y="648.66666666666663" width="338" height="29"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="338" id="Ohx-Sa-5XQ"/>
+                        <constraint firstAttribute="height" constant="29" id="tsc-a8-bbh"/>
+                    </constraints>
+                </imageView>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5sT-Eb-2rJ">
+                    <rect key="frame" x="55" y="250" width="0.0" height="14"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="14" id="g2f-fr-DrN"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ke2-CX-K7G">
+                    <rect key="frame" x="320" y="250" width="0.0" height="14"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="14" id="Csw-Dx-b3r"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tuning_decorate" translatesAutoresizingMaskIntoConstraints="NO" id="v4Z-dA-iqI">
+                    <rect key="frame" x="29.666666666666671" y="311.66666666666669" width="48" height="32"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="32" id="7Od-xm-q3j"/>
+                        <constraint firstAttribute="width" constant="48" id="9hP-Ux-x02"/>
+                    </constraints>
+                </imageView>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tuning_decorate" translatesAutoresizingMaskIntoConstraints="NO" id="V2v-I8-jzm">
+                    <rect key="frame" x="297.66666666666669" y="311.66666666666669" width="48" height="32"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="48" id="e8K-AZ-0N3"/>
+                        <constraint firstAttribute="height" constant="32" id="qMW-a2-T7G"/>
+                    </constraints>
+                </imageView>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PnS-Ku-vsa">
+                    <rect key="frame" x="187.66666666666666" y="39.666666666666664" width="0.0" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="2X9-wE-8CN"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="sZj-ZO-VHR" firstAttribute="leading" secondItem="Cai-ev-v5E" secondAttribute="trailing" constant="17" id="0D9-VV-0Lx"/>
+                <constraint firstItem="9aU-LL-Lsq" firstAttribute="bottom" secondItem="Zrx-Pe-2NT" secondAttribute="bottom" constant="20" id="0pz-qw-7TT"/>
+                <constraint firstItem="7Em-FC-3EL" firstAttribute="leading" secondItem="ZeX-qM-LJD" secondAttribute="leading" id="1nv-ne-dbI"/>
+                <constraint firstItem="g4h-vE-BMO" firstAttribute="bottom" secondItem="Cai-ev-v5E" secondAttribute="bottom" id="3KO-qD-HZ2"/>
+                <constraint firstItem="p0z-qL-bMm" firstAttribute="top" secondItem="7Em-FC-3EL" secondAttribute="bottom" constant="12" id="4SR-6A-ipm"/>
+                <constraint firstItem="p0z-qL-bMm" firstAttribute="leading" secondItem="Tkl-Cw-Mdz" secondAttribute="trailing" id="5EB-Vw-dj2"/>
+                <constraint firstItem="dOO-kx-vvP" firstAttribute="centerX" secondItem="Zrx-Pe-2NT" secondAttribute="centerX" id="5bg-6Y-rr4"/>
+                <constraint firstItem="Cai-ev-v5E" firstAttribute="leading" secondItem="v4Z-dA-iqI" secondAttribute="trailing" constant="22" id="6b8-ki-CY9"/>
+                <constraint firstItem="Ke2-CX-K7G" firstAttribute="trailing" secondItem="Zrx-Pe-2NT" secondAttribute="trailing" constant="-40" id="6hN-re-nBS"/>
+                <constraint firstItem="7Em-FC-3EL" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="7ZV-OX-B1b"/>
+                <constraint firstItem="Cai-ev-v5E" firstAttribute="centerY" secondItem="v4Z-dA-iqI" secondAttribute="centerY" id="8Eb-SN-txF"/>
+                <constraint firstItem="IXi-hL-in1" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="Au1-eF-R25"/>
+                <constraint firstItem="VJU-LE-Pdq" firstAttribute="leading" secondItem="sZj-ZO-VHR" secondAttribute="trailing" constant="17" id="C3a-5i-dtf"/>
+                <constraint firstItem="Zrx-Pe-2NT" firstAttribute="top" secondItem="PnS-Ku-vsa" secondAttribute="bottom" constant="18" id="CQp-De-b4B"/>
+                <constraint firstItem="p0z-qL-bMm" firstAttribute="width" secondItem="Tkl-Cw-Mdz" secondAttribute="width" id="Dk9-Wv-4mD"/>
+                <constraint firstItem="PnS-Ku-vsa" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="FLp-jq-kpX"/>
+                <constraint firstItem="SXB-cz-Qdh" firstAttribute="top" secondItem="Ux8-2g-RqK" secondAttribute="bottom" constant="10" id="FYQ-Rq-QtT"/>
+                <constraint firstItem="Zrx-Pe-2NT" firstAttribute="centerY" secondItem="SXB-cz-Qdh" secondAttribute="centerY" id="Fj7-fu-frt"/>
+                <constraint firstItem="7Em-FC-3EL" firstAttribute="top" secondItem="ZeX-qM-LJD" secondAttribute="top" id="FlV-cS-OgW"/>
+                <constraint firstItem="g4h-vE-BMO" firstAttribute="trailing" secondItem="Cai-ev-v5E" secondAttribute="trailing" id="N2Y-VV-UPi"/>
+                <constraint firstItem="SXB-cz-Qdh" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="8" id="O3Y-u0-MV3"/>
+                <constraint firstItem="sZj-ZO-VHR" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="PEf-sX-DzU"/>
+                <constraint firstItem="Tkl-Cw-Mdz" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="6" id="Q9g-JT-4o6"/>
+                <constraint firstItem="9aU-LL-Lsq" firstAttribute="centerX" secondItem="Zrx-Pe-2NT" secondAttribute="centerX" id="RYl-V1-dyU"/>
+                <constraint firstItem="VJU-LE-Pdq" firstAttribute="top" secondItem="uwR-ra-cDH" secondAttribute="top" id="RZq-Hd-B0P"/>
+                <constraint firstAttribute="trailing" secondItem="p0z-qL-bMm" secondAttribute="trailing" constant="6" id="RoG-8u-1ap"/>
+                <constraint firstItem="V2v-I8-jzm" firstAttribute="centerY" secondItem="VJU-LE-Pdq" secondAttribute="centerY" id="T1g-e0-zDn"/>
+                <constraint firstItem="VJU-LE-Pdq" firstAttribute="trailing" secondItem="uwR-ra-cDH" secondAttribute="trailing" id="Tew-m4-zeK"/>
+                <constraint firstItem="Ke2-CX-K7G" firstAttribute="centerY" secondItem="5sT-Eb-2rJ" secondAttribute="centerY" id="Vh3-en-b6z"/>
+                <constraint firstItem="V2v-I8-jzm" firstAttribute="leading" secondItem="VJU-LE-Pdq" secondAttribute="trailing" constant="22" id="YYc-Q5-aGD"/>
+                <constraint firstItem="IXi-hL-in1" firstAttribute="top" secondItem="Tkl-Cw-Mdz" secondAttribute="bottom" constant="7" id="YgN-1n-xha"/>
+                <constraint firstAttribute="trailing" secondItem="7Em-FC-3EL" secondAttribute="trailing" constant="14" id="a3n-fN-euB"/>
+                <constraint firstItem="dOO-kx-vvP" firstAttribute="firstBaseline" secondItem="Zrx-Pe-2NT" secondAttribute="firstBaseline" constant="65" id="bHF-Ev-tZG"/>
+                <constraint firstItem="g4h-vE-BMO" firstAttribute="leading" secondItem="Cai-ev-v5E" secondAttribute="leading" id="btp-Oe-y1i"/>
+                <constraint firstItem="sZj-ZO-VHR" firstAttribute="centerY" secondItem="Cai-ev-v5E" secondAttribute="centerY" id="cIh-IQ-xRr"/>
+                <constraint firstItem="Tkl-Cw-Mdz" firstAttribute="top" secondItem="7Em-FC-3EL" secondAttribute="bottom" constant="12" id="cJp-sC-nM0"/>
+                <constraint firstItem="Sbe-L2-liH" firstAttribute="centerY" secondItem="Ux8-2g-RqK" secondAttribute="centerY" id="cmi-yM-djK"/>
+                <constraint firstItem="7Em-FC-3EL" firstAttribute="bottom" secondItem="ZeX-qM-LJD" secondAttribute="bottom" id="coV-Qi-RkQ"/>
+                <constraint firstItem="Ux8-2g-RqK" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="22" id="cwN-DO-wkV"/>
+                <constraint firstItem="VJU-LE-Pdq" firstAttribute="bottom" secondItem="uwR-ra-cDH" secondAttribute="bottom" id="e0m-sL-feH"/>
+                <constraint firstItem="5sT-Eb-2rJ" firstAttribute="leading" secondItem="Zrx-Pe-2NT" secondAttribute="leading" constant="40" id="eBI-aU-v4Z"/>
+                <constraint firstItem="Ux8-2g-RqK" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="ev8-FX-ve4"/>
+                <constraint firstItem="VJU-LE-Pdq" firstAttribute="leading" secondItem="uwR-ra-cDH" secondAttribute="leading" id="hAr-OA-5ce"/>
+                <constraint firstItem="5sT-Eb-2rJ" firstAttribute="top" secondItem="Zrx-Pe-2NT" secondAttribute="bottom" id="ixH-ow-czJ"/>
+                <constraint firstItem="Zrx-Pe-2NT" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="15" id="lyO-cd-xcJ"/>
+                <constraint firstItem="Sbe-L2-liH" firstAttribute="leading" secondItem="Ux8-2g-RqK" secondAttribute="trailing" constant="5" id="meC-LK-DKS"/>
+                <constraint firstItem="g4h-vE-BMO" firstAttribute="top" secondItem="Cai-ev-v5E" secondAttribute="top" id="nxA-Si-aiG"/>
+                <constraint firstItem="7Em-FC-3EL" firstAttribute="trailing" secondItem="ZeX-qM-LJD" secondAttribute="trailing" id="oKn-54-J78"/>
+                <constraint firstItem="7Em-FC-3EL" firstAttribute="top" secondItem="sZj-ZO-VHR" secondAttribute="bottom" constant="32" id="pZl-CI-zNY"/>
+                <constraint firstItem="VJU-LE-Pdq" firstAttribute="centerY" secondItem="Cai-ev-v5E" secondAttribute="centerY" id="usx-pc-WFX"/>
+                <constraint firstItem="sZj-ZO-VHR" firstAttribute="top" secondItem="SXB-cz-Qdh" secondAttribute="bottom" constant="32" id="v2V-ca-D8A"/>
+                <constraint firstAttribute="trailing" secondItem="SXB-cz-Qdh" secondAttribute="trailing" constant="8" id="vQ0-wP-c03"/>
+                <constraint firstItem="Zrx-Pe-2NT" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="wef-Xs-dNx"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="A4FrequenceLabel" destination="Ux8-2g-RqK" id="Jra-7M-iTB"/>
+                <outlet property="addButton" destination="VJU-LE-Pdq" id="Ap2-3f-er6"/>
+                <outlet property="addView" destination="uwR-ra-cDH" id="aTz-zS-V4w"/>
+                <outlet property="distanceLabel" destination="D7p-nE-fr1" id="36B-jL-Pga"/>
+                <outlet property="lineWidth" destination="Ndf-lc-KO2" id="njb-WP-esU"/>
+                <outlet property="minusButton" destination="Cai-ev-v5E" id="7T1-RS-zM3"/>
+                <outlet property="minusView" destination="g4h-vE-BMO" id="SOP-VD-G0z"/>
+                <outlet property="nextFrequence" destination="Ke2-CX-K7G" id="fQM-qB-mxv"/>
+                <outlet property="nomalPitch" destination="uIc-iL-EXg" id="i9k-OK-L2i"/>
+                <outlet property="pitchBgView" destination="7Em-FC-3EL" id="0rG-SE-app"/>
+                <outlet property="pitchFrequenceLabel" destination="PnS-Ku-vsa" id="LlJ-w5-az7"/>
+                <outlet property="plateView" destination="Zrx-Pe-2NT" id="ppk-X8-oX5"/>
+                <outlet property="playButton" destination="p0z-qL-bMm" id="DsB-sp-PJ7"/>
+                <outlet property="preFrequence" destination="5sT-Eb-2rJ" id="YqE-f3-IK2"/>
+                <outlet property="rightImage" destination="dOO-kx-vvP" id="qI5-na-huC"/>
+                <outlet property="transferDesc" destination="tD3-d1-rfd" id="vBI-n9-F5P"/>
+                <outlet property="transferNomalPitch" destination="MNR-s0-re6" id="sVk-tj-gtm"/>
+                <outlet property="transferPitch" destination="vku-Yz-AEN" id="ca0-HH-hao"/>
+                <outlet property="transferView" destination="ya5-kp-sTW" id="VPm-KO-4q0"/>
+            </connections>
+            <point key="canvasLocation" x="93.84615384615384" y="-62.559241706161131"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="forkButton_bg" width="182" height="90"/>
+        <image name="fork_unPlay" width="42" height="28"/>
+        <image name="fork_unchoose" width="42" height="28"/>
+        <image name="freguqnce_add" width="14" height="14"/>
+        <image name="frequence_minus" width="14" height="14"/>
+        <image name="frequence_right" width="30" height="30"/>
+        <image name="plate_bg" width="359" height="254"/>
+        <image name="playButton_bg" width="182" height="90"/>
+        <image name="toning_bottom" width="338" height="29"/>
+        <image name="tuning_decorate" width="48" height="32"/>
+        <image name="tuning_transfer" width="20" height="23"/>
+        <image name="tuning_warning" width="13" height="12"/>
+    </resources>
+</document>

+ 37 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TunerSettingView.h

@@ -0,0 +1,37 @@
+//
+//  TunerSettingView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/20.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, TUNETSETTING_ACTION) {
+    TUNETSETTING_ACTION_INSTRUMENT,
+    TUNETSETTING_ACTION_SURE,
+};
+
+typedef void(^TunerSettingCallback)(TUNETSETTING_ACTION action, NSInteger toneChangeRate, NSInteger frequence);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TunerSettingView : UIView
+
+@property (weak, nonatomic) IBOutlet UILabel *instrumentLabel;
+/// 乐器选择->变调情况
+@property (nonatomic, assign) NSInteger toneChangeRate;
+// A4频率
+@property (nonatomic, assign) NSInteger A4Frequence;
+
+@property (nonatomic, strong) NSString *transferPicthDesc;
+
++ (instancetype)shareInstance;
+
+- (void)tunerSettingAction:(TunerSettingCallback)callback;
+
+- (void)showView;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 92 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TunerSettingView.m

@@ -0,0 +1,92 @@
+//
+//  TunerSettingView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/20.
+//
+
+#import "TunerSettingView.h"
+#import "UIView+Animation.h"
+
+#define MAXFREQUENCE (445)
+#define MINFREQUENCE (415)
+
+@interface TunerSettingView ()
+
+@property (nonatomic, copy) TunerSettingCallback callback;
+
+@property (weak, nonatomic) IBOutlet UILabel *frequenceLabel;
+
+@end
+
+
+@implementation TunerSettingView
+
++ (instancetype)shareInstance {
+    TunerSettingView *view = [[[NSBundle mainBundle] loadNibNamed:@"TunerSettingView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)tunerSettingAction:(TunerSettingCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)showView {
+    [[NSObject getKeyWindow] addSubview:self];
+    [self setPopAnimation];
+}
+
+- (void)removeView {
+    [self removeFromSuperview];
+}
+
+- (IBAction)frequenceMinus:(id)sender {
+    NSInteger frequence = self.A4Frequence;
+    if (self.A4Frequence <= MINFREQUENCE) {
+        return;
+    }
+    self.A4Frequence = frequence - 1;
+
+}
+
+- (IBAction)frequenceAdd:(id)sender {
+    NSInteger frequence = self.A4Frequence;
+    if (self.A4Frequence >= MAXFREQUENCE) {
+        return;
+    }
+    self.A4Frequence = frequence + 1;
+}
+- (IBAction)resetFrequence:(id)sender {
+    self.A4Frequence = 440;
+}
+
+- (IBAction)chooseInstrunemt:(id)sender {
+    if (self.callback) {
+        self.callback(TUNETSETTING_ACTION_INSTRUMENT, self.toneChangeRate, self.A4Frequence);
+    }
+}
+
+
+- (IBAction)sureAtion:(id)sender {
+    if (self.callback) {
+        self.callback(TUNETSETTING_ACTION_SURE, self.toneChangeRate, self.A4Frequence);
+    }
+    [self removeView];
+}
+
+
+- (void)setA4Frequence:(NSInteger)A4Frequence {
+    _A4Frequence = A4Frequence;
+    self.frequenceLabel.text = [NSString stringWithFormat:@"%zdHz",A4Frequence];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 249 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TunerSettingView.xib

@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_0" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <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="TunerSettingView">
+            <rect key="frame" x="0.0" y="0.0" width="390" height="844"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zvx-Af-NkA">
+                    <rect key="frame" x="59.666666666666657" y="255.66666666666663" width="271" height="333"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qda-Ej-mIn">
+                            <rect key="frame" x="18" y="64.000000000000028" width="235" height="45"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="长笛:C大调" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EOf-Po-cpZ">
+                                    <rect key="frame" x="17" y="12.666666666666627" width="93" height="19.333333333333329"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="instrument_choose" translatesAutoresizingMaskIntoConstraints="NO" id="lfw-pC-y6W">
+                                    <rect key="frame" x="214" y="16" width="9" height="13"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="9" id="6lp-xW-auq"/>
+                                        <constraint firstAttribute="height" constant="13" id="xGg-HO-POW"/>
+                                    </constraints>
+                                </imageView>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4JG-vi-r5z">
+                                    <rect key="frame" x="0.0" y="0.0" width="235" height="45"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="chooseInstrunemt:" destination="iN0-l3-epB" eventType="touchUpInside" id="dRS-bh-Bqe"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" red="0.94509803921568625" green="0.94509803921568625" blue="0.94509803921568625" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="trailing" secondItem="lfw-pC-y6W" secondAttribute="trailing" constant="12" id="7H8-cv-AcI"/>
+                                <constraint firstAttribute="bottom" secondItem="4JG-vi-r5z" secondAttribute="bottom" id="9h0-YG-Kdk"/>
+                                <constraint firstItem="lfw-pC-y6W" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="EOf-Po-cpZ" secondAttribute="trailing" constant="10" id="CfB-v4-cmc"/>
+                                <constraint firstItem="lfw-pC-y6W" firstAttribute="centerY" secondItem="qda-Ej-mIn" secondAttribute="centerY" id="Eor-zw-cTu"/>
+                                <constraint firstItem="EOf-Po-cpZ" firstAttribute="centerY" secondItem="qda-Ej-mIn" secondAttribute="centerY" id="HR4-gt-ISH"/>
+                                <constraint firstAttribute="height" constant="45" id="bUq-fG-WLZ"/>
+                                <constraint firstItem="4JG-vi-r5z" firstAttribute="leading" secondItem="qda-Ej-mIn" secondAttribute="leading" id="daT-QC-JzR"/>
+                                <constraint firstAttribute="trailing" secondItem="4JG-vi-r5z" secondAttribute="trailing" id="fI2-Us-8r0"/>
+                                <constraint firstItem="4JG-vi-r5z" firstAttribute="top" secondItem="qda-Ej-mIn" secondAttribute="top" id="xJa-hI-3fS"/>
+                                <constraint firstItem="EOf-Po-cpZ" firstAttribute="leading" secondItem="qda-Ej-mIn" secondAttribute="leading" constant="17" id="xcf-bw-F3f"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="设置" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EDe-Es-ZOO">
+                            <rect key="frame" x="118" y="14.000000000000028" width="35" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="PUZ-p7-3Nr"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mDa-ie-eMH">
+                            <rect key="frame" x="18" y="275" width="235" height="40"/>
+                            <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="40" id="8vf-71-f2U"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <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="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="sureAtion:" destination="iN0-l3-epB" eventType="touchUpInside" id="NW9-2O-UWA"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2g5-vG-H7G">
+                            <rect key="frame" x="18.000000000000007" y="177.00000000000003" width="63.999999999999993" height="45"/>
+                            <color key="backgroundColor" red="0.94509803921568625" green="0.94509803921568625" blue="0.94509803921568625" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="speed_add">
+                                <color key="titleColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </state>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="frequenceAdd:" destination="iN0-l3-epB" eventType="touchUpInside" id="Uoq-GS-qWv"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qhz-EL-kI1">
+                            <rect key="frame" x="189" y="177.00000000000003" width="64" height="45"/>
+                            <color key="backgroundColor" red="0.94509803921568625" green="0.94509803921568625" blue="0.94509803921568625" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="speed_minus">
+                                <color key="titleColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </state>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="frequenceMinus:" destination="iN0-l3-epB" eventType="touchUpInside" id="a0a-bZ-ijm"/>
+                            </connections>
+                        </button>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UV0-Et-juG">
+                            <rect key="frame" x="94" y="177.00000000000003" width="83" height="45"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="440Hz" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kAP-y9-pDd">
+                                    <rect key="frame" x="19.333333333333346" y="14" width="44.333333333333343" height="17"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="45" id="6i7-n9-sOp"/>
+                                <constraint firstAttribute="width" constant="83" id="LT5-wv-I7C"/>
+                                <constraint firstItem="kAP-y9-pDd" firstAttribute="centerX" secondItem="UV0-Et-juG" secondAttribute="centerX" id="QaN-YV-ztS"/>
+                                <constraint firstItem="kAP-y9-pDd" firstAttribute="centerY" secondItem="UV0-Et-juG" secondAttribute="centerY" id="UsU-QK-hNv"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                    <real key="value" value="1"/>
+                                </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                    <color key="value" red="0.59215686270000001" green="0.59215686270000001" blue="0.59215686270000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aNk-pq-Ual">
+                            <rect key="frame" x="18" y="230.00000000000003" width="235" height="30.999999999999972"/>
+                            <color key="backgroundColor" red="0.94509803921568625" green="0.94509803921568625" blue="0.94509803921568625" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="31" id="MBY-je-3Ow"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="Reset:440Hz">
+                                <color key="titleColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            </state>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="resetFrequence:" destination="iN0-l3-epB" eventType="touchUpInside" id="GGF-HC-PX6"/>
+                            </connections>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A4 Frquency" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uzJ-r7-heL">
+                            <rect key="frame" x="18.000000000000007" y="147.00000000000003" width="83" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="DE1-95-dRt"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0cJ-gC-99F">
+                            <rect key="frame" x="18" y="135.00000000000003" width="235" height="1"/>
+                            <color key="backgroundColor" red="0.91764705882352937" green="0.91764705882352937" blue="0.91764705882352937" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="OCc-t4-qfg"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="UV0-Et-juG" firstAttribute="centerY" secondItem="2g5-vG-H7G" secondAttribute="centerY" id="3BV-NF-v7z"/>
+                        <constraint firstAttribute="bottom" secondItem="mDa-ie-eMH" secondAttribute="bottom" constant="18" id="5VQ-mF-Jhw"/>
+                        <constraint firstItem="mDa-ie-eMH" firstAttribute="leading" secondItem="aNk-pq-Ual" secondAttribute="leading" id="74N-rY-NDU"/>
+                        <constraint firstItem="EDe-Es-ZOO" firstAttribute="centerX" secondItem="zvx-Af-NkA" secondAttribute="centerX" id="80S-JL-SG1"/>
+                        <constraint firstItem="UV0-Et-juG" firstAttribute="centerX" secondItem="zvx-Af-NkA" secondAttribute="centerX" id="AjW-sj-YPf"/>
+                        <constraint firstItem="mDa-ie-eMH" firstAttribute="leading" secondItem="zvx-Af-NkA" secondAttribute="leading" constant="18" id="Icv-Bu-2GE"/>
+                        <constraint firstItem="Qhz-EL-kI1" firstAttribute="leading" secondItem="UV0-Et-juG" secondAttribute="trailing" constant="12" id="LeD-aR-KZv"/>
+                        <constraint firstItem="qda-Ej-mIn" firstAttribute="top" secondItem="EDe-Es-ZOO" secondAttribute="bottom" constant="26" id="Msr-0j-WvN"/>
+                        <constraint firstItem="uzJ-r7-heL" firstAttribute="top" secondItem="0cJ-gC-99F" secondAttribute="bottom" constant="11" id="NE8-vH-b8x"/>
+                        <constraint firstItem="2g5-vG-H7G" firstAttribute="top" secondItem="uzJ-r7-heL" secondAttribute="bottom" constant="10" id="OyQ-f6-hXP"/>
+                        <constraint firstItem="aNk-pq-Ual" firstAttribute="top" secondItem="UV0-Et-juG" secondAttribute="bottom" constant="8" id="Q0l-2U-Ozd"/>
+                        <constraint firstItem="EDe-Es-ZOO" firstAttribute="top" secondItem="zvx-Af-NkA" secondAttribute="top" constant="14" id="Vow-vC-Jjs"/>
+                        <constraint firstItem="Qhz-EL-kI1" firstAttribute="trailing" secondItem="aNk-pq-Ual" secondAttribute="trailing" id="aHS-0S-Kgy"/>
+                        <constraint firstAttribute="trailing" secondItem="mDa-ie-eMH" secondAttribute="trailing" constant="18" id="byH-F9-gVw"/>
+                        <constraint firstItem="UV0-Et-juG" firstAttribute="height" secondItem="2g5-vG-H7G" secondAttribute="height" id="cXu-TO-QAi"/>
+                        <constraint firstAttribute="trailing" secondItem="qda-Ej-mIn" secondAttribute="trailing" constant="18" id="d8m-hC-mIZ"/>
+                        <constraint firstItem="qda-Ej-mIn" firstAttribute="leading" secondItem="zvx-Af-NkA" secondAttribute="leading" constant="18" id="dv1-yD-usK"/>
+                        <constraint firstItem="uzJ-r7-heL" firstAttribute="leading" secondItem="zvx-Af-NkA" secondAttribute="leading" constant="18" id="gXv-ms-gJb"/>
+                        <constraint firstItem="mDa-ie-eMH" firstAttribute="top" secondItem="aNk-pq-Ual" secondAttribute="bottom" constant="14" id="gbF-yN-qmd"/>
+                        <constraint firstItem="UV0-Et-juG" firstAttribute="leading" secondItem="2g5-vG-H7G" secondAttribute="trailing" constant="12" id="iFc-A9-LG4"/>
+                        <constraint firstItem="Qhz-EL-kI1" firstAttribute="height" secondItem="2g5-vG-H7G" secondAttribute="height" id="nlg-Cb-apR"/>
+                        <constraint firstAttribute="trailing" secondItem="0cJ-gC-99F" secondAttribute="trailing" constant="18" id="p3h-da-69M"/>
+                        <constraint firstItem="Qhz-EL-kI1" firstAttribute="centerY" secondItem="2g5-vG-H7G" secondAttribute="centerY" id="prF-22-4aI"/>
+                        <constraint firstItem="mDa-ie-eMH" firstAttribute="trailing" secondItem="aNk-pq-Ual" secondAttribute="trailing" id="q28-gL-kU6"/>
+                        <constraint firstAttribute="width" constant="271" id="qqF-ug-lB6"/>
+                        <constraint firstItem="aNk-pq-Ual" firstAttribute="leading" secondItem="2g5-vG-H7G" secondAttribute="leading" id="tKz-5v-yaC"/>
+                        <constraint firstItem="0cJ-gC-99F" firstAttribute="top" secondItem="qda-Ej-mIn" secondAttribute="bottom" constant="26" id="tmX-4F-FaS"/>
+                        <constraint firstItem="0cJ-gC-99F" firstAttribute="leading" secondItem="zvx-Af-NkA" secondAttribute="leading" constant="18" id="wqy-8o-TR9"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="15"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="calibratedRGB"/>
+            <constraints>
+                <constraint firstItem="zvx-Af-NkA" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="WK7-3Z-e0F"/>
+                <constraint firstItem="zvx-Af-NkA" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="hnd-7l-R35"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="frequenceLabel" destination="kAP-y9-pDd" id="N3x-Ni-VBp"/>
+                <outlet property="instrumentLabel" destination="EOf-Po-cpZ" id="5ou-au-uyX"/>
+            </connections>
+            <point key="canvasLocation" x="61.538461538461533" y="-11.374407582938389"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="instrument_choose" width="9" height="13"/>
+        <image name="speed_add" width="14" height="14"/>
+        <image name="speed_minus" width="14" height="14"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 29 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningForkSettingView.h

@@ -0,0 +1,29 @@
+//
+//  TuningForkSettingView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/20.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^ForkSettingCallback)(NSInteger frequence, BOOL isSure);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TuningForkSettingView : UIView
+
+@property (nonatomic, assign) BOOL isFallingTone; // 是否降调
+
+@property (nonatomic, assign) NSInteger A4Frequence; // A4频率
+
++ (instancetype)shareInstance;
+
+- (void)forkSettingAction:(ForkSettingCallback)callback;
+
+- (void)showView;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 231 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningForkSettingView.m

@@ -0,0 +1,231 @@
+//
+//  TuningForkSettingView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/20.
+//
+
+#import "TuningForkSettingView.h"
+#import "UIView+Animation.h"
+
+
+@interface TuningForkSettingView ()
+
+@property (nonatomic, assign) NSInteger musicalScale;
+
+@property (weak, nonatomic) IBOutlet UILabel *frequenceLabel;
+@property (weak, nonatomic) IBOutlet UILabel *musicalScaleLabel;
+
+@property (weak, nonatomic) IBOutlet UIImageView *pitchCImage;
+@property (weak, nonatomic) IBOutlet UIImageView *pitchDImage;
+@property (weak, nonatomic) IBOutlet UIImageView *pitchEImage;
+@property (weak, nonatomic) IBOutlet UIImageView *pitchFImage;
+@property (weak, nonatomic) IBOutlet UIImageView *pitchGImage;
+@property (weak, nonatomic) IBOutlet UIImageView *pitchAImage;
+@property (weak, nonatomic) IBOutlet UIImageView *pitchBImage;
+
+@property (weak, nonatomic) IBOutlet UIImageView *pitchDhalfImage;
+@property (weak, nonatomic) IBOutlet UILabel *pitchDhalfLabel;
+@property (weak, nonatomic) IBOutlet UILabel *pitchDhalfDesc;
+
+@property (weak, nonatomic) IBOutlet UIImageView *pitchEhalfImage;
+@property (weak, nonatomic) IBOutlet UILabel *pitchEhalfLabel;
+@property (weak, nonatomic) IBOutlet UILabel *pitchEhalfDesc;
+
+@property (weak, nonatomic) IBOutlet UIImageView *pitchGhalfImage;
+@property (weak, nonatomic) IBOutlet UILabel *pitchGhalfLabel;
+@property (weak, nonatomic) IBOutlet UILabel *pitchGhalfDesc;
+
+
+@property (weak, nonatomic) IBOutlet UIImageView *pitchAhalfImage;
+@property (weak, nonatomic) IBOutlet UILabel *pitchAhalfLabel;
+@property (weak, nonatomic) IBOutlet UILabel *pitchAhalfDesc;
+
+@property (weak, nonatomic) IBOutlet UIImageView *pitchBhalfImage;
+@property (weak, nonatomic) IBOutlet UILabel *pitchBhalfLabel;
+@property (weak, nonatomic) IBOutlet UILabel *pitchBhalfDesc;
+
+@property (nonatomic, assign) NSInteger chooseIndex;
+
+
+@property (nonatomic, strong) NSMutableArray *imageArray;
+
+@property (nonatomic, strong) NSMutableArray *frequenceArray;
+
+@property (nonatomic, copy) ForkSettingCallback callback;
+
+@end
+
+@implementation TuningForkSettingView
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    [self configDefaultSource];
+}
+
+- (void)forkSettingAction:(ForkSettingCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)showView {
+    [[NSObject getKeyWindow] addSubview:self];
+    [self setPopAnimation];
+    if (self.callback) {
+        NSInteger index = self.musicalScale * 12 + self.chooseIndex;
+        if (self.frequenceArray.count > index) {
+            NSInteger frequence = [self.frequenceArray[index] integerValue];
+            self.callback(frequence,NO);
+        }
+    }
+}
+
+- (void)removeView {
+    [self removeFromSuperview];
+}
+
+- (void)configDefaultSource {
+    self.A4Frequence = 440;
+    self.musicalScale = 4;
+    self.isFallingTone = YES;
+    self.imageArray = [NSMutableArray arrayWithArray:@[self.pitchCImage,self.pitchDhalfImage,self.pitchDImage,self.pitchEhalfImage,self.pitchEImage,self.pitchFImage,self.pitchGhalfImage,self.pitchGImage,self.pitchAhalfImage,self.pitchAImage,self.pitchBhalfImage,self.pitchBImage]];
+    self.chooseIndex = 0;
+    self.frequenceArray = [NSMutableArray arrayWithArray:@[
+        @16.35, @17.32, @18.35, @19.45, @20.60, @21.83, @23.12, @24.50, @25.96, @27.50, @29.14, @30.87, // 0
+        @32.70, @34.65, @36.71, @38.89, @41.20, @43.65, @46.25, @49.00, @51.91, @55.00, @58.27, @61.74, // 1
+        @65.41, @69.30, @73.42, @77.78, @82.41, @87.31, @92.50, @98.00, @103.8, @110.0, @116.5, @123.5, // 2
+        @130.8, @138.6, @146.8, @155.6, @164.8, @174.6, @185.0, @196.0, @207.7, @220.0, @233.1, @246.9, // 3
+        @261.6, @277.2, @293.7, @311.1, @329.6, @349.2, @370.0, @392.0, @415.3, @440.0, @466.2, @493.9, // 4
+        @523.3, @554.4, @587.3, @622.3, @659.3, @698.5, @740.0, @784.0, @830.6, @880.0, @932.3, @987.8, // 5
+        @1047, @1109, @1175, @1245, @1319, @1397, @1480, @1568, @1661, @1760, @1865, @1976,             // 6
+        @2093, @2217, @2349, @2489, @2637, @2794, @2960, @3136, @3322, @3520, @3729, @3951,             // 7
+        @4186, @4435, @4699, @4978, @5274, @5588, @5920, @6272, @6645, @7040, @7459, @7902              // 8
+    ]];
+}
+
++ (instancetype)shareInstance {
+    TuningForkSettingView *view = [[[NSBundle mainBundle] loadNibNamed:@"TuningForkSettingView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+
+- (void)setIsFallingTone:(BOOL)isFallingTone {
+    _isFallingTone = isFallingTone;
+    if (isFallingTone) {
+        self.pitchDhalfLabel.text = @"D";
+        self.pitchEhalfLabel.text = @"E";
+        self.pitchGhalfLabel.text = @"G";
+        self.pitchAhalfLabel.text = @"A";
+        self.pitchBhalfLabel.text = @"B";
+        
+        self.pitchDhalfDesc.text = @"♭";
+        self.pitchEhalfDesc.text = @"♭";
+        self.pitchGhalfDesc.text = @"♭";
+        self.pitchAhalfDesc.text = @"♭";
+        self.pitchBhalfDesc.text = @"♭";
+    }
+    else {
+        
+        self.pitchDhalfLabel.text = @"C";
+        self.pitchEhalfLabel.text = @"D";
+        self.pitchGhalfLabel.text = @"F";
+        self.pitchAhalfLabel.text = @"G";
+        self.pitchBhalfLabel.text = @"A";
+        
+        self.pitchDhalfDesc.text = @"#";
+        self.pitchEhalfDesc.text = @"#";
+        self.pitchGhalfDesc.text = @"#";
+        self.pitchAhalfDesc.text = @"#";
+        self.pitchBhalfDesc.text = @"#";
+        
+    }
+}
+
+- (void)setA4Frequence:(NSInteger)A4Frequence {
+    _A4Frequence = A4Frequence;
+    self.frequenceLabel.text = [NSString stringWithFormat:@"A4=%zdHz",A4Frequence];
+}
+
+- (IBAction)pitchChooseAction:(UIButton *)sender {
+    NSInteger index = sender.tag - 1000;
+    if (self.chooseIndex == index) {
+        return;
+    }
+    // 修改
+    UIImageView *preChooseImage = self.imageArray[self.chooseIndex];
+    [preChooseImage setImage:[UIImage imageNamed:@"fork_pitchUnChoosed"]];
+    
+    UIImageView *chooseImageView = self.imageArray[index];
+    [chooseImageView setImage:[UIImage imageNamed:@"fork_pitchChoosed"]];
+    self.chooseIndex = index;
+    if (self.callback) {
+        NSInteger index = self.musicalScale * 12 + self.chooseIndex;
+        if (self.frequenceArray.count > index) {
+            NSInteger frequence = [self.frequenceArray[index] integerValue];
+            self.callback(frequence,NO);
+        }
+    }
+}
+
+
+
+// 音阶+
+- (IBAction)musicalScaleAdd:(id)sender {
+    if (self.musicalScale >= 6) {
+        return;
+    }
+    self.musicalScale++;
+    if (self.callback) {
+        // 获取频率
+        NSInteger index = self.musicalScale * 12 + self.chooseIndex;
+        if (self.frequenceArray.count > index) {
+            NSInteger frequence = [self.frequenceArray[index] integerValue];
+            self.callback(frequence,NO);
+        }
+    }
+}
+// 音阶-
+- (IBAction)musicalScaleMinus:(id)sender {
+    if (self.musicalScale <= 4) {
+        return;
+    }
+    self.musicalScale--;
+    if (self.callback) {
+        // 获取频率
+        NSInteger index = self.musicalScale * 12 + self.chooseIndex;
+        if (self.frequenceArray.count > index) {
+            NSInteger frequence = [self.frequenceArray[index] integerValue];
+            self.callback(frequence,NO);
+        }
+    }
+}
+
+// 设置保存
+- (IBAction)forkSettingSureAction:(id)sender {
+    if (self.callback) {
+        // 获取频率
+        NSInteger index = self.musicalScale * 12 + self.chooseIndex;
+        if (self.frequenceArray.count > index) {
+            NSInteger frequence = [self.frequenceArray[index] integerValue];
+            self.callback(frequence,YES);
+        }
+    }
+    [self removeView];
+}
+
+// 设置音阶
+- (void)setMusicalScale:(NSInteger)musicalScale {
+    _musicalScale = musicalScale;
+    self.musicalScaleLabel.text = [NSString stringWithFormat:@"%zd",musicalScale];
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 768 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningForkSettingView.xib

@@ -0,0 +1,768 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_0" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <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="TuningForkSettingView">
+            <rect key="frame" x="0.0" y="0.0" width="390" height="844"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ip2-Qv-Yar">
+                    <rect key="frame" x="59.666666666666657" y="207" width="271" height="430"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="音叉" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M5Y-mG-3VG">
+                            <rect key="frame" x="118" y="14" width="35" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="Ogo-h9-fgv"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A4=440Hz" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bhh-r7-n9J">
+                            <rect key="frame" x="18.000000000000007" y="46" width="71" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="dRA-mi-FA2"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_warning" translatesAutoresizingMaskIntoConstraints="NO" id="a4p-9E-C7P">
+                            <rect key="frame" x="94" y="50" width="13" height="12"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="12" id="0si-Jb-XVE"/>
+                                <constraint firstAttribute="width" constant="13" id="tQO-gq-KGl"/>
+                            </constraints>
+                        </imageView>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AlX-o1-xtB">
+                            <rect key="frame" x="21" y="71" width="229" height="236"/>
+                            <subviews>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QaI-So-iYb">
+                                    <rect key="frame" x="0.0" y="0.0" width="114.33333333333333" height="33.666666666666664"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="7tD-sj-An5">
+                                            <rect key="frame" x="0.0" y="8" width="18" height="18"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="18" id="Qe6-0z-7Dy"/>
+                                                <constraint firstAttribute="height" constant="18" id="jGw-6f-xYc"/>
+                                            </constraints>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="C" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="q0D-qH-qHW">
+                                            <rect key="frame" x="28" y="7" width="15" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="J3x-5e-Weo"/>
+                                                <constraint firstAttribute="width" constant="15" id="v13-0K-Jrj"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1000" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SFN-Jd-vwS">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="4fL-Sk-1lq"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="HIx-Lv-I3Q"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstAttribute="bottom" secondItem="SFN-Jd-vwS" secondAttribute="bottom" id="9Tl-bg-PHr"/>
+                                        <constraint firstItem="q0D-qH-qHW" firstAttribute="centerY" secondItem="QaI-So-iYb" secondAttribute="centerY" id="K9H-jH-FSL"/>
+                                        <constraint firstItem="7tD-sj-An5" firstAttribute="centerY" secondItem="QaI-So-iYb" secondAttribute="centerY" id="Qzv-b7-cIQ"/>
+                                        <constraint firstItem="SFN-Jd-vwS" firstAttribute="top" secondItem="QaI-So-iYb" secondAttribute="top" id="U3y-Xn-eNr"/>
+                                        <constraint firstItem="7tD-sj-An5" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="Vag-Gd-27Z"/>
+                                        <constraint firstItem="SFN-Jd-vwS" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="dr2-EP-PpS"/>
+                                        <constraint firstItem="q0D-qH-qHW" firstAttribute="leading" secondItem="7tD-sj-An5" secondAttribute="trailing" constant="10" id="sBP-d8-p2R"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jwK-E6-xjZ">
+                                    <rect key="frame" x="0.0" y="33.666666666666686" width="114.33333333333333" height="33.666666666666657"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="hKC-PS-LdR">
+                                            <rect key="frame" x="0.0" y="8" width="18" height="18"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="18" id="0bk-Gl-XWB"/>
+                                                <constraint firstAttribute="height" constant="18" id="Nt9-u1-tpO"/>
+                                            </constraints>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="D" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RST-7S-DcE">
+                                            <rect key="frame" x="28" y="7" width="11" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="JZT-Hv-Emb"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1002" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="d4u-1b-vP7">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="a2C-4k-prK"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="7pz-pX-Tvc"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="d4u-1b-vP7" firstAttribute="leading" secondItem="jwK-E6-xjZ" secondAttribute="leading" id="2Mc-WQ-oyF"/>
+                                        <constraint firstAttribute="bottom" secondItem="d4u-1b-vP7" secondAttribute="bottom" id="Amd-L6-NN1"/>
+                                        <constraint firstItem="RST-7S-DcE" firstAttribute="leading" secondItem="hKC-PS-LdR" secondAttribute="trailing" constant="10" id="GRj-iX-Z55"/>
+                                        <constraint firstItem="hKC-PS-LdR" firstAttribute="leading" secondItem="jwK-E6-xjZ" secondAttribute="leading" id="N8d-MX-ZOj"/>
+                                        <constraint firstItem="RST-7S-DcE" firstAttribute="centerY" secondItem="jwK-E6-xjZ" secondAttribute="centerY" id="hv9-aM-693"/>
+                                        <constraint firstItem="hKC-PS-LdR" firstAttribute="centerY" secondItem="jwK-E6-xjZ" secondAttribute="centerY" id="ntA-ih-w1a"/>
+                                        <constraint firstItem="d4u-1b-vP7" firstAttribute="top" secondItem="jwK-E6-xjZ" secondAttribute="top" id="uEC-JW-fj0"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WNU-wF-T23">
+                                    <rect key="frame" x="0.0" y="67.333333333333314" width="114.33333333333333" height="33.666666666666657"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="33L-TD-Ua1">
+                                            <rect key="frame" x="0.0" y="8" width="18" height="18"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="18" id="BwL-MR-3cV"/>
+                                                <constraint firstAttribute="height" constant="18" id="VwG-ON-pFW"/>
+                                            </constraints>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="E" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="F44-Np-VSD">
+                                            <rect key="frame" x="28" y="7" width="9" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="p9U-Lm-V19"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1004" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4rZ-Fm-jWg">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="Sr6-eQ-Dbu"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="tEV-w3-t1W"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstAttribute="bottom" secondItem="4rZ-Fm-jWg" secondAttribute="bottom" id="Uoz-c0-hMs"/>
+                                        <constraint firstItem="F44-Np-VSD" firstAttribute="leading" secondItem="33L-TD-Ua1" secondAttribute="trailing" constant="10" id="X4J-Un-mUn"/>
+                                        <constraint firstItem="33L-TD-Ua1" firstAttribute="leading" secondItem="WNU-wF-T23" secondAttribute="leading" id="im4-SY-tp7"/>
+                                        <constraint firstItem="4rZ-Fm-jWg" firstAttribute="leading" secondItem="WNU-wF-T23" secondAttribute="leading" id="uQj-Ek-VjV"/>
+                                        <constraint firstItem="33L-TD-Ua1" firstAttribute="centerY" secondItem="WNU-wF-T23" secondAttribute="centerY" id="wbV-z8-t91"/>
+                                        <constraint firstItem="4rZ-Fm-jWg" firstAttribute="top" secondItem="WNU-wF-T23" secondAttribute="top" id="xHc-qL-PpH"/>
+                                        <constraint firstItem="F44-Np-VSD" firstAttribute="centerY" secondItem="WNU-wF-T23" secondAttribute="centerY" id="xM7-cb-oa8"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vHa-XQ-6ny">
+                                    <rect key="frame" x="0.0" y="101" width="114.33333333333333" height="34"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="DUO-ro-JJn">
+                                            <rect key="frame" x="0.0" y="8" width="18" height="18"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="18" id="6IK-nG-GNi"/>
+                                                <constraint firstAttribute="width" constant="18" id="pYl-hk-Ryc"/>
+                                            </constraints>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="F" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qhy-ZJ-VDs">
+                                            <rect key="frame" x="28" y="7" width="8" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="TYL-32-VIw"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1005" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8G5-fB-XwN">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="34"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="Q9N-P1-rIC"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Rps-r1-8M6"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="8G5-fB-XwN" firstAttribute="leading" secondItem="vHa-XQ-6ny" secondAttribute="leading" id="2WW-9i-vQA"/>
+                                        <constraint firstItem="DUO-ro-JJn" firstAttribute="centerY" secondItem="vHa-XQ-6ny" secondAttribute="centerY" id="8Ig-Iy-ioV"/>
+                                        <constraint firstItem="qhy-ZJ-VDs" firstAttribute="leading" secondItem="DUO-ro-JJn" secondAttribute="trailing" constant="10" id="Tcn-Nf-ez1"/>
+                                        <constraint firstItem="qhy-ZJ-VDs" firstAttribute="centerY" secondItem="vHa-XQ-6ny" secondAttribute="centerY" id="V4i-pe-i30"/>
+                                        <constraint firstAttribute="bottom" secondItem="8G5-fB-XwN" secondAttribute="bottom" id="euO-7K-fiR"/>
+                                        <constraint firstItem="DUO-ro-JJn" firstAttribute="leading" secondItem="vHa-XQ-6ny" secondAttribute="leading" id="gmN-12-926"/>
+                                        <constraint firstItem="8G5-fB-XwN" firstAttribute="top" secondItem="vHa-XQ-6ny" secondAttribute="top" id="wWZ-BJ-9oH"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u4x-Ff-czP">
+                                    <rect key="frame" x="0.0" y="135" width="114.33333333333333" height="33.666666666666657"/>
+                                    <subviews>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="G" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="G6r-gZ-B47">
+                                            <rect key="frame" x="28" y="6.6666666666666856" width="11" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="n7U-Vx-xgz"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="XKV-Rp-Jta">
+                                            <rect key="frame" x="0.0" y="7.6666666666666856" width="18" height="18"/>
+                                        </imageView>
+                                        <button opaque="NO" tag="1007" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BRS-TJ-pWC">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="Jue-kh-Ft3"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="INX-d0-e7L"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="XKV-Rp-Jta" firstAttribute="leading" secondItem="u4x-Ff-czP" secondAttribute="leading" id="7Yf-05-act"/>
+                                        <constraint firstAttribute="bottom" secondItem="BRS-TJ-pWC" secondAttribute="bottom" id="Fjs-To-qCh"/>
+                                        <constraint firstItem="G6r-gZ-B47" firstAttribute="centerY" secondItem="XKV-Rp-Jta" secondAttribute="centerY" id="SVc-jH-VxW"/>
+                                        <constraint firstItem="BRS-TJ-pWC" firstAttribute="top" secondItem="u4x-Ff-czP" secondAttribute="top" id="cvx-OE-0AM"/>
+                                        <constraint firstItem="BRS-TJ-pWC" firstAttribute="leading" secondItem="u4x-Ff-czP" secondAttribute="leading" id="jx0-RL-gWF"/>
+                                        <constraint firstItem="G6r-gZ-B47" firstAttribute="leading" secondItem="XKV-Rp-Jta" secondAttribute="trailing" constant="10" id="rYg-Ho-QaA"/>
+                                        <constraint firstItem="XKV-Rp-Jta" firstAttribute="centerY" secondItem="u4x-Ff-czP" secondAttribute="centerY" id="v6S-og-SBA"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="udJ-Lp-A7n">
+                                    <rect key="frame" x="0.0" y="168.66666666666669" width="114.33333333333333" height="33.666666666666657"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="NVg-Ou-bSm">
+                                            <rect key="frame" x="0.0" y="7.6666666666666288" width="18" height="18"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8xs-rP-O2t">
+                                            <rect key="frame" x="28" y="6.6666666666666288" width="10" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="6cf-CB-kXe"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1009" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qlH-wo-fVt">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="5u0-cd-H82"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="eil-Qt-Bif"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="qlH-wo-fVt" firstAttribute="leading" secondItem="udJ-Lp-A7n" secondAttribute="leading" id="MAi-oC-SHA"/>
+                                        <constraint firstItem="8xs-rP-O2t" firstAttribute="leading" secondItem="NVg-Ou-bSm" secondAttribute="trailing" constant="10" id="O2p-h9-Dvw"/>
+                                        <constraint firstItem="NVg-Ou-bSm" firstAttribute="centerY" secondItem="udJ-Lp-A7n" secondAttribute="centerY" id="Vxt-J6-7gs"/>
+                                        <constraint firstItem="NVg-Ou-bSm" firstAttribute="leading" secondItem="udJ-Lp-A7n" secondAttribute="leading" id="a3e-me-pyX"/>
+                                        <constraint firstAttribute="bottom" secondItem="qlH-wo-fVt" secondAttribute="bottom" id="gfx-iM-aFz"/>
+                                        <constraint firstItem="qlH-wo-fVt" firstAttribute="top" secondItem="udJ-Lp-A7n" secondAttribute="top" id="guc-ib-WAW"/>
+                                        <constraint firstItem="8xs-rP-O2t" firstAttribute="centerY" secondItem="NVg-Ou-bSm" secondAttribute="centerY" id="wws-Ut-fEQ"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="p4w-Gf-bLk">
+                                    <rect key="frame" x="0.0" y="202.33333333333331" width="114.33333333333333" height="33.666666666666657"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="4Lk-07-pwR">
+                                            <rect key="frame" x="0.0" y="7.6666666666666856" width="18" height="18"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="B" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w2x-kg-EP3">
+                                            <rect key="frame" x="28" y="6.6666666666666856" width="10" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="jMT-Le-vI2"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1011" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Mdw-nL-CxU">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="vtL-S9-0eJ"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="5Jg-tN-wQu"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstAttribute="bottom" secondItem="Mdw-nL-CxU" secondAttribute="bottom" id="DfS-hF-dyP"/>
+                                        <constraint firstItem="Mdw-nL-CxU" firstAttribute="top" secondItem="p4w-Gf-bLk" secondAttribute="top" id="Ggs-ma-lX4"/>
+                                        <constraint firstItem="4Lk-07-pwR" firstAttribute="centerY" secondItem="p4w-Gf-bLk" secondAttribute="centerY" id="Nxs-gI-Nt4"/>
+                                        <constraint firstItem="w2x-kg-EP3" firstAttribute="centerY" secondItem="4Lk-07-pwR" secondAttribute="centerY" id="PvM-pR-45d"/>
+                                        <constraint firstItem="w2x-kg-EP3" firstAttribute="leading" secondItem="4Lk-07-pwR" secondAttribute="trailing" constant="10" id="ZiK-Zx-hpp"/>
+                                        <constraint firstItem="4Lk-07-pwR" firstAttribute="leading" secondItem="p4w-Gf-bLk" secondAttribute="leading" id="am8-h6-Voc"/>
+                                        <constraint firstItem="Mdw-nL-CxU" firstAttribute="leading" secondItem="p4w-Gf-bLk" secondAttribute="leading" id="tY4-62-Z2g"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="W4E-Jy-6SS">
+                                    <rect key="frame" x="144.33333333333331" y="0.0" width="84.666666666666686" height="33.666666666666664"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="kNP-fB-Sgb">
+                                            <rect key="frame" x="0.0" y="8" width="18" height="18"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="D" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sEP-7X-ajC">
+                                            <rect key="frame" x="28" y="7" width="10" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="1Vd-rK-UkG"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="♭" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CI4-Gl-Mnk">
+                                            <rect key="frame" x="38" y="12" width="10" height="10"/>
+                                            <fontDescription key="fontDescription" name="HiraginoSans-W3" family="Hiragino Sans" pointSize="10"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1001" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4km-0o-jtK">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="YFW-Mz-Owq"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="zni-tU-9hb"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstAttribute="bottom" secondItem="4km-0o-jtK" secondAttribute="bottom" id="BJY-4P-rY3"/>
+                                        <constraint firstItem="4km-0o-jtK" firstAttribute="leading" secondItem="W4E-Jy-6SS" secondAttribute="leading" id="OdR-s3-Jss"/>
+                                        <constraint firstItem="CI4-Gl-Mnk" firstAttribute="centerY" secondItem="sEP-7X-ajC" secondAttribute="centerY" id="SuH-1J-dYC"/>
+                                        <constraint firstItem="sEP-7X-ajC" firstAttribute="centerY" secondItem="kNP-fB-Sgb" secondAttribute="centerY" id="ajy-sb-rOU"/>
+                                        <constraint firstItem="sEP-7X-ajC" firstAttribute="leading" secondItem="kNP-fB-Sgb" secondAttribute="trailing" constant="10" id="c2W-U3-bUE"/>
+                                        <constraint firstItem="4km-0o-jtK" firstAttribute="top" secondItem="W4E-Jy-6SS" secondAttribute="top" id="hpk-kF-EKL"/>
+                                        <constraint firstItem="kNP-fB-Sgb" firstAttribute="centerY" secondItem="W4E-Jy-6SS" secondAttribute="centerY" id="jpM-oj-R2h"/>
+                                        <constraint firstItem="kNP-fB-Sgb" firstAttribute="leading" secondItem="W4E-Jy-6SS" secondAttribute="leading" id="nhj-UK-MA8"/>
+                                        <constraint firstItem="CI4-Gl-Mnk" firstAttribute="leading" secondItem="sEP-7X-ajC" secondAttribute="trailing" id="r4q-Ww-tAf"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4RW-LV-gXm">
+                                    <rect key="frame" x="144.33333333333331" y="33.666666666666686" width="84.666666666666686" height="33.666666666666657"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="TD9-gX-SSD">
+                                            <rect key="frame" x="0.0" y="8" width="18" height="18"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="E" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nYG-4s-3Me">
+                                            <rect key="frame" x="27.999999999999996" y="7" width="8.3333333333333321" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="QCQ-jA-eH8"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="♭" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Au-70-poU">
+                                            <rect key="frame" x="36.333333333333314" y="12" width="10" height="10"/>
+                                            <fontDescription key="fontDescription" name="HiraginoSans-W3" family="Hiragino Sans" pointSize="10"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1003" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ym0-Ph-9xJ">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="iwC-Pn-Pl3"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="sfw-lD-73v"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="nYG-4s-3Me" firstAttribute="leading" secondItem="TD9-gX-SSD" secondAttribute="trailing" constant="10" id="I9G-eM-Bpk"/>
+                                        <constraint firstItem="ym0-Ph-9xJ" firstAttribute="leading" secondItem="4RW-LV-gXm" secondAttribute="leading" id="IaA-BH-Naw"/>
+                                        <constraint firstItem="0Au-70-poU" firstAttribute="leading" secondItem="nYG-4s-3Me" secondAttribute="trailing" id="K7i-PY-qeC"/>
+                                        <constraint firstItem="nYG-4s-3Me" firstAttribute="centerY" secondItem="TD9-gX-SSD" secondAttribute="centerY" id="KXN-oq-f01"/>
+                                        <constraint firstItem="TD9-gX-SSD" firstAttribute="leading" secondItem="4RW-LV-gXm" secondAttribute="leading" id="Sba-x6-Vv7"/>
+                                        <constraint firstItem="ym0-Ph-9xJ" firstAttribute="top" secondItem="4RW-LV-gXm" secondAttribute="top" id="Sft-Yd-3Tu"/>
+                                        <constraint firstItem="TD9-gX-SSD" firstAttribute="centerY" secondItem="4RW-LV-gXm" secondAttribute="centerY" id="gHI-EL-cH9"/>
+                                        <constraint firstItem="0Au-70-poU" firstAttribute="centerY" secondItem="nYG-4s-3Me" secondAttribute="centerY" id="hht-jR-RiV"/>
+                                        <constraint firstAttribute="bottom" secondItem="ym0-Ph-9xJ" secondAttribute="bottom" id="kRZ-7s-l0x"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="X4H-Fh-dFX">
+                                    <rect key="frame" x="144.33333333333331" y="101" width="84.666666666666686" height="34"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="ejK-gv-bn7">
+                                            <rect key="frame" x="0.0" y="8" width="18" height="18"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="G" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gUd-Pa-98x">
+                                            <rect key="frame" x="27.999999999999996" y="7" width="10.333333333333332" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="FJQ-n0-rIS"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="♭" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5a7-xm-jfY">
+                                            <rect key="frame" x="38.333333333333314" y="12" width="10" height="10"/>
+                                            <fontDescription key="fontDescription" name="HiraginoSans-W3" family="Hiragino Sans" pointSize="10"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1006" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LsY-5b-xv1">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="34"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="scl-dU-BWw"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="mQt-Pd-nIa"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="gUd-Pa-98x" firstAttribute="centerY" secondItem="ejK-gv-bn7" secondAttribute="centerY" id="4yg-jN-nrU"/>
+                                        <constraint firstItem="LsY-5b-xv1" firstAttribute="leading" secondItem="X4H-Fh-dFX" secondAttribute="leading" id="7Q2-Dy-IEE"/>
+                                        <constraint firstItem="LsY-5b-xv1" firstAttribute="top" secondItem="X4H-Fh-dFX" secondAttribute="top" id="Dsd-ff-wTD"/>
+                                        <constraint firstItem="gUd-Pa-98x" firstAttribute="leading" secondItem="ejK-gv-bn7" secondAttribute="trailing" constant="10" id="GjT-FC-gc9"/>
+                                        <constraint firstItem="ejK-gv-bn7" firstAttribute="centerY" secondItem="X4H-Fh-dFX" secondAttribute="centerY" id="MrA-JC-u3H"/>
+                                        <constraint firstItem="5a7-xm-jfY" firstAttribute="leading" secondItem="gUd-Pa-98x" secondAttribute="trailing" id="Rk2-T2-2XE"/>
+                                        <constraint firstAttribute="bottom" secondItem="LsY-5b-xv1" secondAttribute="bottom" id="ieJ-IX-DBc"/>
+                                        <constraint firstItem="5a7-xm-jfY" firstAttribute="centerY" secondItem="gUd-Pa-98x" secondAttribute="centerY" id="pgg-65-Syf"/>
+                                        <constraint firstItem="ejK-gv-bn7" firstAttribute="leading" secondItem="X4H-Fh-dFX" secondAttribute="leading" id="sCB-MC-pdb"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Swe-Ry-qdg">
+                                    <rect key="frame" x="144.33333333333331" y="135" width="84.666666666666686" height="33.666666666666657"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="F6U-1L-QNJ">
+                                            <rect key="frame" x="0.0" y="7.6666666666666856" width="18" height="18"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pqy-zd-oA9">
+                                            <rect key="frame" x="27.999999999999996" y="6.6666666666666856" width="9.3333333333333321" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="PKU-Nt-dD1"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="♭" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t9g-qn-BnE">
+                                            <rect key="frame" x="37.333333333333314" y="11.666666666666686" width="10" height="10"/>
+                                            <fontDescription key="fontDescription" name="HiraginoSans-W3" family="Hiragino Sans" pointSize="10"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="W5f-GN-alG">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="Pqc-pD-DWx"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="xQw-y1-U8Q"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="t9g-qn-BnE" firstAttribute="leading" secondItem="Pqy-zd-oA9" secondAttribute="trailing" id="6Am-Of-9DK"/>
+                                        <constraint firstItem="W5f-GN-alG" firstAttribute="leading" secondItem="Swe-Ry-qdg" secondAttribute="leading" id="DXF-73-evP"/>
+                                        <constraint firstItem="F6U-1L-QNJ" firstAttribute="leading" secondItem="Swe-Ry-qdg" secondAttribute="leading" id="Fnk-m5-aeV"/>
+                                        <constraint firstAttribute="bottom" secondItem="W5f-GN-alG" secondAttribute="bottom" id="LAw-i3-7qt"/>
+                                        <constraint firstItem="Pqy-zd-oA9" firstAttribute="leading" secondItem="F6U-1L-QNJ" secondAttribute="trailing" constant="10" id="UyP-fl-n41"/>
+                                        <constraint firstItem="t9g-qn-BnE" firstAttribute="centerY" secondItem="Pqy-zd-oA9" secondAttribute="centerY" id="c3d-KF-3DS"/>
+                                        <constraint firstItem="Pqy-zd-oA9" firstAttribute="centerY" secondItem="F6U-1L-QNJ" secondAttribute="centerY" id="hXE-BY-rnB"/>
+                                        <constraint firstItem="W5f-GN-alG" firstAttribute="top" secondItem="Swe-Ry-qdg" secondAttribute="top" id="l5l-25-MKS"/>
+                                        <constraint firstItem="F6U-1L-QNJ" firstAttribute="centerY" secondItem="Swe-Ry-qdg" secondAttribute="centerY" id="pFY-qO-S7S"/>
+                                    </constraints>
+                                </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8fc-ui-TRO">
+                                    <rect key="frame" x="144.33333333333331" y="168.66666666666669" width="84.666666666666686" height="33.666666666666657"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fork_pitchUnChoosed" translatesAutoresizingMaskIntoConstraints="NO" id="Csb-9e-UUh">
+                                            <rect key="frame" x="0.0" y="7.6666666666666288" width="18" height="18"/>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="B" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iBu-od-lwB">
+                                            <rect key="frame" x="27.999999999999996" y="6.6666666666666288" width="9.3333333333333321" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="VNf-5n-GF1"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="♭" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cSB-cy-6zq">
+                                            <rect key="frame" x="37.333333333333314" y="11.666666666666629" width="10" height="10"/>
+                                            <fontDescription key="fontDescription" name="HiraginoSans-W3" family="Hiragino Sans" pointSize="10"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" tag="1010" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0Sz-yn-Kz6">
+                                            <rect key="frame" x="0.0" y="0.0" width="60" height="33.666666666666664"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="60" id="Jx3-uf-8AG"/>
+                                            </constraints>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                            <connections>
+                                                <action selector="pitchChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="kkV-OC-KRe"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    <constraints>
+                                        <constraint firstItem="0Sz-yn-Kz6" firstAttribute="top" secondItem="8fc-ui-TRO" secondAttribute="top" id="9rm-aC-dvf"/>
+                                        <constraint firstItem="Csb-9e-UUh" firstAttribute="centerY" secondItem="8fc-ui-TRO" secondAttribute="centerY" id="AVb-Xx-jd6"/>
+                                        <constraint firstItem="cSB-cy-6zq" firstAttribute="centerY" secondItem="iBu-od-lwB" secondAttribute="centerY" id="EI1-2d-JFa"/>
+                                        <constraint firstItem="iBu-od-lwB" firstAttribute="leading" secondItem="Csb-9e-UUh" secondAttribute="trailing" constant="10" id="H83-7v-j0m"/>
+                                        <constraint firstItem="Csb-9e-UUh" firstAttribute="leading" secondItem="8fc-ui-TRO" secondAttribute="leading" id="L8C-bd-Zrb"/>
+                                        <constraint firstAttribute="bottom" secondItem="0Sz-yn-Kz6" secondAttribute="bottom" id="OY2-vz-SDh"/>
+                                        <constraint firstItem="0Sz-yn-Kz6" firstAttribute="leading" secondItem="8fc-ui-TRO" secondAttribute="leading" id="RfG-83-RYA"/>
+                                        <constraint firstItem="iBu-od-lwB" firstAttribute="centerY" secondItem="Csb-9e-UUh" secondAttribute="centerY" id="tLg-Io-vUd"/>
+                                        <constraint firstItem="cSB-cy-6zq" firstAttribute="leading" secondItem="iBu-od-lwB" secondAttribute="trailing" id="yPO-dA-zKb"/>
+                                    </constraints>
+                                </view>
+                            </subviews>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <constraints>
+                                <constraint firstItem="p4w-Gf-bLk" firstAttribute="top" secondItem="udJ-Lp-A7n" secondAttribute="bottom" id="0F2-9S-1MV"/>
+                                <constraint firstItem="Swe-Ry-qdg" firstAttribute="height" secondItem="4RW-LV-gXm" secondAttribute="height" id="298-1R-vhl"/>
+                                <constraint firstItem="8fc-ui-TRO" firstAttribute="trailing" secondItem="4RW-LV-gXm" secondAttribute="trailing" id="4Oz-wR-Yti"/>
+                                <constraint firstItem="udJ-Lp-A7n" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="4wb-0w-ky8"/>
+                                <constraint firstItem="8fc-ui-TRO" firstAttribute="height" secondItem="4RW-LV-gXm" secondAttribute="height" id="8M9-Tf-bRP"/>
+                                <constraint firstItem="8fc-ui-TRO" firstAttribute="leading" secondItem="4RW-LV-gXm" secondAttribute="leading" id="Axf-hG-ZST"/>
+                                <constraint firstItem="WNU-wF-T23" firstAttribute="top" secondItem="jwK-E6-xjZ" secondAttribute="bottom" id="BB3-8i-nFo"/>
+                                <constraint firstItem="jwK-E6-xjZ" firstAttribute="top" secondItem="QaI-So-iYb" secondAttribute="bottom" id="DbK-67-90q"/>
+                                <constraint firstItem="WNU-wF-T23" firstAttribute="height" secondItem="QaI-So-iYb" secondAttribute="height" id="EeN-Qx-Fp1"/>
+                                <constraint firstItem="4RW-LV-gXm" firstAttribute="top" secondItem="W4E-Jy-6SS" secondAttribute="bottom" id="G8h-Mx-gZF"/>
+                                <constraint firstItem="X4H-Fh-dFX" firstAttribute="leading" secondItem="4RW-LV-gXm" secondAttribute="leading" id="HfH-4X-Scd"/>
+                                <constraint firstItem="jwK-E6-xjZ" firstAttribute="width" secondItem="QaI-So-iYb" secondAttribute="width" id="Ju2-Xx-VP2"/>
+                                <constraint firstItem="p4w-Gf-bLk" firstAttribute="width" secondItem="QaI-So-iYb" secondAttribute="width" id="NJE-Vq-6U4"/>
+                                <constraint firstItem="vHa-XQ-6ny" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="NOr-gE-kAI"/>
+                                <constraint firstItem="u4x-Ff-czP" firstAttribute="top" secondItem="vHa-XQ-6ny" secondAttribute="bottom" id="Nfw-fA-Rtb"/>
+                                <constraint firstItem="Swe-Ry-qdg" firstAttribute="leading" secondItem="4RW-LV-gXm" secondAttribute="leading" id="OxX-AZ-Hem"/>
+                                <constraint firstItem="p4w-Gf-bLk" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="R6G-T7-Rve"/>
+                                <constraint firstItem="4RW-LV-gXm" firstAttribute="height" secondItem="W4E-Jy-6SS" secondAttribute="height" id="S0j-6R-nvt"/>
+                                <constraint firstItem="jwK-E6-xjZ" firstAttribute="height" secondItem="QaI-So-iYb" secondAttribute="height" id="T9x-CT-SkB"/>
+                                <constraint firstItem="W4E-Jy-6SS" firstAttribute="height" secondItem="QaI-So-iYb" secondAttribute="height" id="UaF-Jh-3NP"/>
+                                <constraint firstItem="QaI-So-iYb" firstAttribute="leading" secondItem="AlX-o1-xtB" secondAttribute="leading" id="Vsi-uc-sJI"/>
+                                <constraint firstItem="W4E-Jy-6SS" firstAttribute="top" secondItem="AlX-o1-xtB" secondAttribute="top" id="XDH-4n-vKb"/>
+                                <constraint firstItem="vHa-XQ-6ny" firstAttribute="width" secondItem="QaI-So-iYb" secondAttribute="width" id="XHq-Ps-MHk"/>
+                                <constraint firstItem="X4H-Fh-dFX" firstAttribute="height" secondItem="4RW-LV-gXm" secondAttribute="height" id="YqO-QZ-x7m"/>
+                                <constraint firstItem="Swe-Ry-qdg" firstAttribute="top" secondItem="X4H-Fh-dFX" secondAttribute="bottom" id="aTh-hI-sBG"/>
+                                <constraint firstItem="8fc-ui-TRO" firstAttribute="top" secondItem="Swe-Ry-qdg" secondAttribute="bottom" id="b5p-Yr-eme"/>
+                                <constraint firstItem="vHa-XQ-6ny" firstAttribute="height" secondItem="QaI-So-iYb" secondAttribute="height" id="baD-Il-kHJ"/>
+                                <constraint firstAttribute="trailing" secondItem="W4E-Jy-6SS" secondAttribute="trailing" id="cNC-SE-Ffg"/>
+                                <constraint firstItem="p4w-Gf-bLk" firstAttribute="height" secondItem="QaI-So-iYb" secondAttribute="height" id="dXh-F6-p3e"/>
+                                <constraint firstItem="WNU-wF-T23" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="dfN-iX-k9b"/>
+                                <constraint firstItem="QaI-So-iYb" firstAttribute="trailing" secondItem="AlX-o1-xtB" secondAttribute="centerX" id="eKw-1d-eeZ"/>
+                                <constraint firstItem="u4x-Ff-czP" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="eoz-h6-RWg"/>
+                                <constraint firstItem="X4H-Fh-dFX" firstAttribute="trailing" secondItem="4RW-LV-gXm" secondAttribute="trailing" id="fNa-Gf-2Rq"/>
+                                <constraint firstItem="udJ-Lp-A7n" firstAttribute="width" secondItem="QaI-So-iYb" secondAttribute="width" id="fOj-qz-pT0"/>
+                                <constraint firstItem="WNU-wF-T23" firstAttribute="width" secondItem="QaI-So-iYb" secondAttribute="width" id="ghS-Fi-b0h"/>
+                                <constraint firstItem="X4H-Fh-dFX" firstAttribute="top" secondItem="vHa-XQ-6ny" secondAttribute="top" id="gqE-Dk-JzW"/>
+                                <constraint firstAttribute="trailing" secondItem="4RW-LV-gXm" secondAttribute="trailing" id="ia6-0t-8qX"/>
+                                <constraint firstItem="Swe-Ry-qdg" firstAttribute="trailing" secondItem="4RW-LV-gXm" secondAttribute="trailing" id="jDs-ud-Ja6"/>
+                                <constraint firstItem="W4E-Jy-6SS" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="trailing" constant="30" id="paI-dH-D6C"/>
+                                <constraint firstItem="W4E-Jy-6SS" firstAttribute="leading" secondItem="4RW-LV-gXm" secondAttribute="leading" id="q25-8H-YjE"/>
+                                <constraint firstItem="vHa-XQ-6ny" firstAttribute="top" secondItem="WNU-wF-T23" secondAttribute="bottom" id="qpA-yw-FyY"/>
+                                <constraint firstItem="u4x-Ff-czP" firstAttribute="height" secondItem="QaI-So-iYb" secondAttribute="height" id="rnT-mp-Y59"/>
+                                <constraint firstItem="udJ-Lp-A7n" firstAttribute="height" secondItem="QaI-So-iYb" secondAttribute="height" id="tTa-Yp-lhQ"/>
+                                <constraint firstItem="jwK-E6-xjZ" firstAttribute="leading" secondItem="QaI-So-iYb" secondAttribute="leading" id="tXa-Wh-PbP"/>
+                                <constraint firstAttribute="bottom" secondItem="p4w-Gf-bLk" secondAttribute="bottom" id="tjz-Wm-URv"/>
+                                <constraint firstItem="QaI-So-iYb" firstAttribute="top" secondItem="AlX-o1-xtB" secondAttribute="top" id="xLq-Wy-6oH"/>
+                                <constraint firstItem="udJ-Lp-A7n" firstAttribute="top" secondItem="u4x-Ff-czP" secondAttribute="bottom" id="xRx-3R-ynL"/>
+                                <constraint firstItem="u4x-Ff-czP" firstAttribute="width" secondItem="QaI-So-iYb" secondAttribute="width" id="zBL-7s-hP4"/>
+                            </constraints>
+                        </view>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="L5h-Ny-1au">
+                            <rect key="frame" x="18" y="365" width="235" height="40"/>
+                            <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="40" id="Cj4-4L-fBx"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <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="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="forkSettingSureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="tVz-M3-Jtq"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7Bu-fJ-Eb8">
+                            <rect key="frame" x="23.333333333333336" y="312" width="63.000000000000007" height="45"/>
+                            <color key="backgroundColor" red="0.87450980392156863" green="0.87450980392156863" blue="0.87450980392156863" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="63" id="XUH-Jp-vQU"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="speed_add">
+                                <color key="titleColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </state>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="musicalScaleAdd:" destination="iN0-l3-epB" eventType="touchUpInside" id="Owv-Ey-QE1"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ezm-DJ-9xp">
+                            <rect key="frame" x="184.33333333333334" y="312" width="63" height="45"/>
+                            <color key="backgroundColor" red="0.87450980392156863" green="0.87450980392156863" blue="0.87450980392156863" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="63" id="YVj-x6-Ebd"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="speed_minus">
+                                <color key="titleColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </state>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="musicalScaleMinus:" destination="iN0-l3-epB" eventType="touchUpInside" id="BVO-ik-vxs"/>
+                            </connections>
+                        </button>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dJJ-CJ-edB">
+                            <rect key="frame" x="95.333333333333343" y="312" width="80" height="45"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="4" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aKX-xG-USM">
+                                    <rect key="frame" x="35.666666666666657" y="14" width="9" height="17"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <constraints>
+                                <constraint firstItem="aKX-xG-USM" firstAttribute="centerY" secondItem="dJJ-CJ-edB" secondAttribute="centerY" id="GGy-UY-htL"/>
+                                <constraint firstAttribute="width" constant="80" id="HRi-cq-610"/>
+                                <constraint firstAttribute="height" constant="45" id="KLx-Z3-S5m"/>
+                                <constraint firstItem="aKX-xG-USM" firstAttribute="centerX" secondItem="dJJ-CJ-edB" secondAttribute="centerX" id="TbK-1g-05a"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="6"/>
+                                </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                    <real key="value" value="1"/>
+                                </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                    <color key="value" red="0.59215686274509804" green="0.59215686274509804" blue="0.59215686274509804" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="AlX-o1-xtB" firstAttribute="top" secondItem="Bhh-r7-n9J" secondAttribute="bottom" constant="5" id="9OS-CT-d64"/>
+                        <constraint firstItem="a4p-9E-C7P" firstAttribute="centerY" secondItem="Bhh-r7-n9J" secondAttribute="centerY" id="AEO-mo-DXw"/>
+                        <constraint firstItem="7Bu-fJ-Eb8" firstAttribute="top" secondItem="AlX-o1-xtB" secondAttribute="bottom" constant="5" id="Akz-1N-oLz"/>
+                        <constraint firstAttribute="width" constant="271" id="Amp-lt-7Eg"/>
+                        <constraint firstItem="L5h-Ny-1au" firstAttribute="top" secondItem="dJJ-CJ-edB" secondAttribute="bottom" constant="8" id="BgG-y0-Lxg"/>
+                        <constraint firstItem="Bhh-r7-n9J" firstAttribute="leading" secondItem="ip2-Qv-Yar" secondAttribute="leading" constant="18" id="GBk-GF-qBt"/>
+                        <constraint firstItem="ezm-DJ-9xp" firstAttribute="leading" secondItem="dJJ-CJ-edB" secondAttribute="trailing" constant="9" id="GR3-Ks-0Go"/>
+                        <constraint firstItem="a4p-9E-C7P" firstAttribute="leading" secondItem="Bhh-r7-n9J" secondAttribute="trailing" constant="5" id="K1b-Nt-SsF"/>
+                        <constraint firstItem="AlX-o1-xtB" firstAttribute="leading" secondItem="ip2-Qv-Yar" secondAttribute="leading" constant="21" id="M4p-yy-EAe"/>
+                        <constraint firstItem="L5h-Ny-1au" firstAttribute="leading" secondItem="ip2-Qv-Yar" secondAttribute="leading" constant="18" id="Mws-fc-9fd"/>
+                        <constraint firstItem="Bhh-r7-n9J" firstAttribute="top" secondItem="M5Y-mG-3VG" secondAttribute="bottom" constant="8" id="NCA-EM-mAV"/>
+                        <constraint firstItem="dJJ-CJ-edB" firstAttribute="centerX" secondItem="ip2-Qv-Yar" secondAttribute="centerX" id="SVC-lY-Pb3"/>
+                        <constraint firstItem="dJJ-CJ-edB" firstAttribute="height" secondItem="7Bu-fJ-Eb8" secondAttribute="height" id="U8P-Nt-1Wp"/>
+                        <constraint firstItem="ezm-DJ-9xp" firstAttribute="centerY" secondItem="7Bu-fJ-Eb8" secondAttribute="centerY" id="X8V-jP-zcr"/>
+                        <constraint firstAttribute="bottom" secondItem="L5h-Ny-1au" secondAttribute="bottom" constant="25" id="Y5J-0y-qyS"/>
+                        <constraint firstItem="dJJ-CJ-edB" firstAttribute="leading" secondItem="7Bu-fJ-Eb8" secondAttribute="trailing" constant="9" id="bHD-pg-V8a"/>
+                        <constraint firstAttribute="trailing" secondItem="L5h-Ny-1au" secondAttribute="trailing" constant="18" id="djX-Wd-dqb"/>
+                        <constraint firstItem="ezm-DJ-9xp" firstAttribute="height" secondItem="7Bu-fJ-Eb8" secondAttribute="height" id="gRI-Lx-Of1"/>
+                        <constraint firstAttribute="trailing" secondItem="AlX-o1-xtB" secondAttribute="trailing" constant="21" id="oPn-IM-YQF"/>
+                        <constraint firstItem="M5Y-mG-3VG" firstAttribute="top" secondItem="ip2-Qv-Yar" secondAttribute="top" constant="14" id="pfS-Vq-c5m"/>
+                        <constraint firstItem="dJJ-CJ-edB" firstAttribute="centerY" secondItem="7Bu-fJ-Eb8" secondAttribute="centerY" id="tOS-rR-wqD"/>
+                        <constraint firstAttribute="height" constant="430" id="uMY-cw-3mk"/>
+                        <constraint firstItem="M5Y-mG-3VG" firstAttribute="centerX" secondItem="ip2-Qv-Yar" secondAttribute="centerX" id="zZu-Ob-TnJ"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="15"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="ip2-Qv-Yar" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="01S-SR-k4J"/>
+                <constraint firstItem="ip2-Qv-Yar" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="mIs-j2-Rqf"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="frequenceLabel" destination="Bhh-r7-n9J" id="pCN-eE-vqp"/>
+                <outlet property="musicalScaleLabel" destination="aKX-xG-USM" id="Kg6-4A-9Ut"/>
+                <outlet property="pitchAImage" destination="NVg-Ou-bSm" id="fbe-xA-p5t"/>
+                <outlet property="pitchAhalfDesc" destination="t9g-qn-BnE" id="xiA-el-VlU"/>
+                <outlet property="pitchAhalfImage" destination="F6U-1L-QNJ" id="GZ9-GX-Hoy"/>
+                <outlet property="pitchAhalfLabel" destination="Pqy-zd-oA9" id="R7p-Ti-m3G"/>
+                <outlet property="pitchBImage" destination="4Lk-07-pwR" id="vTS-bX-ShU"/>
+                <outlet property="pitchBhalfDesc" destination="cSB-cy-6zq" id="sSn-V8-JJb"/>
+                <outlet property="pitchBhalfImage" destination="Csb-9e-UUh" id="fRa-AC-N9w"/>
+                <outlet property="pitchBhalfLabel" destination="iBu-od-lwB" id="qHz-C5-fEa"/>
+                <outlet property="pitchCImage" destination="7tD-sj-An5" id="zm2-WV-JRP"/>
+                <outlet property="pitchDImage" destination="hKC-PS-LdR" id="lEV-R1-oGp"/>
+                <outlet property="pitchDhalfDesc" destination="CI4-Gl-Mnk" id="C09-NT-iQC"/>
+                <outlet property="pitchDhalfImage" destination="kNP-fB-Sgb" id="cQt-hK-mwt"/>
+                <outlet property="pitchDhalfLabel" destination="sEP-7X-ajC" id="lR2-aN-Bs2"/>
+                <outlet property="pitchEImage" destination="33L-TD-Ua1" id="N8N-1r-sOn"/>
+                <outlet property="pitchEhalfDesc" destination="0Au-70-poU" id="lha-eq-cvs"/>
+                <outlet property="pitchEhalfImage" destination="TD9-gX-SSD" id="ptO-4M-BzX"/>
+                <outlet property="pitchEhalfLabel" destination="nYG-4s-3Me" id="OBR-Aj-XIU"/>
+                <outlet property="pitchFImage" destination="DUO-ro-JJn" id="fYk-Vc-bEt"/>
+                <outlet property="pitchGImage" destination="XKV-Rp-Jta" id="5NT-PX-fpY"/>
+                <outlet property="pitchGhalfDesc" destination="5a7-xm-jfY" id="scg-Ig-bsO"/>
+                <outlet property="pitchGhalfImage" destination="ejK-gv-bn7" id="eXg-KJ-KEG"/>
+                <outlet property="pitchGhalfLabel" destination="gUd-Pa-98x" id="dOV-eb-LX7"/>
+            </connections>
+            <point key="canvasLocation" x="101.53846153846153" y="-12.085308056872037"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="fork_pitchChoosed" width="18" height="18"/>
+        <image name="fork_pitchUnChoosed" width="18" height="18"/>
+        <image name="fork_warning" width="13" height="12"/>
+        <image name="speed_add" width="14" height="14"/>
+        <image name="speed_minus" width="14" height="14"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningNavView.h

@@ -0,0 +1,22 @@
+//
+//  TuningNavView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^TuningNavAction)(BOOL isBack);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TuningNavView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)navActionCallback:(TuningNavAction)callbcak;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 52 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningNavView.m

@@ -0,0 +1,52 @@
+//
+//  TuningNavView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import "TuningNavView.h"
+
+@interface TuningNavView ()
+
+@property (nonatomic, copy) TuningNavAction callback;
+
+@end
+
+
+@implementation TuningNavView
+
++ (instancetype)shareInstance {
+    TuningNavView *view = [[[NSBundle mainBundle] loadNibNamed:@"TuningNavView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)navActionCallback:(TuningNavAction)callbcak {
+    if (callbcak) {
+        self.callback = callbcak;
+    }
+}
+
+- (IBAction)backAction:(id)sender {
+    if (self.callback) {
+        self.callback(YES);
+    }
+}
+
+- (IBAction)settingAction:(id)sender {
+    if (self.callback) {
+        self.callback(NO);
+    }
+}
+
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 92 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/View/toneTuning/TuningNavView.xib

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_0" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <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="TuningNavView">
+            <rect key="frame" x="0.0" y="0.0" width="390" height="65"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XRC-8p-p4e">
+                    <rect key="frame" x="0.0" y="21" width="390" height="44"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="back_button_white" translatesAutoresizingMaskIntoConstraints="NO" id="EN2-WR-x5g">
+                            <rect key="frame" x="14" y="12" width="12" height="20"/>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pFx-8o-VCU">
+                            <rect key="frame" x="0.0" y="0.0" width="44" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="44" id="QgR-J5-WSv"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="backAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="O0M-F8-PQy"/>
+                            </connections>
+                        </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="调音器" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kAY-IQ-kPT">
+                            <rect key="frame" x="167" y="11" width="56" height="22"/>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="设置" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FIK-YD-KvW">
+                            <rect key="frame" x="312" y="13.666666666666664" width="29" height="17"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tuning_setting" translatesAutoresizingMaskIntoConstraints="NO" id="YlL-14-R48">
+                            <rect key="frame" x="349" y="12.666666666666664" width="19" height="19"/>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BFU-Xz-2Xu">
+                            <rect key="frame" x="312" y="0.0" width="78" height="44"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="settingAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="10h-IE-KXJ"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="BFU-Xz-2Xu" secondAttribute="trailing" id="0QV-8r-cmb"/>
+                        <constraint firstItem="pFx-8o-VCU" firstAttribute="leading" secondItem="XRC-8p-p4e" secondAttribute="leading" id="0la-07-HRD"/>
+                        <constraint firstItem="BFU-Xz-2Xu" firstAttribute="top" secondItem="XRC-8p-p4e" secondAttribute="top" id="1ZM-4W-pkR"/>
+                        <constraint firstAttribute="bottom" secondItem="BFU-Xz-2Xu" secondAttribute="bottom" id="MLk-Cq-pRw"/>
+                        <constraint firstItem="FIK-YD-KvW" firstAttribute="leading" secondItem="BFU-Xz-2Xu" secondAttribute="leading" id="NVa-Nb-oCu"/>
+                        <constraint firstItem="kAY-IQ-kPT" firstAttribute="centerX" secondItem="XRC-8p-p4e" secondAttribute="centerX" id="NyJ-R5-o14"/>
+                        <constraint firstItem="YlL-14-R48" firstAttribute="centerY" secondItem="XRC-8p-p4e" secondAttribute="centerY" id="Zc8-0c-TcZ"/>
+                        <constraint firstItem="EN2-WR-x5g" firstAttribute="centerY" secondItem="XRC-8p-p4e" secondAttribute="centerY" id="Zdd-20-X1y"/>
+                        <constraint firstAttribute="height" constant="44" id="cm1-xm-D5Z"/>
+                        <constraint firstAttribute="bottom" secondItem="pFx-8o-VCU" secondAttribute="bottom" id="dGQ-eq-OMp"/>
+                        <constraint firstItem="YlL-14-R48" firstAttribute="centerY" secondItem="FIK-YD-KvW" secondAttribute="centerY" id="e8f-De-izn"/>
+                        <constraint firstItem="YlL-14-R48" firstAttribute="leading" secondItem="FIK-YD-KvW" secondAttribute="trailing" constant="8" id="euB-Go-WMd"/>
+                        <constraint firstAttribute="trailing" secondItem="YlL-14-R48" secondAttribute="trailing" constant="22" id="jwl-X5-VvP"/>
+                        <constraint firstItem="EN2-WR-x5g" firstAttribute="leading" secondItem="XRC-8p-p4e" secondAttribute="leading" constant="14" id="p0O-O5-qtS"/>
+                        <constraint firstItem="pFx-8o-VCU" firstAttribute="top" secondItem="XRC-8p-p4e" secondAttribute="top" id="u6y-gg-F2T"/>
+                        <constraint firstItem="kAY-IQ-kPT" firstAttribute="centerY" secondItem="XRC-8p-p4e" secondAttribute="centerY" id="wBj-40-9AW"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="XRC-8p-p4e" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="SyP-b7-HEW"/>
+                <constraint firstAttribute="bottom" secondItem="XRC-8p-p4e" secondAttribute="bottom" id="ZWl-Cr-0de"/>
+                <constraint firstAttribute="trailing" secondItem="XRC-8p-p4e" secondAttribute="trailing" id="m8p-XJ-5cc"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="96.92307692307692" y="-104.14691943127961"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="back_button_white" width="12" height="20"/>
+        <image name="tuning_setting" width="19" height="19"/>
+    </resources>
+</document>

+ 5 - 5
KulexiuForTeacher/Podfile

@@ -41,11 +41,11 @@
     
   pod 'SSZipArchive'
   pod 'SocketRocket'
-  pod 'RongCloudIM/IMLib',  '~> 5.2.5'
-  pod 'RongCloudIM/IMKit',  '~> 5.2.5'
-  pod 'RongCloudIM/Sight',  '~> 5.2.5'
-  pod 'RongCloudRTC/RongRTCLib','~> 5.2.5'
-  pod 'RongCloudRTC/RongFaceBeautifier','~> 5.2.5'
+  pod 'RongCloudIM/IMLib',  '~> 5.3.0'
+  pod 'RongCloudIM/IMKit',  '~> 5.3.0'
+  pod 'RongCloudIM/Sight',  '~> 5.3.0'
+  pod 'RongCloudRTC/RongRTCLib','~> 5.3.0.1'
+  pod 'RongCloudRTC/RongFaceBeautifier','~> 5.3.0.1'
   
   pod "iOS-KS3SDK", "~>1.0.5"
 #  pod "WechatOpenSDK"

+ 19 - 19
KulexiuForTeacher/Podfile.lock

@@ -30,29 +30,29 @@ PODS:
   - MJRefresh (3.1.17)
   - NTLBridge (3.1.4)
   - Reachability (3.2)
-  - RongCloudIM/ChatRoom (5.2.5):
+  - RongCloudIM/ChatRoom (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/CustomerService (5.2.5):
+  - RongCloudIM/CustomerService (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/Discussion (5.2.5):
+  - RongCloudIM/Discussion (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/IMKit (5.2.5):
+  - RongCloudIM/IMKit (5.3.0):
     - RongCloudIM/IMLib
-  - RongCloudIM/IMLib (5.2.5):
+  - RongCloudIM/IMLib (5.3.0):
     - RongCloudIM/ChatRoom
     - RongCloudIM/CustomerService
     - RongCloudIM/Discussion
     - RongCloudIM/IMLibCore
     - RongCloudIM/PublicService
-  - RongCloudIM/IMLibCore (5.2.5)
-  - RongCloudIM/PublicService (5.2.5):
+  - RongCloudIM/IMLibCore (5.3.0)
+  - RongCloudIM/PublicService (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/Sight (5.2.5):
+  - RongCloudIM/Sight (5.3.0):
     - RongCloudIM/IMKit
-  - RongCloudRTC/RongFaceBeautifier (5.2.5):
+  - RongCloudRTC/RongFaceBeautifier (5.3.0.1):
     - RongCloudRTC/RongRTCLib
-  - RongCloudRTC/RongRTCLib (5.2.5):
-    - RongCloudIM/IMLibCore (>= 5.2.5)
+  - RongCloudRTC/RongRTCLib (5.3.0.1):
+    - RongCloudIM/IMLibCore (>= 5.3.0)
   - RSKImageCropper (3.0.2)
   - SDWebImage (5.12.5):
     - SDWebImage/Core (= 5.12.5)
@@ -106,11 +106,11 @@ DEPENDENCIES:
   - MJExtension (~> 3.3.0)
   - MJRefresh (~> 3.1.12)
   - Reachability (~> 3.2)
-  - RongCloudIM/IMKit (~> 5.2.5)
-  - RongCloudIM/IMLib (~> 5.2.5)
-  - RongCloudIM/Sight (~> 5.2.5)
-  - RongCloudRTC/RongFaceBeautifier (~> 5.2.5)
-  - RongCloudRTC/RongRTCLib (~> 5.2.5)
+  - RongCloudIM/IMKit (~> 5.3.0)
+  - RongCloudIM/IMLib (~> 5.3.0)
+  - RongCloudIM/Sight (~> 5.3.0)
+  - RongCloudRTC/RongFaceBeautifier (~> 5.3.0.1)
+  - RongCloudRTC/RongRTCLib (~> 5.3.0.1)
   - RSKImageCropper
   - SDWebImage (~> 5.12.5)
   - SocketRocket
@@ -165,8 +165,8 @@ SPEC CHECKSUMS:
   MJRefresh: ee5b68f639775462faba4db0fd243baf4d42c2cf
   NTLBridge: 49780dc966976d3221a0eb03c7368617c1987cb6
   Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
-  RongCloudIM: 4c3befbe6e9dd813a87c499c81fb2eac54c354b3
-  RongCloudRTC: 4ddffa66488977243b32e92923f03af9423b4f29
+  RongCloudIM: c11bd79157387337cc891b064b746efc92aa5d71
+  RongCloudRTC: 1a9ebbc622ad499eadc54fb08314d34d5030c856
   RSKImageCropper: 1ac71e9a82e3f41eea3eedfff8eacb0d3821c9ec
   SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e
   SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
@@ -176,6 +176,6 @@ SPEC CHECKSUMS:
   Whiteboard: 4622f3866b7c35a9c757955619ba0a2b26d968f5
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
 
-PODFILE CHECKSUM: c99ef45436f8305193cf0d3f6f80e59afa547a5f
+PODFILE CHECKSUM: 69fd6657ddd94af2b51f474485bb244437320399
 
 COCOAPODS: 1.11.3

+ 19 - 19
KulexiuForTeacher/Pods/Manifest.lock

@@ -30,29 +30,29 @@ PODS:
   - MJRefresh (3.1.17)
   - NTLBridge (3.1.4)
   - Reachability (3.2)
-  - RongCloudIM/ChatRoom (5.2.5):
+  - RongCloudIM/ChatRoom (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/CustomerService (5.2.5):
+  - RongCloudIM/CustomerService (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/Discussion (5.2.5):
+  - RongCloudIM/Discussion (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/IMKit (5.2.5):
+  - RongCloudIM/IMKit (5.3.0):
     - RongCloudIM/IMLib
-  - RongCloudIM/IMLib (5.2.5):
+  - RongCloudIM/IMLib (5.3.0):
     - RongCloudIM/ChatRoom
     - RongCloudIM/CustomerService
     - RongCloudIM/Discussion
     - RongCloudIM/IMLibCore
     - RongCloudIM/PublicService
-  - RongCloudIM/IMLibCore (5.2.5)
-  - RongCloudIM/PublicService (5.2.5):
+  - RongCloudIM/IMLibCore (5.3.0)
+  - RongCloudIM/PublicService (5.3.0):
     - RongCloudIM/IMLibCore
-  - RongCloudIM/Sight (5.2.5):
+  - RongCloudIM/Sight (5.3.0):
     - RongCloudIM/IMKit
-  - RongCloudRTC/RongFaceBeautifier (5.2.5):
+  - RongCloudRTC/RongFaceBeautifier (5.3.0.1):
     - RongCloudRTC/RongRTCLib
-  - RongCloudRTC/RongRTCLib (5.2.5):
-    - RongCloudIM/IMLibCore (>= 5.2.5)
+  - RongCloudRTC/RongRTCLib (5.3.0.1):
+    - RongCloudIM/IMLibCore (>= 5.3.0)
   - RSKImageCropper (3.0.2)
   - SDWebImage (5.12.5):
     - SDWebImage/Core (= 5.12.5)
@@ -106,11 +106,11 @@ DEPENDENCIES:
   - MJExtension (~> 3.3.0)
   - MJRefresh (~> 3.1.12)
   - Reachability (~> 3.2)
-  - RongCloudIM/IMKit (~> 5.2.5)
-  - RongCloudIM/IMLib (~> 5.2.5)
-  - RongCloudIM/Sight (~> 5.2.5)
-  - RongCloudRTC/RongFaceBeautifier (~> 5.2.5)
-  - RongCloudRTC/RongRTCLib (~> 5.2.5)
+  - RongCloudIM/IMKit (~> 5.3.0)
+  - RongCloudIM/IMLib (~> 5.3.0)
+  - RongCloudIM/Sight (~> 5.3.0)
+  - RongCloudRTC/RongFaceBeautifier (~> 5.3.0.1)
+  - RongCloudRTC/RongRTCLib (~> 5.3.0.1)
   - RSKImageCropper
   - SDWebImage (~> 5.12.5)
   - SocketRocket
@@ -165,8 +165,8 @@ SPEC CHECKSUMS:
   MJRefresh: ee5b68f639775462faba4db0fd243baf4d42c2cf
   NTLBridge: 49780dc966976d3221a0eb03c7368617c1987cb6
   Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
-  RongCloudIM: 4c3befbe6e9dd813a87c499c81fb2eac54c354b3
-  RongCloudRTC: 4ddffa66488977243b32e92923f03af9423b4f29
+  RongCloudIM: c11bd79157387337cc891b064b746efc92aa5d71
+  RongCloudRTC: 1a9ebbc622ad499eadc54fb08314d34d5030c856
   RSKImageCropper: 1ac71e9a82e3f41eea3eedfff8eacb0d3821c9ec
   SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e
   SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
@@ -176,6 +176,6 @@ SPEC CHECKSUMS:
   Whiteboard: 4622f3866b7c35a9c757955619ba0a2b26d968f5
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
 
-PODFILE CHECKSUM: c99ef45436f8305193cf0d3f6f80e59afa547a5f
+PODFILE CHECKSUM: 69fd6657ddd94af2b51f474485bb244437320399
 
 COCOAPODS: 1.11.3

File diff suppressed because it is too large
+ 318 - 270
KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj


+ 8 - 8
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/Info.plist

@@ -6,31 +6,31 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_armv7</string>
+			<string>ios-i386_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>RongChatRoom.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>arm64</string>
-				<string>armv7</string>
+				<string>i386</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-i386_x86_64-simulator</string>
+			<string>ios-arm64_armv7</string>
 			<key>LibraryPath</key>
 			<string>RongChatRoom.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>i386</string>
-				<string>x86_64</string>
+				<string>arm64</string>
+				<string>armv7</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-arm64_armv7/RongChatRoom.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-arm64_armv7/RongChatRoom.framework/RongChatRoom


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-arm64_armv7/RongChatRoom.framework/_CodeSignature/CodeResources

@@ -38,7 +38,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		zW4AriErKQ/Zw9q8qzx1p77w03s=
+		CTXYL/Qw2yDcDXXUBX+rkACy8mE=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-i386_x86_64-simulator/RongChatRoom.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-i386_x86_64-simulator/RongChatRoom.framework/RongChatRoom


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongChatRoom.xcframework/ios-i386_x86_64-simulator/RongChatRoom.framework/_CodeSignature/CodeResources

@@ -38,7 +38,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		qghAnXsMl+VQQ6CCrN44ImlFl0A=
+		z5gQrjpIta/r45tRRe+qdS4Siqo=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-arm64_armv7/RongCustomerService.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-arm64_armv7/RongCustomerService.framework/RongCustomerService


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-arm64_armv7/RongCustomerService.framework/_CodeSignature/CodeResources

@@ -46,7 +46,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		1SUEaNXskmnVcRfKJ8CbF/OoX88=
+		/P2BlvHEpoXJAC9YVtj/+7xAeRU=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-i386_x86_64-simulator/RongCustomerService.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-i386_x86_64-simulator/RongCustomerService.framework/RongCustomerService


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongCustomerService.xcframework/ios-i386_x86_64-simulator/RongCustomerService.framework/_CodeSignature/CodeResources

@@ -46,7 +46,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		DDBSngDnf31UQEfr8yxGgfEtmq0=
+		pPHsW35u/2n44+EG7toHBisqYVc=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

+ 8 - 8
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/Info.plist

@@ -6,31 +6,31 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_armv7</string>
+			<string>ios-i386_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>RongDiscussion.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>arm64</string>
-				<string>armv7</string>
+				<string>i386</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-i386_x86_64-simulator</string>
+			<string>ios-arm64_armv7</string>
 			<key>LibraryPath</key>
 			<string>RongDiscussion.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>i386</string>
-				<string>x86_64</string>
+				<string>arm64</string>
+				<string>armv7</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-arm64_armv7/RongDiscussion.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-arm64_armv7/RongDiscussion.framework/RongDiscussion


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-arm64_armv7/RongDiscussion.framework/_CodeSignature/CodeResources

@@ -22,7 +22,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		oCJI7OHHTS1ZZJFB92ow9mDxKVU=
+		K3ARK389WpKWgq5SQXSG9Wtr+iY=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-i386_x86_64-simulator/RongDiscussion.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-i386_x86_64-simulator/RongDiscussion.framework/RongDiscussion


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongDiscussion.xcframework/ios-i386_x86_64-simulator/RongDiscussion.framework/_CodeSignature/CodeResources

@@ -22,7 +22,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		KCvqnOfMrb9Q0w0GXLDnlZlJsTU=
+		v/1gbQHBZJmRPrE2nfuoMUvI8X0=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Headers/RCConversationModel.h

@@ -167,7 +167,7 @@ typedef NS_ENUM(NSUInteger, RCConversationModelType) {
  会话中第一条未读消息时间戳(Unix时间戳、毫秒)
 
  仅支持 超级群会话
- @Since 5.2.5
+ @since 5.2.5
 
 */
 @property (nonatomic, assign) long long firstUnreadMsgSendTime;

+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Headers/RCConversationViewController.h

@@ -282,7 +282,7 @@ typedef enum : NSUInteger {
  设置进入聊天室需要获取的历史消息数量(仅在当前会话为聊天室时生效)
 
  @discussion 此属性需要在viewDidLoad之前进行设置。
- -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条),0<messageCount<=50为具体获取的消息数量,最大值为30注:如果是7.x系统获取历史消息数量不要大于30
+ -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条)。
  */
 @property (nonatomic, assign) int defaultHistoryMessageCountOfChatRoom;
 

+ 5 - 0
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Headers/RCMessageCell.h

@@ -83,6 +83,11 @@
 @property (nonatomic, strong) UILabel *receiptStatusLabel;
 
 /*!
+ 是否显示头像
+
+ */
+@property (nonatomic, assign) BOOL showPortrait;
+/*!
  设置当前消息Cell的数据模型
 
  @param model 消息Cell的数据模型

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/RongIMKit


+ 10 - 10
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-arm64_armv7/RongIMKit.framework/_CodeSignature/CodeResources

@@ -58,7 +58,7 @@
 		</data>
 		<key>Headers/RCConversationModel.h</key>
 		<data>
-		SqE4WoQkGpIFXzIgvPSoCtjdBSI=
+		arfOy5F16bM092aBBrEEFeHXxT8=
 		</data>
 		<key>Headers/RCConversationStatusView.h</key>
 		<data>
@@ -66,7 +66,7 @@
 		</data>
 		<key>Headers/RCConversationViewController.h</key>
 		<data>
-		qGVOQ4BMbuEkDbLx87v/EAJk4HM=
+		OmbufWQp6wl9rUtdz2+3zyFwHZo=
 		</data>
 		<key>Headers/RCEmojiBoardView.h</key>
 		<data>
@@ -174,7 +174,7 @@
 		</data>
 		<key>Headers/RCMessageCell.h</key>
 		<data>
-		pa+a0UWojHnjiYWABFvQ2wWtGYI=
+		bZP/aalqx91t+sJahkn6hEbVkdw=
 		</data>
 		<key>Headers/RCMessageCellDelegate.h</key>
 		<data>
@@ -266,7 +266,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		xYgWmOXNGFLaN67RHfZFReZ4uGI=
+		lh3EOV2mOd6iEgenQs4CFngyqjY=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>
@@ -422,11 +422,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			SqE4WoQkGpIFXzIgvPSoCtjdBSI=
+			arfOy5F16bM092aBBrEEFeHXxT8=
 			</data>
 			<key>hash2</key>
 			<data>
-			S+wDE5EMiN/WjZ9J7InfuvP7LJuFAxBZlBCpgKSmC7s=
+			8pBmiwom6dpqIkqyj5ldt5izmruQSpPpwL75+Sdq8LE=
 			</data>
 		</dict>
 		<key>Headers/RCConversationStatusView.h</key>
@@ -444,11 +444,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			qGVOQ4BMbuEkDbLx87v/EAJk4HM=
+			OmbufWQp6wl9rUtdz2+3zyFwHZo=
 			</data>
 			<key>hash2</key>
 			<data>
-			P+/GQ6sD7hWxB83M7u8kXvP/dVWfyhwPuBM6CdNg044=
+			dPI4whIMZlsWEL3s4w5k3izCSHrbsmhgIRR6za+xqxU=
 			</data>
 		</dict>
 		<key>Headers/RCEmojiBoardView.h</key>
@@ -741,11 +741,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			pa+a0UWojHnjiYWABFvQ2wWtGYI=
+			bZP/aalqx91t+sJahkn6hEbVkdw=
 			</data>
 			<key>hash2</key>
 			<data>
-			Z3Sn4yrrlF/j7EDBTWDeCDJlH9XgjGNb/bZZvNjRMx4=
+			12hILxV6JiaOYKy+4Hks59gyJZ7oXsiVZTWD5w3MSAM=
 			</data>
 		</dict>
 		<key>Headers/RCMessageCellDelegate.h</key>

+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Headers/RCConversationModel.h

@@ -167,7 +167,7 @@ typedef NS_ENUM(NSUInteger, RCConversationModelType) {
  会话中第一条未读消息时间戳(Unix时间戳、毫秒)
 
  仅支持 超级群会话
- @Since 5.2.5
+ @since 5.2.5
 
 */
 @property (nonatomic, assign) long long firstUnreadMsgSendTime;

+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Headers/RCConversationViewController.h

@@ -282,7 +282,7 @@ typedef enum : NSUInteger {
  设置进入聊天室需要获取的历史消息数量(仅在当前会话为聊天室时生效)
 
  @discussion 此属性需要在viewDidLoad之前进行设置。
- -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条),0<messageCount<=50为具体获取的消息数量,最大值为30注:如果是7.x系统获取历史消息数量不要大于30
+ -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条)。
  */
 @property (nonatomic, assign) int defaultHistoryMessageCountOfChatRoom;
 

+ 5 - 0
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Headers/RCMessageCell.h

@@ -83,6 +83,11 @@
 @property (nonatomic, strong) UILabel *receiptStatusLabel;
 
 /*!
+ 是否显示头像
+
+ */
+@property (nonatomic, assign) BOOL showPortrait;
+/*!
  设置当前消息Cell的数据模型
 
  @param model 消息Cell的数据模型

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/RongIMKit


+ 10 - 10
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMKit.xcframework/ios-i386_x86_64-simulator/RongIMKit.framework/_CodeSignature/CodeResources

@@ -58,7 +58,7 @@
 		</data>
 		<key>Headers/RCConversationModel.h</key>
 		<data>
-		SqE4WoQkGpIFXzIgvPSoCtjdBSI=
+		arfOy5F16bM092aBBrEEFeHXxT8=
 		</data>
 		<key>Headers/RCConversationStatusView.h</key>
 		<data>
@@ -66,7 +66,7 @@
 		</data>
 		<key>Headers/RCConversationViewController.h</key>
 		<data>
-		qGVOQ4BMbuEkDbLx87v/EAJk4HM=
+		OmbufWQp6wl9rUtdz2+3zyFwHZo=
 		</data>
 		<key>Headers/RCEmojiBoardView.h</key>
 		<data>
@@ -174,7 +174,7 @@
 		</data>
 		<key>Headers/RCMessageCell.h</key>
 		<data>
-		pa+a0UWojHnjiYWABFvQ2wWtGYI=
+		bZP/aalqx91t+sJahkn6hEbVkdw=
 		</data>
 		<key>Headers/RCMessageCellDelegate.h</key>
 		<data>
@@ -266,7 +266,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		jp9saJFK/E9N4zBBxq/jOdy3wlg=
+		yECO2T+ldAWfioUVeEVh1EfFxro=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>
@@ -422,11 +422,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			SqE4WoQkGpIFXzIgvPSoCtjdBSI=
+			arfOy5F16bM092aBBrEEFeHXxT8=
 			</data>
 			<key>hash2</key>
 			<data>
-			S+wDE5EMiN/WjZ9J7InfuvP7LJuFAxBZlBCpgKSmC7s=
+			8pBmiwom6dpqIkqyj5ldt5izmruQSpPpwL75+Sdq8LE=
 			</data>
 		</dict>
 		<key>Headers/RCConversationStatusView.h</key>
@@ -444,11 +444,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			qGVOQ4BMbuEkDbLx87v/EAJk4HM=
+			OmbufWQp6wl9rUtdz2+3zyFwHZo=
 			</data>
 			<key>hash2</key>
 			<data>
-			P+/GQ6sD7hWxB83M7u8kXvP/dVWfyhwPuBM6CdNg044=
+			dPI4whIMZlsWEL3s4w5k3izCSHrbsmhgIRR6za+xqxU=
 			</data>
 		</dict>
 		<key>Headers/RCEmojiBoardView.h</key>
@@ -741,11 +741,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			pa+a0UWojHnjiYWABFvQ2wWtGYI=
+			bZP/aalqx91t+sJahkn6hEbVkdw=
 			</data>
 			<key>hash2</key>
 			<data>
-			Z3Sn4yrrlF/j7EDBTWDeCDJlH9XgjGNb/bZZvNjRMx4=
+			12hILxV6JiaOYKy+4Hks59gyJZ7oXsiVZTWD5w3MSAM=
 			</data>
 		</dict>
 		<key>Headers/RCMessageCellDelegate.h</key>

+ 8 - 8
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/Info.plist

@@ -6,31 +6,31 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-i386_x86_64-simulator</string>
+			<string>ios-arm64_armv7</string>
 			<key>LibraryPath</key>
 			<string>RongIMLib.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>i386</string>
-				<string>x86_64</string>
+				<string>arm64</string>
+				<string>armv7</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_armv7</string>
+			<string>ios-i386_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>RongIMLib.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>arm64</string>
-				<string>armv7</string>
+				<string>i386</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/Headers/RCIMClient.h

@@ -2761,7 +2761,7 @@ __deprecated_msg("Use [RCChannelClient getNotificationQuietHoursLevel:error:] in
 - (int)getOfflineMessageDuration;
 
 /**
- 设置集成 SDK 的用户 App 版本信息。便于融云排查问题时,作为分析依据,属于自愿行为
+ 上报客户 App 版本信息。服务端支持按上报的 App 版本处理自定义消息的推送内容
  setAppVer 接口需要在 connect 接口前调用
  @param  appVer   用户 APP 的版本信息, String 类型,非空,长度小于 20,示例如  "1.1.0"。
 

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/RongIMLib


+ 4 - 4
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-arm64_armv7/RongIMLib.framework/_CodeSignature/CodeResources

@@ -6,7 +6,7 @@
 	<dict>
 		<key>Headers/RCIMClient.h</key>
 		<data>
-		a5DwyWM8vft+lPBFlzl/JERh9ro=
+		ks4R2t88EnB9NdNzVJdfFMR/Yok=
 		</data>
 		<key>Headers/RongIMLib.h</key>
 		<data>
@@ -18,7 +18,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		aKbuZwCP38iY2ry0RZpAMeLH8OM=
+		CVd4J9VHjaRepxkewADHMfu1Pm4=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>
@@ -31,11 +31,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			a5DwyWM8vft+lPBFlzl/JERh9ro=
+			ks4R2t88EnB9NdNzVJdfFMR/Yok=
 			</data>
 			<key>hash2</key>
 			<data>
-			yVUxaMhKYelzzNUvRGIc75PWaDNLj6MkVCaw3AaWmUY=
+			0iY9MTrDy2tBKQD9DXy+57Eo2SC6KVZiOv+NNRHbdiU=
 			</data>
 		</dict>
 		<key>Headers/RongIMLib.h</key>

+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/Headers/RCIMClient.h

@@ -2761,7 +2761,7 @@ __deprecated_msg("Use [RCChannelClient getNotificationQuietHoursLevel:error:] in
 - (int)getOfflineMessageDuration;
 
 /**
- 设置集成 SDK 的用户 App 版本信息。便于融云排查问题时,作为分析依据,属于自愿行为
+ 上报客户 App 版本信息。服务端支持按上报的 App 版本处理自定义消息的推送内容
  setAppVer 接口需要在 connect 接口前调用
  @param  appVer   用户 APP 的版本信息, String 类型,非空,长度小于 20,示例如  "1.1.0"。
 

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/RongIMLib


+ 4 - 4
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLib.xcframework/ios-i386_x86_64-simulator/RongIMLib.framework/_CodeSignature/CodeResources

@@ -6,7 +6,7 @@
 	<dict>
 		<key>Headers/RCIMClient.h</key>
 		<data>
-		a5DwyWM8vft+lPBFlzl/JERh9ro=
+		ks4R2t88EnB9NdNzVJdfFMR/Yok=
 		</data>
 		<key>Headers/RongIMLib.h</key>
 		<data>
@@ -18,7 +18,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		0rTB3p7hVsQrZIy7YkC2ONqoOTs=
+		dDdtPJALb8KBEidaHGwzTkXxwW0=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>
@@ -31,11 +31,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			a5DwyWM8vft+lPBFlzl/JERh9ro=
+			ks4R2t88EnB9NdNzVJdfFMR/Yok=
 			</data>
 			<key>hash2</key>
 			<data>
-			yVUxaMhKYelzzNUvRGIc75PWaDNLj6MkVCaw3AaWmUY=
+			0iY9MTrDy2tBKQD9DXy+57Eo2SC6KVZiOv+NNRHbdiU=
 			</data>
 		</dict>
 		<key>Headers/RongIMLib.h</key>

+ 8 - 8
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/Info.plist

@@ -6,31 +6,31 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-i386_x86_64-simulator</string>
+			<string>ios-arm64_armv7</string>
 			<key>LibraryPath</key>
 			<string>RongIMLibCore.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>i386</string>
-				<string>x86_64</string>
+				<string>arm64</string>
+				<string>armv7</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_armv7</string>
+			<string>ios-i386_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>RongIMLibCore.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>arm64</string>
-				<string>armv7</string>
+				<string>i386</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

File diff suppressed because it is too large
+ 745 - 34
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCChannelClient.h


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCConversation.h

@@ -187,7 +187,7 @@ NS_ASSUME_NONNULL_BEGIN
 会话中第一条未读消息时间戳(Unix时间戳、毫秒)
 
 仅支持 超级群会话
- @Since 5.2.5
+ @since 5.2.5
 */
 @property (nonatomic, assign) long long firstUnreadMsgSendTime;
 

File diff suppressed because it is too large
+ 775 - 30
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCCoreClient.h


+ 1 - 0
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCMentionedInfo.h

@@ -29,6 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 /*!
  包含 @ 提醒的消息,本地通知和远程推送显示的内容
+ 如果是 nil , 则按默认格式显示 [有人 @ 你]
  */
 @property (nonatomic, copy, nullable) NSString *mentionedContent;
 

+ 73 - 9
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RCStatusDefine.h

@@ -64,6 +64,7 @@ typedef NS_ENUM(NSInteger, RCConnectErrorCode) {
      用户被封禁
 
      @discussion 请检查您使用的 Token 是否正确,以及对应的 UserId 是否被封禁。
+     @discussion 在 5.2.3 之前版本不支持用户销户功能,旧版本 SDK 销户也会报该错误码;5.2.3 及其以后版本用户销户会报 31029
      */
     RC_CONN_USER_BLOCKED = 31009,
 
@@ -115,6 +116,28 @@ typedef NS_ENUM(NSInteger, RCConnectErrorCode) {
      @discussion 一次性 token 只能连接一次,之后再使用会上报此错误
      */
     RC_CONN_DISPOSABLE_TOKEN_USED = 31027,
+    
+    /*!
+     开发者调用 connectWithToken 时 proxy 服务不可访问
+     
+     @discussion 设置 setProxy,调用 connectWithToken 时, host:port 代理服务不可访问, 返回此错误码时,SDK 不会再继续重连
+     @since 5.3.0
+     */
+    RC_CONN_PROXY_UNAVAILABLE = 31028,
+
+    /*!
+     用户账号已销户
+
+    @discussion 请检查您使用的 Token 是否正确,以及对应的 UserId 是否被销户。
+     */
+    RC_CONN_USER_ABANDON = 31029,
+    
+    /*!
+     APP License 过期
+
+    @discussion 请检查为您部署的 IM 服务 License 是否过期。
+     */
+    RC_CONN_APP_LICENSE_EXPIRED = 31030,
 
     /*!
      SDK 没有初始化
@@ -523,7 +546,7 @@ typedef NS_ENUM(NSInteger, RCErrorCode) {
     IMLib 撤回消息可以撤回自己发送的消息和别人发送的消息
     IM 服务有开关,控制只可以撤回自己发送的消息
     当服务该开关打开时,撤回别人的消息会报这个错误
-    @Since 5.2.4
+    @since 5.2.4
     */
     RC_RECALL_MESSAGE_USER_INVALID = 25107,
 
@@ -919,17 +942,48 @@ typedef NS_ENUM(NSInteger, RCErrorCode) {
      描述:开发者接口调用时传入的 count 非法。
      可能原因: count 超出有效范围
      处理建议:请检查参数是否合法。
-     @Since 5.2.5
+     @since 5.2.5
      */
     INVALID_PARAMETER_COUNT = 34232,
     /*!
      描述:开发者接口调用时传入的 sendTime 非法。
      可能原因: sendTime 超出有效范围
      处理建议:请检查参数是否合法。
-     @Since 5.2.5
+     @since 5.2.5
      */
     INVALID_PARAMETER_SEND_TIME = 34233,
 
+    /*!
+     描述:开发者调用 testProxy 时,代理配置为空或者非法。
+     可能原因: RCIMProxy 不合法
+     处理建议:请检查参数是否合法。
+     @since 5.3.0
+     */
+    INVALID_PARAMETER_PROXY = 34238,
+    
+    /*!
+     描述:开发者接口调用 testProxy 时传入的代理测试服务非法。
+     可能原因: testHost 地址为空或者非法
+     处理建议:请检查参数是否合法。
+     @since 5.3.0
+     */
+    INVALID_PARAMETER_TESTHOST = 34239,
+    
+    /*!
+     描述:开发者接口调用 testProxy 接口时无法联通。
+     可能原因: RCIMProxy host:port 代理地址无法联通或者 testHost 地址无法联通
+     处理建议:请检查 RCIMProxy host:port 代理地址是否可用 或者 testHost 地址是否可用。
+     @since 5.3.0
+     */
+    INVALID_CONNECT_TESTHOST_FAILED = 34240,
+    
+    /**
+     描述:开发者接口调用recallUltraGroupMessage时,撤回了不支持的消息类型。
+     可能原因: 撤回了不支持的消息类型,目前有'RC:RcNtf'。
+     处理建议:请开发者判断MessageContent类型是否支持被撤回。
+     @since 5.3.0
+     */
+    INVALID_PARAMETER_ULTRA_GROUP_MESSAGE_OBJECT_NAME = 34241
 };
 
 typedef NS_ENUM(NSInteger, RCDBErrorCode) {
@@ -1006,7 +1060,17 @@ typedef NS_ENUM(NSInteger, RCConnectionStatus) {
     /*!
      与服务器的连接已断开,用户被封禁
      */
-    ConnectionStatus_DISCONN_EXCEPTION = 16
+    ConnectionStatus_DISCONN_EXCEPTION = 16,
+    
+    /*!
+     proxy 服务不可用,SDK 将不会继续连接,用户需要检查 proxy 是否可用,再自行调用 connectWithToken 接口进行连接
+    */
+    ConnectionStatus_PROXY_UNAVAILABLE = 17,
+
+    /*!
+     用户账号已销户,不再进行连接
+     */
+    ConnectionStatus_USER_ABANDON = 19
 };
 
 #pragma mark RCNetworkStatus - 当前所处的网络
@@ -1406,7 +1470,7 @@ typedef NS_ENUM(NSUInteger, RCSearchType) {
     RCSearchType_INVALID
 };
 
-#pragma mark RCLogLevel - 日志级别
+#pragma mark - RCLogLevel - 日志级别
 /*!
  日志级别
  */
@@ -1443,7 +1507,7 @@ typedef NS_ENUM(NSUInteger, RCLogLevel) {
     RC_Log_Level_Verbose = 5,
 };
 
-#pragma mark RCTimestampOrder - 历史消息查询顺序
+#pragma mark - RCTimestampOrder - 历史消息查询顺序
 /*!
  日志级别
  */
@@ -1459,7 +1523,7 @@ typedef NS_ENUM(NSUInteger, RCTimestampOrder) {
     RC_Timestamp_Asc = 1,
 };
 
-#pragma mark RCPlatform - 在线平台
+#pragma mark - RCPlatform - 在线平台
 /*!
  在线平台
  */
@@ -1490,7 +1554,7 @@ typedef NS_ENUM(NSUInteger, RCPlatform) {
     RCPlatform_PC = 4
 };
 
-#pragma mark RCPushLauguageType - push 语言设置
+#pragma mark - RCPushLauguageType - push 语言设置
 /*!
  push 语言设置
  */
@@ -1509,7 +1573,7 @@ typedef NS_ENUM(NSUInteger, RCPushLauguage) {
     RCPushLauguage_AR_SA
 };
 
-#pragma mark RCMessageBlockType - 消息被拦截类型
+#pragma mark - RCMessageBlockType - 消息被拦截类型
 
 /*!
  消息被拦截类型

+ 3 - 0
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Headers/RongIMLibCore.h

@@ -91,3 +91,6 @@ FOUNDATION_EXPORT const unsigned char RongIMLibCoreVersionString[];
 // Downlad
 #import <RongIMLibCore/RCDownloadItem.h>
 #import <RongIMLibCore/RCResumeableDownloader.h>
+
+// Socks proxy
+#import <RongIMLibCore/RCIMProxy.h>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/RongIMLibCore


+ 34 - 19
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-arm64_armv7/RongIMLibCore.framework/_CodeSignature/CodeResources

@@ -18,7 +18,7 @@
 		</data>
 		<key>Headers/RCChannelClient.h</key>
 		<data>
-		6dIX0FZHIKtD3y1hkYT8dhifls4=
+		6zOSL8ZD4gdcfHuqTXVNOTt1Q5E=
 		</data>
 		<key>Headers/RCClearConversationOption.h</key>
 		<data>
@@ -38,7 +38,7 @@
 		</data>
 		<key>Headers/RCConversation.h</key>
 		<data>
-		PMR4skNxS8S5EEmWKeegXLNYb/Y=
+		3OIHDl3ldCmS2f6NGO40lduo8y4=
 		</data>
 		<key>Headers/RCConversationChannelProtocol.h</key>
 		<data>
@@ -58,7 +58,7 @@
 		</data>
 		<key>Headers/RCCoreClient.h</key>
 		<data>
-		P/KEWH2u+8expvgKO4L0OtPNuww=
+		BQzxWWIDJFI7S/+2nlJpGLw5rWk=
 		</data>
 		<key>Headers/RCDownloadItem.h</key>
 		<data>
@@ -116,6 +116,10 @@
 		<data>
 		QaJ+SfwuQFvAzu2IfFLlxOf1s24=
 		</data>
+		<key>Headers/RCIMProxy.h</key>
+		<data>
+		kDF/pLuIXm+dlDqdj6TB3lKyd+E=
+		</data>
 		<key>Headers/RCImageCompressConfig.h</key>
 		<data>
 		hj5kK+Z0cNMcMWZqb+Pk0zf6cBI=
@@ -134,7 +138,7 @@
 		</data>
 		<key>Headers/RCMentionedInfo.h</key>
 		<data>
-		EZMNlfPFg5YAVi8wOm5MYii30Js=
+		18eIYww49inr3H/vxVC4oaL83jY=
 		</data>
 		<key>Headers/RCMessage.h</key>
 		<data>
@@ -202,7 +206,7 @@
 		</data>
 		<key>Headers/RCStatusDefine.h</key>
 		<data>
-		JH/bkEJ6/H3lyUvxahnr+V5VknU=
+		hT6uReRsvnpG5R+4eWuLubw0aJs=
 		</data>
 		<key>Headers/RCStatusMessage.h</key>
 		<data>
@@ -274,7 +278,7 @@
 		</data>
 		<key>Headers/RongIMLibCore.h</key>
 		<data>
-		oceHrvez2tg/x+cikiuQuARbW/8=
+		wtQ8mJe/7GkqAXLqsFhCJPSbyxI=
 		</data>
 		<key>Headers/interf_dec.h</key>
 		<data>
@@ -286,7 +290,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		q+tzfmAEICtCoPw6oL1kamtNthc=
+		go9tP9uKvAevFeSPK/eWRR5IoZA=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>
@@ -332,11 +336,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			6dIX0FZHIKtD3y1hkYT8dhifls4=
+			6zOSL8ZD4gdcfHuqTXVNOTt1Q5E=
 			</data>
 			<key>hash2</key>
 			<data>
-			rr3PO7pGfxcPdjRMH65eDdJj9ox+ZjsIwo/eEHJsby0=
+			OqaZFVbY9ytEH4ELEm1L4J46A4jsCV6t5hIULJ7rnbk=
 			</data>
 		</dict>
 		<key>Headers/RCClearConversationOption.h</key>
@@ -387,11 +391,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			PMR4skNxS8S5EEmWKeegXLNYb/Y=
+			3OIHDl3ldCmS2f6NGO40lduo8y4=
 			</data>
 			<key>hash2</key>
 			<data>
-			inmw7WZzkojZ1pSLlOR+xG3hNPAXoD2YUuYDmCoKbZc=
+			p5kFxvTghLdJsW2C1IqbIcugWRGuYsHP5MIjV6B0OHs=
 			</data>
 		</dict>
 		<key>Headers/RCConversationChannelProtocol.h</key>
@@ -442,11 +446,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			P/KEWH2u+8expvgKO4L0OtPNuww=
+			BQzxWWIDJFI7S/+2nlJpGLw5rWk=
 			</data>
 			<key>hash2</key>
 			<data>
-			pAZvxW3qYuxWTuo09Fb8rdhrq6t6P1eby822MxCsc9Y=
+			oMjbrjmxrb3LGuAdJS/Yka/zylNDX0cXbbiddLP3qtQ=
 			</data>
 		</dict>
 		<key>Headers/RCDownloadItem.h</key>
@@ -603,6 +607,17 @@
 			nQrek88uPl5uvDy0+P2aZ0qJwLRJEuhLHue396DGL9M=
 			</data>
 		</dict>
+		<key>Headers/RCIMProxy.h</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			kDF/pLuIXm+dlDqdj6TB3lKyd+E=
+			</data>
+			<key>hash2</key>
+			<data>
+			oozXvbwiW4q25huE0amAvNkCBpXskdmiZuXgSVt9Q/k=
+			</data>
+		</dict>
 		<key>Headers/RCImageCompressConfig.h</key>
 		<dict>
 			<key>hash</key>
@@ -651,11 +666,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			EZMNlfPFg5YAVi8wOm5MYii30Js=
+			18eIYww49inr3H/vxVC4oaL83jY=
 			</data>
 			<key>hash2</key>
 			<data>
-			5fCeGNxQ9Ggj2ODru5tgK8MOjznEJDQs8uFaBxxlszQ=
+			CAataO789nw6wWWaiWGzKoxRjr1JXwctN2PaoxA6nAM=
 			</data>
 		</dict>
 		<key>Headers/RCMessage.h</key>
@@ -838,11 +853,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			JH/bkEJ6/H3lyUvxahnr+V5VknU=
+			hT6uReRsvnpG5R+4eWuLubw0aJs=
 			</data>
 			<key>hash2</key>
 			<data>
-			5C+Ri+5J66x92BQlhJ1SZdfGI59BQOMQxd2DjXtZhwc=
+			2Ty7w35G6veD8+FZFLDr6E3x1uz4igRUfPBkuPmAJKs=
 			</data>
 		</dict>
 		<key>Headers/RCStatusMessage.h</key>
@@ -1036,11 +1051,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			oceHrvez2tg/x+cikiuQuARbW/8=
+			wtQ8mJe/7GkqAXLqsFhCJPSbyxI=
 			</data>
 			<key>hash2</key>
 			<data>
-			TXM8/jY9BPQ6T9tPCQmu6DovdxEkv9yBtNM9p+k2x6o=
+			NQZAAc9M/3CJFfXd2q20nMA5X2vm9SrHAkkly+xLzYA=
 			</data>
 		</dict>
 		<key>Headers/interf_dec.h</key>

File diff suppressed because it is too large
+ 745 - 34
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCChannelClient.h


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCConversation.h

@@ -187,7 +187,7 @@ NS_ASSUME_NONNULL_BEGIN
 会话中第一条未读消息时间戳(Unix时间戳、毫秒)
 
 仅支持 超级群会话
- @Since 5.2.5
+ @since 5.2.5
 */
 @property (nonatomic, assign) long long firstUnreadMsgSendTime;
 

File diff suppressed because it is too large
+ 775 - 30
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCCoreClient.h


+ 1 - 0
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCMentionedInfo.h

@@ -29,6 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 /*!
  包含 @ 提醒的消息,本地通知和远程推送显示的内容
+ 如果是 nil , 则按默认格式显示 [有人 @ 你]
  */
 @property (nonatomic, copy, nullable) NSString *mentionedContent;
 

+ 73 - 9
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RCStatusDefine.h

@@ -64,6 +64,7 @@ typedef NS_ENUM(NSInteger, RCConnectErrorCode) {
      用户被封禁
 
      @discussion 请检查您使用的 Token 是否正确,以及对应的 UserId 是否被封禁。
+     @discussion 在 5.2.3 之前版本不支持用户销户功能,旧版本 SDK 销户也会报该错误码;5.2.3 及其以后版本用户销户会报 31029
      */
     RC_CONN_USER_BLOCKED = 31009,
 
@@ -115,6 +116,28 @@ typedef NS_ENUM(NSInteger, RCConnectErrorCode) {
      @discussion 一次性 token 只能连接一次,之后再使用会上报此错误
      */
     RC_CONN_DISPOSABLE_TOKEN_USED = 31027,
+    
+    /*!
+     开发者调用 connectWithToken 时 proxy 服务不可访问
+     
+     @discussion 设置 setProxy,调用 connectWithToken 时, host:port 代理服务不可访问, 返回此错误码时,SDK 不会再继续重连
+     @since 5.3.0
+     */
+    RC_CONN_PROXY_UNAVAILABLE = 31028,
+
+    /*!
+     用户账号已销户
+
+    @discussion 请检查您使用的 Token 是否正确,以及对应的 UserId 是否被销户。
+     */
+    RC_CONN_USER_ABANDON = 31029,
+    
+    /*!
+     APP License 过期
+
+    @discussion 请检查为您部署的 IM 服务 License 是否过期。
+     */
+    RC_CONN_APP_LICENSE_EXPIRED = 31030,
 
     /*!
      SDK 没有初始化
@@ -523,7 +546,7 @@ typedef NS_ENUM(NSInteger, RCErrorCode) {
     IMLib 撤回消息可以撤回自己发送的消息和别人发送的消息
     IM 服务有开关,控制只可以撤回自己发送的消息
     当服务该开关打开时,撤回别人的消息会报这个错误
-    @Since 5.2.4
+    @since 5.2.4
     */
     RC_RECALL_MESSAGE_USER_INVALID = 25107,
 
@@ -919,17 +942,48 @@ typedef NS_ENUM(NSInteger, RCErrorCode) {
      描述:开发者接口调用时传入的 count 非法。
      可能原因: count 超出有效范围
      处理建议:请检查参数是否合法。
-     @Since 5.2.5
+     @since 5.2.5
      */
     INVALID_PARAMETER_COUNT = 34232,
     /*!
      描述:开发者接口调用时传入的 sendTime 非法。
      可能原因: sendTime 超出有效范围
      处理建议:请检查参数是否合法。
-     @Since 5.2.5
+     @since 5.2.5
      */
     INVALID_PARAMETER_SEND_TIME = 34233,
 
+    /*!
+     描述:开发者调用 testProxy 时,代理配置为空或者非法。
+     可能原因: RCIMProxy 不合法
+     处理建议:请检查参数是否合法。
+     @since 5.3.0
+     */
+    INVALID_PARAMETER_PROXY = 34238,
+    
+    /*!
+     描述:开发者接口调用 testProxy 时传入的代理测试服务非法。
+     可能原因: testHost 地址为空或者非法
+     处理建议:请检查参数是否合法。
+     @since 5.3.0
+     */
+    INVALID_PARAMETER_TESTHOST = 34239,
+    
+    /*!
+     描述:开发者接口调用 testProxy 接口时无法联通。
+     可能原因: RCIMProxy host:port 代理地址无法联通或者 testHost 地址无法联通
+     处理建议:请检查 RCIMProxy host:port 代理地址是否可用 或者 testHost 地址是否可用。
+     @since 5.3.0
+     */
+    INVALID_CONNECT_TESTHOST_FAILED = 34240,
+    
+    /**
+     描述:开发者接口调用recallUltraGroupMessage时,撤回了不支持的消息类型。
+     可能原因: 撤回了不支持的消息类型,目前有'RC:RcNtf'。
+     处理建议:请开发者判断MessageContent类型是否支持被撤回。
+     @since 5.3.0
+     */
+    INVALID_PARAMETER_ULTRA_GROUP_MESSAGE_OBJECT_NAME = 34241
 };
 
 typedef NS_ENUM(NSInteger, RCDBErrorCode) {
@@ -1006,7 +1060,17 @@ typedef NS_ENUM(NSInteger, RCConnectionStatus) {
     /*!
      与服务器的连接已断开,用户被封禁
      */
-    ConnectionStatus_DISCONN_EXCEPTION = 16
+    ConnectionStatus_DISCONN_EXCEPTION = 16,
+    
+    /*!
+     proxy 服务不可用,SDK 将不会继续连接,用户需要检查 proxy 是否可用,再自行调用 connectWithToken 接口进行连接
+    */
+    ConnectionStatus_PROXY_UNAVAILABLE = 17,
+
+    /*!
+     用户账号已销户,不再进行连接
+     */
+    ConnectionStatus_USER_ABANDON = 19
 };
 
 #pragma mark RCNetworkStatus - 当前所处的网络
@@ -1406,7 +1470,7 @@ typedef NS_ENUM(NSUInteger, RCSearchType) {
     RCSearchType_INVALID
 };
 
-#pragma mark RCLogLevel - 日志级别
+#pragma mark - RCLogLevel - 日志级别
 /*!
  日志级别
  */
@@ -1443,7 +1507,7 @@ typedef NS_ENUM(NSUInteger, RCLogLevel) {
     RC_Log_Level_Verbose = 5,
 };
 
-#pragma mark RCTimestampOrder - 历史消息查询顺序
+#pragma mark - RCTimestampOrder - 历史消息查询顺序
 /*!
  日志级别
  */
@@ -1459,7 +1523,7 @@ typedef NS_ENUM(NSUInteger, RCTimestampOrder) {
     RC_Timestamp_Asc = 1,
 };
 
-#pragma mark RCPlatform - 在线平台
+#pragma mark - RCPlatform - 在线平台
 /*!
  在线平台
  */
@@ -1490,7 +1554,7 @@ typedef NS_ENUM(NSUInteger, RCPlatform) {
     RCPlatform_PC = 4
 };
 
-#pragma mark RCPushLauguageType - push 语言设置
+#pragma mark - RCPushLauguageType - push 语言设置
 /*!
  push 语言设置
  */
@@ -1509,7 +1573,7 @@ typedef NS_ENUM(NSUInteger, RCPushLauguage) {
     RCPushLauguage_AR_SA
 };
 
-#pragma mark RCMessageBlockType - 消息被拦截类型
+#pragma mark - RCMessageBlockType - 消息被拦截类型
 
 /*!
  消息被拦截类型

+ 3 - 0
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Headers/RongIMLibCore.h

@@ -91,3 +91,6 @@ FOUNDATION_EXPORT const unsigned char RongIMLibCoreVersionString[];
 // Downlad
 #import <RongIMLibCore/RCDownloadItem.h>
 #import <RongIMLibCore/RCResumeableDownloader.h>
+
+// Socks proxy
+#import <RongIMLibCore/RCIMProxy.h>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/RongIMLibCore


+ 34 - 19
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongIMLibCore.xcframework/ios-i386_x86_64-simulator/RongIMLibCore.framework/_CodeSignature/CodeResources

@@ -18,7 +18,7 @@
 		</data>
 		<key>Headers/RCChannelClient.h</key>
 		<data>
-		6dIX0FZHIKtD3y1hkYT8dhifls4=
+		6zOSL8ZD4gdcfHuqTXVNOTt1Q5E=
 		</data>
 		<key>Headers/RCClearConversationOption.h</key>
 		<data>
@@ -38,7 +38,7 @@
 		</data>
 		<key>Headers/RCConversation.h</key>
 		<data>
-		PMR4skNxS8S5EEmWKeegXLNYb/Y=
+		3OIHDl3ldCmS2f6NGO40lduo8y4=
 		</data>
 		<key>Headers/RCConversationChannelProtocol.h</key>
 		<data>
@@ -58,7 +58,7 @@
 		</data>
 		<key>Headers/RCCoreClient.h</key>
 		<data>
-		P/KEWH2u+8expvgKO4L0OtPNuww=
+		BQzxWWIDJFI7S/+2nlJpGLw5rWk=
 		</data>
 		<key>Headers/RCDownloadItem.h</key>
 		<data>
@@ -116,6 +116,10 @@
 		<data>
 		QaJ+SfwuQFvAzu2IfFLlxOf1s24=
 		</data>
+		<key>Headers/RCIMProxy.h</key>
+		<data>
+		kDF/pLuIXm+dlDqdj6TB3lKyd+E=
+		</data>
 		<key>Headers/RCImageCompressConfig.h</key>
 		<data>
 		hj5kK+Z0cNMcMWZqb+Pk0zf6cBI=
@@ -134,7 +138,7 @@
 		</data>
 		<key>Headers/RCMentionedInfo.h</key>
 		<data>
-		EZMNlfPFg5YAVi8wOm5MYii30Js=
+		18eIYww49inr3H/vxVC4oaL83jY=
 		</data>
 		<key>Headers/RCMessage.h</key>
 		<data>
@@ -202,7 +206,7 @@
 		</data>
 		<key>Headers/RCStatusDefine.h</key>
 		<data>
-		JH/bkEJ6/H3lyUvxahnr+V5VknU=
+		hT6uReRsvnpG5R+4eWuLubw0aJs=
 		</data>
 		<key>Headers/RCStatusMessage.h</key>
 		<data>
@@ -274,7 +278,7 @@
 		</data>
 		<key>Headers/RongIMLibCore.h</key>
 		<data>
-		oceHrvez2tg/x+cikiuQuARbW/8=
+		wtQ8mJe/7GkqAXLqsFhCJPSbyxI=
 		</data>
 		<key>Headers/interf_dec.h</key>
 		<data>
@@ -286,7 +290,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		xIvB2s1Xg5MkqsRV7wLIP5agQAg=
+		n+hOZ0rZhG5x08+dNIZ79WgzHpw=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>
@@ -332,11 +336,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			6dIX0FZHIKtD3y1hkYT8dhifls4=
+			6zOSL8ZD4gdcfHuqTXVNOTt1Q5E=
 			</data>
 			<key>hash2</key>
 			<data>
-			rr3PO7pGfxcPdjRMH65eDdJj9ox+ZjsIwo/eEHJsby0=
+			OqaZFVbY9ytEH4ELEm1L4J46A4jsCV6t5hIULJ7rnbk=
 			</data>
 		</dict>
 		<key>Headers/RCClearConversationOption.h</key>
@@ -387,11 +391,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			PMR4skNxS8S5EEmWKeegXLNYb/Y=
+			3OIHDl3ldCmS2f6NGO40lduo8y4=
 			</data>
 			<key>hash2</key>
 			<data>
-			inmw7WZzkojZ1pSLlOR+xG3hNPAXoD2YUuYDmCoKbZc=
+			p5kFxvTghLdJsW2C1IqbIcugWRGuYsHP5MIjV6B0OHs=
 			</data>
 		</dict>
 		<key>Headers/RCConversationChannelProtocol.h</key>
@@ -442,11 +446,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			P/KEWH2u+8expvgKO4L0OtPNuww=
+			BQzxWWIDJFI7S/+2nlJpGLw5rWk=
 			</data>
 			<key>hash2</key>
 			<data>
-			pAZvxW3qYuxWTuo09Fb8rdhrq6t6P1eby822MxCsc9Y=
+			oMjbrjmxrb3LGuAdJS/Yka/zylNDX0cXbbiddLP3qtQ=
 			</data>
 		</dict>
 		<key>Headers/RCDownloadItem.h</key>
@@ -603,6 +607,17 @@
 			nQrek88uPl5uvDy0+P2aZ0qJwLRJEuhLHue396DGL9M=
 			</data>
 		</dict>
+		<key>Headers/RCIMProxy.h</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			kDF/pLuIXm+dlDqdj6TB3lKyd+E=
+			</data>
+			<key>hash2</key>
+			<data>
+			oozXvbwiW4q25huE0amAvNkCBpXskdmiZuXgSVt9Q/k=
+			</data>
+		</dict>
 		<key>Headers/RCImageCompressConfig.h</key>
 		<dict>
 			<key>hash</key>
@@ -651,11 +666,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			EZMNlfPFg5YAVi8wOm5MYii30Js=
+			18eIYww49inr3H/vxVC4oaL83jY=
 			</data>
 			<key>hash2</key>
 			<data>
-			5fCeGNxQ9Ggj2ODru5tgK8MOjznEJDQs8uFaBxxlszQ=
+			CAataO789nw6wWWaiWGzKoxRjr1JXwctN2PaoxA6nAM=
 			</data>
 		</dict>
 		<key>Headers/RCMessage.h</key>
@@ -838,11 +853,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			JH/bkEJ6/H3lyUvxahnr+V5VknU=
+			hT6uReRsvnpG5R+4eWuLubw0aJs=
 			</data>
 			<key>hash2</key>
 			<data>
-			5C+Ri+5J66x92BQlhJ1SZdfGI59BQOMQxd2DjXtZhwc=
+			2Ty7w35G6veD8+FZFLDr6E3x1uz4igRUfPBkuPmAJKs=
 			</data>
 		</dict>
 		<key>Headers/RCStatusMessage.h</key>
@@ -1036,11 +1051,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			oceHrvez2tg/x+cikiuQuARbW/8=
+			wtQ8mJe/7GkqAXLqsFhCJPSbyxI=
 			</data>
 			<key>hash2</key>
 			<data>
-			TXM8/jY9BPQ6T9tPCQmu6DovdxEkv9yBtNM9p+k2x6o=
+			NQZAAc9M/3CJFfXd2q20nMA5X2vm9SrHAkkly+xLzYA=
 			</data>
 		</dict>
 		<key>Headers/interf_dec.h</key>

+ 8 - 8
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/Info.plist

@@ -6,31 +6,31 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-i386_x86_64-simulator</string>
+			<string>ios-arm64_armv7</string>
 			<key>LibraryPath</key>
 			<string>RongPublicService.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>i386</string>
-				<string>x86_64</string>
+				<string>arm64</string>
+				<string>armv7</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_armv7</string>
+			<string>ios-i386_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>RongPublicService.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>arm64</string>
-				<string>armv7</string>
+				<string>i386</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-arm64_armv7/RongPublicService.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-arm64_armv7/RongPublicService.framework/RongPublicService


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-arm64_armv7/RongPublicService.framework/_CodeSignature/CodeResources

@@ -46,7 +46,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		gH1AW6nCTyXsqjJ1UB/f5Q8EAdM=
+		aATk8imveCepECTeDqxVzohBf2c=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-i386_x86_64-simulator/RongPublicService.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-i386_x86_64-simulator/RongPublicService.framework/RongPublicService


+ 1 - 1
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongPublicService.xcframework/ios-i386_x86_64-simulator/RongPublicService.framework/_CodeSignature/CodeResources

@@ -46,7 +46,7 @@
 		</data>
 		<key>Info.plist</key>
 		<data>
-		dsQXZETrby+dqoaMP4IMLNDJR88=
+		yCOopj7x9jza+Fl3VaFGIvaed/o=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>

+ 8 - 8
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongSight.xcframework/Info.plist

@@ -6,31 +6,31 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_armv7</string>
+			<string>ios-i386_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>RongSight.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>arm64</string>
-				<string>armv7</string>
+				<string>i386</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-i386_x86_64-simulator</string>
+			<string>ios-arm64_armv7</string>
 			<key>LibraryPath</key>
 			<string>RongSight.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
-				<string>i386</string>
-				<string>x86_64</string>
+				<string>arm64</string>
+				<string>armv7</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongSight.xcframework/ios-arm64_armv7/RongSight.framework/Info.plist


BIN
KulexiuForTeacher/Pods/RongCloudIM/RongCloudIM/RongSight.xcframework/ios-arm64_armv7/RongSight.framework/RongSight


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