ソースを参照

小工具主页面

Steven 2 年 前
コミット
969b973ace
41 ファイル変更885 行追加58 行削除
  1. 100 52
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 95 3
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/tuning_setting.imageset/Contents.json
  5. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/tuning_setting.imageset/tuning_setting@2x.png
  6. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/tuning_setting.imageset/tuning_setting@3x.png
  7. 6 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/Contents.json
  8. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/metronome_image.imageset/Contents.json
  9. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/metronome_image.imageset/metronome_image@2x.png
  10. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/metronome_image.imageset/metronome_image@3x.png
  11. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/tone_tuning.imageset/Contents.json
  12. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/tone_tuning.imageset/tone_tuning@2x.png
  13. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/tone_tuning.imageset/tone_tuning@3x.png
  14. 1 1
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSWebNavView.m
  15. 1 0
      KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch
  16. 2 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  17. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/SmallToolViewController.h
  18. 66 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/SmallToolViewController.m
  19. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/ToneTuningViewController.h
  20. 78 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/ToneTuningViewController.m
  21. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetBottomButtonView.h
  22. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetBottomButtonView.m
  23. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetBottomButtonView.xib
  24. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetDotView.h
  25. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetDotView.m
  26. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetDotView.xib
  27. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetFunctionView.h
  28. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetFunctionView.m
  29. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetFunctionView.xib
  30. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetNavView.h
  31. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetNavView.m
  32. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetNavView.xib
  33. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetSpeedView.h
  34. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetSpeedView.m
  35. 0 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetSpeedView.xib
  36. 27 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/SmallToolBodyView.h
  37. 77 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/SmallToolBodyView.m
  38. 168 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/SmallToolBodyView.xib
  39. 22 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/toneTuning/TuningNavView.h
  40. 52 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/toneTuning/TuningNavView.m
  41. 92 0
      KulexiuForStudent/KulexiuForStudent/Module/Widget/View/toneTuning/TuningNavView.xib

+ 100 - 52
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -463,16 +463,6 @@
 		BC4CF27428D0285400961C61 /* HomeQualityMusicCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27328D0285400961C61 /* HomeQualityMusicCellView.m */; };
 		BC4CF27628D0285A00961C61 /* HomeQualityMusicCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF27528D0285A00961C61 /* HomeQualityMusicCellView.xib */; };
 		BC4CF28E28D072C000961C61 /* WidgetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF28D28D072C000961C61 /* WidgetViewController.m */; };
-		BC4CF29128D072EF00961C61 /* WidgetNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF29028D072EF00961C61 /* WidgetNavView.m */; };
-		BC4CF29328D072F600961C61 /* WidgetNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF29228D072F600961C61 /* WidgetNavView.xib */; };
-		BC4CF29628D074DC00961C61 /* WidgetDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF29528D074DC00961C61 /* WidgetDotView.m */; };
-		BC4CF29828D074E700961C61 /* WidgetDotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF29728D074E700961C61 /* WidgetDotView.xib */; };
-		BC4CF29B28D0757800961C61 /* WidgetSpeedView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF29A28D0757800961C61 /* WidgetSpeedView.m */; };
-		BC4CF29D28D0758700961C61 /* WidgetSpeedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF29C28D0758700961C61 /* WidgetSpeedView.xib */; };
-		BC4CF2A028D075CC00961C61 /* WidgetFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF29F28D075CC00961C61 /* WidgetFunctionView.m */; };
-		BC4CF2A228D075D400961C61 /* WidgetFunctionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF2A128D075D400961C61 /* WidgetFunctionView.xib */; };
-		BC4CF2A528D1B07800961C61 /* WidgetBottomButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF2A428D1B07800961C61 /* WidgetBottomButtonView.m */; };
-		BC4CF2A728D1B08000961C61 /* WidgetBottomButtonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF2A628D1B08000961C61 /* WidgetBottomButtonView.xib */; };
 		BC50171227FC0D5600F8BCBC /* SubjectChooseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */; };
 		BC50171527FC0D8300F8BCBC /* SubjectChooseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC50171427FC0D8300F8BCBC /* SubjectChooseBodyView.m */; };
 		BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC50171627FC0D8D00F8BCBC /* SubjectChooseBodyView.xib */; };
@@ -934,6 +924,22 @@
 		BCFE54002814E1BE00AD6786 /* HomeVideoGroupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE53FE2814E1BE00AD6786 /* HomeVideoGroupModel.m */; };
 		BCFE540328152A8500AD6786 /* KSOrderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE540228152A8500AD6786 /* KSOrderManager.m */; };
 		BCFE5406281545C600AD6786 /* HomeAlbumModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE5405281545C500AD6786 /* HomeAlbumModel.m */; };
+		BCFEED4D28F7E4720078A2B7 /* SmallToolViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED4C28F7E4720078A2B7 /* SmallToolViewController.m */; };
+		BCFEED5E28F7E4910078A2B7 /* WidgetFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED4F28F7E4910078A2B7 /* WidgetFunctionView.m */; };
+		BCFEED5F28F7E4910078A2B7 /* WidgetNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED5028F7E4910078A2B7 /* WidgetNavView.m */; };
+		BCFEED6028F7E4910078A2B7 /* WidgetSpeedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFEED5128F7E4910078A2B7 /* WidgetSpeedView.xib */; };
+		BCFEED6128F7E4910078A2B7 /* WidgetBottomButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED5228F7E4910078A2B7 /* WidgetBottomButtonView.m */; };
+		BCFEED6228F7E4910078A2B7 /* WidgetDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED5428F7E4910078A2B7 /* WidgetDotView.m */; };
+		BCFEED6328F7E4910078A2B7 /* WidgetNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFEED5528F7E4910078A2B7 /* WidgetNavView.xib */; };
+		BCFEED6428F7E4910078A2B7 /* WidgetFunctionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFEED5628F7E4910078A2B7 /* WidgetFunctionView.xib */; };
+		BCFEED6528F7E4910078A2B7 /* WidgetDotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFEED5728F7E4910078A2B7 /* WidgetDotView.xib */; };
+		BCFEED6628F7E4910078A2B7 /* WidgetSpeedView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED5828F7E4910078A2B7 /* WidgetSpeedView.m */; };
+		BCFEED6728F7E4910078A2B7 /* WidgetBottomButtonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFEED5A28F7E4910078A2B7 /* WidgetBottomButtonView.xib */; };
+		BCFEED6A28F7E4F40078A2B7 /* SmallToolBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED6928F7E4F40078A2B7 /* SmallToolBodyView.m */; };
+		BCFEED6C28F7E51F0078A2B7 /* SmallToolBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFEED6B28F7E51F0078A2B7 /* SmallToolBodyView.xib */; };
+		BCFEED6F28F7E95A0078A2B7 /* ToneTuningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED6E28F7E95A0078A2B7 /* ToneTuningViewController.m */; };
+		BCFEED7328F7F17C0078A2B7 /* TuningNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFEED7228F7F17C0078A2B7 /* TuningNavView.m */; };
+		BCFEED7528F7F1820078A2B7 /* TuningNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCFEED7428F7F1820078A2B7 /* TuningNavView.xib */; };
 		C56C141D9D9D478077F14C1E /* Pods_KulexiuForStudent_KulexiuForStudentUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9C170A749B6C49F17AC3246 /* Pods_KulexiuForStudent_KulexiuForStudentUITests.framework */; };
 /* End PBXBuildFile section */
 
@@ -1800,21 +1806,6 @@
 		BC4CF27528D0285A00961C61 /* HomeQualityMusicCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeQualityMusicCellView.xib; sourceTree = "<group>"; };
 		BC4CF28C28D072C000961C61 /* WidgetViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WidgetViewController.h; sourceTree = "<group>"; };
 		BC4CF28D28D072C000961C61 /* WidgetViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WidgetViewController.m; sourceTree = "<group>"; };
-		BC4CF28F28D072EF00961C61 /* WidgetNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WidgetNavView.h; sourceTree = "<group>"; };
-		BC4CF29028D072EF00961C61 /* WidgetNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WidgetNavView.m; sourceTree = "<group>"; };
-		BC4CF29228D072F600961C61 /* WidgetNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WidgetNavView.xib; sourceTree = "<group>"; };
-		BC4CF29428D074DC00961C61 /* WidgetDotView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WidgetDotView.h; sourceTree = "<group>"; };
-		BC4CF29528D074DC00961C61 /* WidgetDotView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WidgetDotView.m; sourceTree = "<group>"; };
-		BC4CF29728D074E700961C61 /* WidgetDotView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WidgetDotView.xib; sourceTree = "<group>"; };
-		BC4CF29928D0757800961C61 /* WidgetSpeedView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WidgetSpeedView.h; sourceTree = "<group>"; };
-		BC4CF29A28D0757800961C61 /* WidgetSpeedView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WidgetSpeedView.m; sourceTree = "<group>"; };
-		BC4CF29C28D0758700961C61 /* WidgetSpeedView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WidgetSpeedView.xib; sourceTree = "<group>"; };
-		BC4CF29E28D075CC00961C61 /* WidgetFunctionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WidgetFunctionView.h; sourceTree = "<group>"; };
-		BC4CF29F28D075CC00961C61 /* WidgetFunctionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WidgetFunctionView.m; sourceTree = "<group>"; };
-		BC4CF2A128D075D400961C61 /* WidgetFunctionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WidgetFunctionView.xib; sourceTree = "<group>"; };
-		BC4CF2A328D1B07800961C61 /* WidgetBottomButtonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WidgetBottomButtonView.h; sourceTree = "<group>"; };
-		BC4CF2A428D1B07800961C61 /* WidgetBottomButtonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WidgetBottomButtonView.m; sourceTree = "<group>"; };
-		BC4CF2A628D1B08000961C61 /* WidgetBottomButtonView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WidgetBottomButtonView.xib; sourceTree = "<group>"; };
 		BC50171027FC0D5600F8BCBC /* SubjectChooseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseViewController.h; sourceTree = "<group>"; };
 		BC50171127FC0D5600F8BCBC /* SubjectChooseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubjectChooseViewController.m; sourceTree = "<group>"; };
 		BC50171327FC0D8300F8BCBC /* SubjectChooseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubjectChooseBodyView.h; sourceTree = "<group>"; };
@@ -2528,6 +2519,31 @@
 		BCFE540228152A8500AD6786 /* KSOrderManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSOrderManager.m; sourceTree = "<group>"; };
 		BCFE5404281545C500AD6786 /* HomeAlbumModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeAlbumModel.h; sourceTree = "<group>"; };
 		BCFE5405281545C500AD6786 /* HomeAlbumModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeAlbumModel.m; sourceTree = "<group>"; };
+		BCFEED4B28F7E4720078A2B7 /* SmallToolViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SmallToolViewController.h; sourceTree = "<group>"; };
+		BCFEED4C28F7E4720078A2B7 /* SmallToolViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SmallToolViewController.m; sourceTree = "<group>"; };
+		BCFEED4F28F7E4910078A2B7 /* WidgetFunctionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetFunctionView.m; sourceTree = "<group>"; };
+		BCFEED5028F7E4910078A2B7 /* WidgetNavView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetNavView.m; sourceTree = "<group>"; };
+		BCFEED5128F7E4910078A2B7 /* WidgetSpeedView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetSpeedView.xib; sourceTree = "<group>"; };
+		BCFEED5228F7E4910078A2B7 /* WidgetBottomButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetBottomButtonView.m; sourceTree = "<group>"; };
+		BCFEED5328F7E4910078A2B7 /* WidgetSpeedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetSpeedView.h; sourceTree = "<group>"; };
+		BCFEED5428F7E4910078A2B7 /* WidgetDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetDotView.m; sourceTree = "<group>"; };
+		BCFEED5528F7E4910078A2B7 /* WidgetNavView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetNavView.xib; sourceTree = "<group>"; };
+		BCFEED5628F7E4910078A2B7 /* WidgetFunctionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetFunctionView.xib; sourceTree = "<group>"; };
+		BCFEED5728F7E4910078A2B7 /* WidgetDotView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetDotView.xib; sourceTree = "<group>"; };
+		BCFEED5828F7E4910078A2B7 /* WidgetSpeedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WidgetSpeedView.m; sourceTree = "<group>"; };
+		BCFEED5928F7E4910078A2B7 /* WidgetBottomButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetBottomButtonView.h; sourceTree = "<group>"; };
+		BCFEED5A28F7E4910078A2B7 /* WidgetBottomButtonView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WidgetBottomButtonView.xib; sourceTree = "<group>"; };
+		BCFEED5B28F7E4910078A2B7 /* WidgetNavView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetNavView.h; sourceTree = "<group>"; };
+		BCFEED5C28F7E4910078A2B7 /* WidgetFunctionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetFunctionView.h; sourceTree = "<group>"; };
+		BCFEED5D28F7E4910078A2B7 /* WidgetDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WidgetDotView.h; sourceTree = "<group>"; };
+		BCFEED6828F7E4F40078A2B7 /* SmallToolBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SmallToolBodyView.h; sourceTree = "<group>"; };
+		BCFEED6928F7E4F40078A2B7 /* SmallToolBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SmallToolBodyView.m; sourceTree = "<group>"; };
+		BCFEED6B28F7E51F0078A2B7 /* SmallToolBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SmallToolBodyView.xib; sourceTree = "<group>"; };
+		BCFEED6D28F7E95A0078A2B7 /* ToneTuningViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ToneTuningViewController.h; sourceTree = "<group>"; };
+		BCFEED6E28F7E95A0078A2B7 /* ToneTuningViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ToneTuningViewController.m; sourceTree = "<group>"; };
+		BCFEED7128F7F17C0078A2B7 /* TuningNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TuningNavView.h; sourceTree = "<group>"; };
+		BCFEED7228F7F17C0078A2B7 /* TuningNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TuningNavView.m; sourceTree = "<group>"; };
+		BCFEED7428F7F1820078A2B7 /* TuningNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TuningNavView.xib; sourceTree = "<group>"; };
 		C9C170A749B6C49F17AC3246 /* Pods_KulexiuForStudent_KulexiuForStudentUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KulexiuForStudent_KulexiuForStudentUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		D5D730A1D1EC18E5028F1AD7 /* Pods-KulexiuForStudent-KulexiuForStudentUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KulexiuForStudent-KulexiuForStudentUITests.release.xcconfig"; path = "Target Support Files/Pods-KulexiuForStudent-KulexiuForStudentUITests/Pods-KulexiuForStudent-KulexiuForStudentUITests.release.xcconfig"; sourceTree = "<group>"; };
 		DD4D637EF600D0BAE869423D /* Pods_KulexiuForStudentTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KulexiuForStudentTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -4507,8 +4523,12 @@
 		BC4CF28928D058FA00961C61 /* Controller */ = {
 			isa = PBXGroup;
 			children = (
+				BCFEED4B28F7E4720078A2B7 /* SmallToolViewController.h */,
+				BCFEED4C28F7E4720078A2B7 /* SmallToolViewController.m */,
 				BC4CF28C28D072C000961C61 /* WidgetViewController.h */,
 				BC4CF28D28D072C000961C61 /* WidgetViewController.m */,
+				BCFEED6D28F7E95A0078A2B7 /* ToneTuningViewController.h */,
+				BCFEED6E28F7E95A0078A2B7 /* ToneTuningViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -4525,21 +4545,11 @@
 		BC4CF28B28D058FB00961C61 /* View */ = {
 			isa = PBXGroup;
 			children = (
-				BC4CF28F28D072EF00961C61 /* WidgetNavView.h */,
-				BC4CF29028D072EF00961C61 /* WidgetNavView.m */,
-				BC4CF29228D072F600961C61 /* WidgetNavView.xib */,
-				BC4CF29428D074DC00961C61 /* WidgetDotView.h */,
-				BC4CF29528D074DC00961C61 /* WidgetDotView.m */,
-				BC4CF29728D074E700961C61 /* WidgetDotView.xib */,
-				BC4CF29928D0757800961C61 /* WidgetSpeedView.h */,
-				BC4CF29A28D0757800961C61 /* WidgetSpeedView.m */,
-				BC4CF29C28D0758700961C61 /* WidgetSpeedView.xib */,
-				BC4CF29E28D075CC00961C61 /* WidgetFunctionView.h */,
-				BC4CF29F28D075CC00961C61 /* WidgetFunctionView.m */,
-				BC4CF2A128D075D400961C61 /* WidgetFunctionView.xib */,
-				BC4CF2A328D1B07800961C61 /* WidgetBottomButtonView.h */,
-				BC4CF2A428D1B07800961C61 /* WidgetBottomButtonView.m */,
-				BC4CF2A628D1B08000961C61 /* WidgetBottomButtonView.xib */,
+				BCFEED7028F7F16C0078A2B7 /* toneTuning */,
+				BCFEED4E28F7E4910078A2B7 /* Metronome */,
+				BCFEED6828F7E4F40078A2B7 /* SmallToolBodyView.h */,
+				BCFEED6928F7E4F40078A2B7 /* SmallToolBodyView.m */,
+				BCFEED6B28F7E51F0078A2B7 /* SmallToolBodyView.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -6067,6 +6077,38 @@
 			path = TeacherStyle;
 			sourceTree = "<group>";
 		};
+		BCFEED4E28F7E4910078A2B7 /* Metronome */ = {
+			isa = PBXGroup;
+			children = (
+				BCFEED5928F7E4910078A2B7 /* WidgetBottomButtonView.h */,
+				BCFEED5228F7E4910078A2B7 /* WidgetBottomButtonView.m */,
+				BCFEED5A28F7E4910078A2B7 /* WidgetBottomButtonView.xib */,
+				BCFEED5D28F7E4910078A2B7 /* WidgetDotView.h */,
+				BCFEED5428F7E4910078A2B7 /* WidgetDotView.m */,
+				BCFEED5728F7E4910078A2B7 /* WidgetDotView.xib */,
+				BCFEED5C28F7E4910078A2B7 /* WidgetFunctionView.h */,
+				BCFEED4F28F7E4910078A2B7 /* WidgetFunctionView.m */,
+				BCFEED5628F7E4910078A2B7 /* WidgetFunctionView.xib */,
+				BCFEED5B28F7E4910078A2B7 /* WidgetNavView.h */,
+				BCFEED5028F7E4910078A2B7 /* WidgetNavView.m */,
+				BCFEED5528F7E4910078A2B7 /* WidgetNavView.xib */,
+				BCFEED5328F7E4910078A2B7 /* WidgetSpeedView.h */,
+				BCFEED5828F7E4910078A2B7 /* WidgetSpeedView.m */,
+				BCFEED5128F7E4910078A2B7 /* WidgetSpeedView.xib */,
+			);
+			path = Metronome;
+			sourceTree = "<group>";
+		};
+		BCFEED7028F7F16C0078A2B7 /* toneTuning */ = {
+			isa = PBXGroup;
+			children = (
+				BCFEED7128F7F17C0078A2B7 /* TuningNavView.h */,
+				BCFEED7228F7F17C0078A2B7 /* TuningNavView.m */,
+				BCFEED7428F7F1820078A2B7 /* TuningNavView.xib */,
+			);
+			path = toneTuning;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -6182,7 +6224,6 @@
 				BCC583CB28A9EC6400BAB4CF /* cloud_animation_7.png in Resources */,
 				BC71D1052881A2420010F14B /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
 				BC802DBF28BC8E350079E350 /* HomeHotLiveCourseView.xib in Resources */,
-				BC4CF29828D074E700961C61 /* WidgetDotView.xib in Resources */,
 				BC71D15D2887F9DB0010F14B /* launchAni.json in Resources */,
 				275E8AB827E18F8B00DD3F6E /* LaunchScreen.storyboard in Resources */,
 				275FA1EF27E7351900CFEA2E /* KSUpdateAlert.xib in Resources */,
@@ -6201,8 +6242,10 @@
 				BCFE53F22812898700AD6786 /* HomeVideoCourseCell.xib in Resources */,
 				BC71D263288804CD0010F14B /* img_40.png in Resources */,
 				BC71D26E288804CD0010F14B /* img_30.png in Resources */,
+				BCFEED7528F7F1820078A2B7 /* TuningNavView.xib in Resources */,
 				BC71D24F288804CD0010F14B /* img_7.png in Resources */,
 				2723B5BA27F157B100E0B90B /* ChatAddressHeaderView.xib in Resources */,
+				BCFEED6328F7E4910078A2B7 /* WidgetNavView.xib in Resources */,
 				BCC583C228A9EC6400BAB4CF /* cloud_animation_28.png in Resources */,
 				BC802D8728B872B40079E350 /* KSLiveAlertView.xib in Resources */,
 				BC8C2C7F28265D8E00FBA5D5 /* KSNewsAlert.xib in Resources */,
@@ -6210,6 +6253,7 @@
 				BC119235280ED97C00A716F7 /* CourseForLiveCell.xib in Resources */,
 				2723B62E27F157D500E0B90B /* GroupApplyChooseAllCell.xib in Resources */,
 				BCFDA61828BC8FDE0022B497 /* HomeHotLiveCell.xib in Resources */,
+				BCFEED6C28F7E51F0078A2B7 /* SmallToolBodyView.xib in Resources */,
 				BC71D245288804CD0010F14B /* img_38.png in Resources */,
 				BC71D276288804CD0010F14B /* img_22.png in Resources */,
 				BCC583D128A9EC6400BAB4CF /* cloud_animation_2.png in Resources */,
@@ -6221,6 +6265,7 @@
 				BC119258280FA85300A716F7 /* HomeworkListCell.xib in Resources */,
 				BC542E5728409EC900633781 /* InstrumentChooseBottonView.xib in Resources */,
 				BC802DAD28BC6EE40079E350 /* HomeHotTalentView.xib in Resources */,
+				BCFEED6428F7E4910078A2B7 /* WidgetFunctionView.xib in Resources */,
 				2723B63227F157D500E0B90B /* GroupSettingBodyView.xib in Resources */,
 				BCA1136228A3A2D0007FAFB9 /* bassmidi.txt in Resources */,
 				BC71D272288804CD0010F14B /* img_27.png in Resources */,
@@ -6244,10 +6289,10 @@
 				BC11928C280FB44300A716F7 /* HomeworkVideoView.xib in Resources */,
 				BCFDA64D28BCA2000022B497 /* live_animation_1.png in Resources */,
 				BCD457A2286313D70010B493 /* NotiferNavView.xib in Resources */,
-				BC4CF29328D072F600961C61 /* WidgetNavView.xib in Resources */,
 				275E8AB527E18F8B00DD3F6E /* Assets.xcassets in Resources */,
 				BCFDA65028BCA2000022B497 /* live_animation_3.png in Resources */,
 				BC71D252288804CD0010F14B /* img_29.png in Resources */,
+				BCFEED6528F7E4910078A2B7 /* WidgetDotView.xib in Resources */,
 				BC71D24D288804CD0010F14B /* img_12.png in Resources */,
 				BC119275280FB01100A716F7 /* AccompanyHomeworkCell.xib in Resources */,
 				BC71D1022881A2420010F14B /* WeiboSDK.bundle in Resources */,
@@ -6320,6 +6365,7 @@
 				BCFDA65628BCA2000022B497 /* accomapny_animation_1.png in Resources */,
 				2723B66327F15CFC00E0B90B /* ModifyNameBodyView.xib in Resources */,
 				BC71D255288804CD0010F14B /* img_5.png in Resources */,
+				BCFEED6728F7E4910078A2B7 /* WidgetBottomButtonView.xib in Resources */,
 				BCB635B327F6E1A600ACFDCF /* LiveRoomBottomView.xib in Resources */,
 				BCB6348327F6D29600ACFDCF /* LiveSeatApplyView.xib in Resources */,
 				BCFDA65328BCA2000022B497 /* accomapny_animation_3.png in Resources */,
@@ -6347,7 +6393,6 @@
 				BC71D26D288804CD0010F14B /* img_18.png in Resources */,
 				BCB6348127F6D29600ACFDCF /* LiveSeatApplyCell.xib in Resources */,
 				BC8A45A4283DC33400094BBB /* KSCloudSettingView.xib in Resources */,
-				BC4CF2A228D075D400961C61 /* WidgetFunctionView.xib in Resources */,
 				2723B62D27F157D500E0B90B /* GroupApplyMemberCell.xib in Resources */,
 				BCB6347427F6D29600ACFDCF /* BaseEmoji.plist in Resources */,
 				BCB9091928530EA500F5FF69 /* KSShopCardView.xib in Resources */,
@@ -6411,7 +6456,6 @@
 				BCC583BD28A9EC6400BAB4CF /* cloud_animation_25.png in Resources */,
 				BCC583BC28A9EC6400BAB4CF /* cloud_animation_19.png in Resources */,
 				BC8A459F283DC33400094BBB /* SettingPageView.xib in Resources */,
-				BC4CF29D28D0758700961C61 /* WidgetSpeedView.xib in Resources */,
 				BC71D262288804CD0010F14B /* img_54.png in Resources */,
 				BC8C2C5A2823F57100FBA5D5 /* areainfo.json in Resources */,
 				BCFDA64E28BCA2000022B497 /* musicRoom_animation_3.png in Resources */,
@@ -6422,7 +6466,7 @@
 				BC71D24E288804CD0010F14B /* img_16.png in Resources */,
 				27F9033727E87C8B00C08A19 /* MineNavView.xib in Resources */,
 				BC8A45AB283DC33400094BBB /* TrackChooseView.xib in Resources */,
-				BC4CF2A728D1B08000961C61 /* WidgetBottomButtonView.xib in Resources */,
+				BCFEED6028F7E4910078A2B7 /* WidgetSpeedView.xib in Resources */,
 				BCB9FA47286EDCD7005D766B /* KSTipsAlert.xib in Resources */,
 				BCFDA64C28BCA2000022B497 /* live_animation_0.png in Resources */,
 				BC542E40284079E300633781 /* UserAuthBodyView.xib in Resources */,
@@ -6623,6 +6667,7 @@
 				BCFDA66728BDF06E0022B497 /* HomeHotStyleCell.m in Sources */,
 				2779354827E324A60010E277 /* NSObject+ReadDocument.m in Sources */,
 				277935CB27E324A90010E277 /* TAAbstractDotView.m in Sources */,
+				BCFEED6128F7E4910078A2B7 /* WidgetBottomButtonView.m in Sources */,
 				2723B5C627F157B100E0B90B /* GroupListViewCell.m in Sources */,
 				BCB6356E27F6D2A300ACFDCF /* ClassSongMessage.m in Sources */,
 				BCFDA66228BDC3640022B497 /* TalentTeacherModel.m in Sources */,
@@ -6705,6 +6750,7 @@
 				BCB908F12850B08D00F5FF69 /* KSChatMusicShareCell.m in Sources */,
 				BC02381928685087005560CA /* LiveAnimationView.m in Sources */,
 				BC8A45AA283DC33400094BBB /* TrackChooseView.m in Sources */,
+				BCFEED4D28F7E4720078A2B7 /* SmallToolViewController.m in Sources */,
 				BC8A45B2283DC33400094BBB /* CloudFeedbackView.m in Sources */,
 				BCB6355A27F6D2A300ACFDCF /* KSRemoteUserManager.m in Sources */,
 				BC60E3CD287D552800B05441 /* DeleteAccountBodyView.m in Sources */,
@@ -6732,7 +6778,6 @@
 				2723B62C27F157D500E0B90B /* ApplyBottomView.m in Sources */,
 				BC8A4595283DC33400094BBB /* GCDTimer.m in Sources */,
 				BCB6356127F6D2A300ACFDCF /* SongDownloadCallbackMessage.m in Sources */,
-				BC4CF29128D072EF00961C61 /* WidgetNavView.m in Sources */,
 				277935BA27E324A90010E277 /* FSCalendarWeekdayView.m in Sources */,
 				BCB6354427F6D2A300ACFDCF /* RecentSharedView.m in Sources */,
 				2723B66C27F15CFC00E0B90B /* SettingBodyView.m in Sources */,
@@ -6747,6 +6792,7 @@
 				BC8B6DC32856CAE500866917 /* KSICloudManager.m in Sources */,
 				2779359427E324A80010E277 /* TZAssetCell.m in Sources */,
 				BCB635B227F6E1A600ACFDCF /* LiveRoomBottomView.m in Sources */,
+				BCFEED5E28F7E4910078A2B7 /* WidgetFunctionView.m in Sources */,
 				2723B5CE27F157BE00E0B90B /* KSRCloudMediaManager.m in Sources */,
 				BC02381428685064005560CA /* KSLiveEndView.m in Sources */,
 				2779357027E324A70010E277 /* UITextView_Toolbar.m in Sources */,
@@ -6769,6 +6815,7 @@
 				27F9033627E87C8B00C08A19 /* MineNavView.m in Sources */,
 				BC50171527FC0D8300F8BCBC /* SubjectChooseBodyView.m in Sources */,
 				BC8C2C5C2823F57100FBA5D5 /* KSAddressPickerView.m in Sources */,
+				BCFEED7328F7F17C0078A2B7 /* TuningNavView.m in Sources */,
 				2723B62727F157D500E0B90B /* GroupMemberViewController.m in Sources */,
 				BC119216280ED6A900A716F7 /* MyLiveCourseCell.m in Sources */,
 				2779353727E324A60010E277 /* UIImage+Color.m in Sources */,
@@ -6794,7 +6841,6 @@
 				27F9032927E87C2E00C08A19 /* NetworkingCheckController.m in Sources */,
 				BCFE53EC2812897600AD6786 /* HomeLiveCouseCell.m in Sources */,
 				277935A527E324A80010E277 /* MSSBrowseLoadingImageView.m in Sources */,
-				BC4CF29628D074DC00961C61 /* WidgetDotView.m in Sources */,
 				2779353E27E324A60010E277 /* UIDevice+TFDevice.m in Sources */,
 				2723B5C027F157B100E0B90B /* ChatAddressHeaderView.m in Sources */,
 				2723B68127F15D3D00E0B90B /* ModifyNameViewController.m in Sources */,
@@ -6802,6 +6848,7 @@
 				2779358E27E324A80010E277 /* WMPlayerModel.m in Sources */,
 				2779354E27E324A70010E277 /* KSAudioSessionManager.m in Sources */,
 				BC8B6E7D285869B500866917 /* KSUMShareManager.m in Sources */,
+				BCFEED5F28F7E4910078A2B7 /* WidgetNavView.m in Sources */,
 				BC802DAB28BC6EDA0079E350 /* HomeHotTalentView.m in Sources */,
 				BCBFDF41281157340052AFE5 /* HomeButtonView.m in Sources */,
 				2779358127E324A80010E277 /* StateView.m in Sources */,
@@ -6841,7 +6888,6 @@
 				2779359A27E324A80010E277 /* TZPhotoPreviewController.m in Sources */,
 				2779355E27E324A70010E277 /* KSAudioRecordFileManager.m in Sources */,
 				2779357A27E324A70010E277 /* PIckView.m in Sources */,
-				BC4CF29B28D0757800961C61 /* WidgetSpeedView.m in Sources */,
 				BC119234280ED97C00A716F7 /* CourseForLiveCell.m in Sources */,
 				BCB6346027F6D29600ACFDCF /* KSLiveChatroomKickOut.m in Sources */,
 				2779354127E324A60010E277 /* UIView+ShowProgress.m in Sources */,
@@ -6907,6 +6953,7 @@
 				BCB6353A27F6D2A300ACFDCF /* MessageBaseCell.m in Sources */,
 				2779355027E324A70010E277 /* VoDiskCache.m in Sources */,
 				BCB6353F27F6D2A300ACFDCF /* ChatAreaView.m in Sources */,
+				BCFEED6228F7E4910078A2B7 /* WidgetDotView.m in Sources */,
 				BCB6355627F6D2A300ACFDCF /* HTTPUtility.m in Sources */,
 				2779353927E324A60010E277 /* UIView+XIBView.m in Sources */,
 				2779355827E324A70010E277 /* UIImage+Addtions.m in Sources */,
@@ -6941,6 +6988,7 @@
 				BCB6357127F6D2A300ACFDCF /* RTCService.m in Sources */,
 				2723B62427F157D500E0B90B /* NoticeEditBodyView.m in Sources */,
 				BCB6354327F6D2A300ACFDCF /* RecentSharedWhiteboardCell.m in Sources */,
+				BCFEED6628F7E4910078A2B7 /* WidgetSpeedView.m in Sources */,
 				BCFDA65F28BCAEC80022B497 /* HomeInformationBodyView.m in Sources */,
 				BC0D1F71281015B000C5D9E5 /* VideoCourseCell.m in Sources */,
 				2779352F27E324A60010E277 /* UIView+Hints.m in Sources */,
@@ -6984,7 +7032,6 @@
 				277935D327E324A90010E277 /* ALCalendarPicker.m in Sources */,
 				BC542E5828409EC900633781 /* InstrumentChooseCell.m in Sources */,
 				BCB6359427F6D2AB00ACFDCF /* NewClassRoomViewController.m in Sources */,
-				BC4CF2A028D075CC00961C61 /* WidgetFunctionView.m in Sources */,
 				BCFDA62E28BC99410022B497 /* HomeBannerCell.m in Sources */,
 				BCB6356027F6D2A300ACFDCF /* WhiteboardMessage.m in Sources */,
 				2779354F27E324A70010E277 /* VoLRUManager.m in Sources */,
@@ -7067,7 +7114,6 @@
 				BC4CF28E28D072C000961C61 /* WidgetViewController.m in Sources */,
 				BCB6353627F6D2A300ACFDCF /* TimeStampCell.m in Sources */,
 				BCB6354D27F6D2A300ACFDCF /* EmptyView.m in Sources */,
-				BC4CF2A528D1B07800961C61 /* WidgetBottomButtonView.m in Sources */,
 				2723B63327F157D500E0B90B /* ChatComplainBodyView.m in Sources */,
 				2779357927E324A70010E277 /* KSImageButton.m in Sources */,
 				BCD959CC28DB0BAB00B70314 /* KSImageShareViewController.m in Sources */,
@@ -7101,6 +7147,7 @@
 				BCB6353427F6D2A300ACFDCF /* InputBarControl.m in Sources */,
 				BC11922B280ED8E800A716F7 /* CourseNavView.m in Sources */,
 				275FA1DB27E7351900CFEA2E /* UINavigationController+KSNavigationBar.m in Sources */,
+				BCFEED6F28F7E95A0078A2B7 /* ToneTuningViewController.m in Sources */,
 				2779352127E324A60010E277 /* NSMutableAttributedString+CZHExtention.m in Sources */,
 				277935C727E324A90010E277 /* SDCollectionViewCell.m in Sources */,
 				BCB6348627F6D29600ACFDCF /* LiveSeatApplyCell.m in Sources */,
@@ -7147,6 +7194,7 @@
 				2723B63427F157D500E0B90B /* GroupApplyMemberCell.m in Sources */,
 				BC5082B4283345A10031DD0A /* KSChatListCell.m in Sources */,
 				BCB6345D27F6D29600ACFDCF /* KSLiveChatroomWelcome.m in Sources */,
+				BCFEED6A28F7E4F40078A2B7 /* SmallToolBodyView.m in Sources */,
 				2779352927E324A60010E277 /* zhPopupController.m in Sources */,
 				2779359527E324A80010E277 /* TZVideoEditedPreviewController.m in Sources */,
 				2723B63127F157D500E0B90B /* GroupSettingBodyView.m in Sources */,
@@ -7476,7 +7524,7 @@
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/SocialLibraries/Sina/SinaSDK",
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.7;
+				MARKETING_VERSION = 1.4.0;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForStudent;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -7548,7 +7596,7 @@
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/SocialLibraries/Sina/SinaSDK",
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.7;
+				MARKETING_VERSION = 1.4.0;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForStudent;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;

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


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

@@ -110,11 +110,103 @@
             filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "558"
-            endingLineNumber = "558"
-            landmarkName = "-requestHotAlbum"
+            startingLineNumber = "552"
+            endingLineNumber = "552"
+            landmarkName = "-requestNewsList"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "7DBFF699-6450-4D38-A4A5-C6E7115FD5F8"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Chat/View/ChatAddressBodyView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "129"
+            endingLineNumber = "129"
+            landmarkName = "-requestData"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "36EDB858-B943-472A-B904-A4C60B222D3D"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Chat/View/ChatAddressBodyView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "127"
+            endingLineNumber = "127"
+            landmarkName = "-requestData"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "36EDB858-B943-472A-B904-A4C60B222D3D - 8cbd1df76a1d5c0e"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "-[ChatAddressBodyView requestData]"
+                  moduleName = "KulexiuForStudent"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/KulexiuForStudent/Module/Chat/View/ChatAddressBodyView.m"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "127"
+                  endingLineNumber = "127"
+                  offsetFromSymbolStart = "348">
+               </Location>
+               <Location
+                  uuid = "36EDB858-B943-472A-B904-A4C60B222D3D - 1410eff7d7e023ab"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "__34-[ChatAddressBodyView requestData]_block_invoke.33"
+                  moduleName = "KulexiuForStudent"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/KulexiuForStudent/Module/Chat/View/ChatAddressBodyView.m"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "128"
+                  endingLineNumber = "128"
+                  offsetFromSymbolStart = "76">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
+         <BreakpointContent
+            uuid = "B53C8936-0246-4C10-A4ED-11D513BBA445"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            breakpointStackSelectionBehavior = "1"
+            scope = "1"
+            stopOnStyle = "1">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "09C10380-97EA-4BF2-9EA5-659F5FD75E81"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "727"
+            endingLineNumber = "727"
+            landmarkName = "HomeViewController"
+            landmarkType = "3">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

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

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

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


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


+ 6 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/metronome_image.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/metronome_image.imageset/metronome_image@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/metronome_image.imageset/metronome_image@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/tone_tuning.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/tone_tuning.imageset/tone_tuning@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/SmallTool/tone_tuning.imageset/tone_tuning@3x.png


+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/KSWebNavView.m

@@ -35,7 +35,7 @@
         make.bottom.mas_equalTo(self.mas_bottom);
         make.centerX.mas_equalTo(self.mas_centerX);
         make.left.mas_equalTo(self.mas_left).offset(70);
-        make.right.mas_equalTo(self.mas_right).offset(-50);
+        make.right.mas_equalTo(self.mas_right).offset(-70);
         make.height.mas_equalTo(44);
     }];
 }

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

@@ -148,6 +148,7 @@ shouldPrevent = NO; \
 #define SUBMIT_UUID (YES)
 
 // 预生产环境
+
 //#define hostURL (@"https://ponline.colexiu.com")
 //#define SEALCLASSHOST (@"https://ponline.colexiu.com/api-classroom")
 //#define WEBHOST (@"https://ponline.colexiu.com/student")

+ 2 - 2
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m

@@ -65,7 +65,7 @@
 #import "TeacherStyleModel.h"
 #import "HomeTeacherLiveModel.h"
 
-#import "WidgetViewController.h"
+#import "SmallToolViewController.h"
 #import "KSAwardAlertView.h"
 
 #define BUTTONWIDTH (65)
@@ -1000,7 +1000,7 @@
         HomeMessageModel *model = self.buttonArray[index];
         if (![NSString isEmptyString:model.linkUrl]) {
             if ([model.linkUrl isEqualToString:@"native-metronome"]) {
-                WidgetViewController *ctrl = [[WidgetViewController alloc] init];
+                SmallToolViewController *ctrl = [[SmallToolViewController alloc] init];
                 [self.navigationController pushViewController:ctrl animated:YES];
             }
             else {

+ 16 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/SmallToolViewController.h

@@ -0,0 +1,16 @@
+//
+//  SmallToolViewController.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SmallToolViewController : KSBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 66 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/SmallToolViewController.m

@@ -0,0 +1,66 @@
+//
+//  SmallToolViewController.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import "SmallToolViewController.h"
+#import "WidgetViewController.h"
+#import "SmallToolBodyView.h"
+#import "ToneTuningViewController.h"
+@interface SmallToolViewController ()
+
+
+@end
+
+@implementation SmallToolViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"小工具"];
+    [self configUI];
+}
+
+- (void)configUI {
+    SmallToolBodyView *bodyView = [SmallToolBodyView shareInstance];
+    bodyView.frame = CGRectMake(0, 0, KPortraitWidth, KPortraitHeight - kNaviBarHeight);
+    [self.scrollView addSubview:bodyView];
+    
+    MJWeakSelf;
+    [bodyView chooseToolCallback:^(TOOLTYPE type) {
+        [weakSelf chooseToolFunction:type];
+    }];
+}
+
+- (void)chooseToolFunction:(TOOLTYPE)type {
+    switch (type) {
+        case TOOLTYPE_METRONOME:
+        {
+            WidgetViewController *ctrl = [[WidgetViewController alloc] init];
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+            break;
+        case TOOLTYPE_TONE:
+        {
+            ToneTuningViewController *ctrl = [[ToneTuningViewController alloc] init];
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 16 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/ToneTuningViewController.h

@@ -0,0 +1,16 @@
+//
+//  ToneTuningViewController.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ToneTuningViewController : KSBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 78 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/Controller/ToneTuningViewController.m

@@ -0,0 +1,78 @@
+//
+//  ToneTuningViewController.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import "ToneTuningViewController.h"
+#import "TuningNavView.h"
+
+@interface ToneTuningViewController ()
+
+@property (nonatomic, strong) TuningNavView *navView;
+
+@end
+
+@implementation ToneTuningViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.ks_prefersNavigationBarHidden = YES;
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    CAGradientLayer *layer = [self createGradientLayerFromColor:HexRGB(0x1D2027) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0x17181C) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, KPortraitWidth - 32, 114)];
+    layer.cornerRadius = 14.0f;
+    layer.masksToBounds = YES;
+    [self.view.layer addSublayer:layer];
+    
+    [self.view addSubview:self.navView];
+    
+    
+}
+
+- (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;
+}
+
+- (TuningNavView *)navView {
+    if (!_navView) {
+        _navView = [TuningNavView shareInstance];
+        MJWeakSelf;
+        [_navView navActionCallback:^(BOOL isBack) {
+            if (isBack) {
+                [weakSelf backAction];
+            }
+            else {
+                [weakSelf showSettingView];
+            }
+        }];
+    }
+    return _navView;
+}
+
+- (void)showSettingView {
+    
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetBottomButtonView.h → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetBottomButtonView.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetBottomButtonView.m → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetBottomButtonView.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetBottomButtonView.xib → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetBottomButtonView.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetDotView.h → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetDotView.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetDotView.m → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetDotView.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetDotView.xib → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetDotView.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetFunctionView.h → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetFunctionView.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetFunctionView.m → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetFunctionView.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetFunctionView.xib → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetFunctionView.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetNavView.h → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetNavView.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetNavView.m → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetNavView.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetNavView.xib → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetNavView.xib


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetSpeedView.h → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetSpeedView.h


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetSpeedView.m → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetSpeedView.m


+ 0 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/WidgetSpeedView.xib → KulexiuForStudent/KulexiuForStudent/Module/Widget/View/Metronome/WidgetSpeedView.xib


+ 27 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/SmallToolBodyView.h

@@ -0,0 +1,27 @@
+//
+//  SmallToolBodyView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, TOOLTYPE) {
+    TOOLTYPE_METRONOME, // 节拍器
+    TOOLTYPE_TONE,      // 调音器
+};
+
+typedef void(^ToolFunctionCallback)(TOOLTYPE type);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SmallToolBodyView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)chooseToolCallback:(ToolFunctionCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 77 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/SmallToolBodyView.m

@@ -0,0 +1,77 @@
+//
+//  SmallToolBodyView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/13.
+//
+
+#import "SmallToolBodyView.h"
+
+@interface SmallToolBodyView ()
+
+@property (weak, nonatomic) IBOutlet UIView *metrnomeBgView;
+
+@property (weak, nonatomic) IBOutlet UIView *toneBgView;
+
+@property (nonatomic, copy) ToolFunctionCallback callback;
+
+@end
+
+@implementation SmallToolBodyView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    CAGradientLayer *layer = [self createGradientLayerFromColor:HexRGB(0xACFBEC) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0x7FEED9) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, KPortraitWidth - 32, 114)];
+    layer.cornerRadius = 14.0f;
+    layer.masksToBounds = YES;
+    [self.metrnomeBgView.layer addSublayer:layer];
+    
+    CAGradientLayer *colorLayer = [self createGradientLayerFromColor:HexRGB(0xE2D5FF) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0xCAB2FF) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, KPortraitWidth - 32, 114)];
+    colorLayer.cornerRadius = 14.0f;
+    colorLayer.masksToBounds = YES;
+    [self.toneBgView.layer addSublayer:colorLayer];
+}
+
++ (instancetype)shareInstance {
+    SmallToolBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"SmallToolBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)chooseToolCallback:(ToolFunctionCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)chooseMetronome:(id)sender {
+    if (self.callback) {
+        self.callback(TOOLTYPE_METRONOME);
+    }
+}
+
+- (IBAction)chooseTone:(id)sender {
+    if (self.callback) {
+        self.callback(TOOLTYPE_TONE);
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+- (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;
+}
+
+
+@end

+ 168 - 0
KulexiuForStudent/KulexiuForStudent/Module/Widget/View/SmallToolBodyView.xib

@@ -0,0 +1,168 @@
+<?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="SmallToolBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="390" height="536"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7pE-lf-Zsa">
+                    <rect key="frame" x="16" y="18" width="358" height="114"/>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <gestureRecognizers/>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KbL-Cl-bwO">
+                    <rect key="frame" x="16" y="18" width="358" height="114"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="节拍器" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mOb-C9-ek9">
+                            <rect key="frame" x="24" y="24" width="62" height="28"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="28" id="4cy-JE-o1v"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="20"/>
+                            <color key="textColor" red="0.0" green="0.42745098039215684" blue="0.34509803921568627" 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="fYi-C4-Nd8">
+                            <rect key="frame" x="24" y="58" width="128.66666666666666" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="d06-5s-M0F"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.0" green="0.42745098040000001" blue="0.34509803919999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="metronome_image" translatesAutoresizingMaskIntoConstraints="NO" id="Bog-1X-TMf">
+                            <rect key="frame" x="226" y="0.0" width="132" height="114"/>
+                            <constraints>
+                                <constraint firstAttribute="width" secondItem="Bog-1X-TMf" secondAttribute="height" multiplier="22:19" id="geJ-Gg-GV4"/>
+                            </constraints>
+                        </imageView>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="Bog-1X-TMf" secondAttribute="bottom" id="2U1-Ni-Bfu"/>
+                        <constraint firstAttribute="height" constant="114" id="3WE-5U-XPW"/>
+                        <constraint firstItem="mOb-C9-ek9" firstAttribute="top" secondItem="KbL-Cl-bwO" secondAttribute="top" constant="24" id="5IG-oq-ltv"/>
+                        <constraint firstAttribute="trailing" secondItem="Bog-1X-TMf" secondAttribute="trailing" id="CNH-J8-5wM"/>
+                        <constraint firstItem="mOb-C9-ek9" firstAttribute="leading" secondItem="KbL-Cl-bwO" secondAttribute="leading" constant="24" id="WUi-Xk-CB6"/>
+                        <constraint firstItem="fYi-C4-Nd8" firstAttribute="leading" secondItem="mOb-C9-ek9" secondAttribute="leading" id="phj-Lx-O0p"/>
+                        <constraint firstItem="Bog-1X-TMf" firstAttribute="top" secondItem="KbL-Cl-bwO" secondAttribute="top" id="qwC-c0-eGn"/>
+                        <constraint firstItem="fYi-C4-Nd8" firstAttribute="top" secondItem="mOb-C9-ek9" secondAttribute="bottom" constant="6" id="vaN-vB-Gwk"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="14"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <outletCollection property="gestureRecognizers" destination="9vs-gn-bTj" appends="YES" id="wzz-JZ-nwz"/>
+                    </connections>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6Es-PT-RKh">
+                    <rect key="frame" x="16" y="148" width="358" height="114"/>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <gestureRecognizers/>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Usm-eK-CbE">
+                    <rect key="frame" x="16" y="148" width="358" height="114"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="调音器" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="a3D-R7-hIK">
+                            <rect key="frame" x="24" y="24" width="62" height="28"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="28" id="H7M-N6-557"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="20"/>
+                            <color key="textColor" red="0.42352941176470588" green="0.0" blue="0.76470588235294112" 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="n9K-wq-FY7">
+                            <rect key="frame" x="24" y="58" width="128.66666666666666" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="laX-31-CM7"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.42352941176470588" green="0.0" blue="0.76470588235294112" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tone_tuning" translatesAutoresizingMaskIntoConstraints="NO" id="tri-rT-zBB">
+                            <rect key="frame" x="226" y="0.0" width="132" height="114"/>
+                            <constraints>
+                                <constraint firstAttribute="width" secondItem="tri-rT-zBB" secondAttribute="height" multiplier="22:19" id="SY7-Or-Rqy"/>
+                            </constraints>
+                        </imageView>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="n9K-wq-FY7" firstAttribute="leading" secondItem="a3D-R7-hIK" secondAttribute="leading" id="3vQ-bM-igo"/>
+                        <constraint firstItem="tri-rT-zBB" firstAttribute="top" secondItem="Usm-eK-CbE" secondAttribute="top" id="KCv-Cp-h9E"/>
+                        <constraint firstItem="a3D-R7-hIK" firstAttribute="top" secondItem="Usm-eK-CbE" secondAttribute="top" constant="24" id="QGE-gc-JwY"/>
+                        <constraint firstItem="n9K-wq-FY7" firstAttribute="top" secondItem="a3D-R7-hIK" secondAttribute="bottom" constant="6" id="Rwh-yq-iaI"/>
+                        <constraint firstAttribute="bottom" secondItem="tri-rT-zBB" secondAttribute="bottom" id="hFh-0A-ete"/>
+                        <constraint firstAttribute="height" constant="114" id="jJn-LN-WQj"/>
+                        <constraint firstItem="a3D-R7-hIK" firstAttribute="leading" secondItem="Usm-eK-CbE" secondAttribute="leading" constant="24" id="t1c-0J-O2x"/>
+                        <constraint firstAttribute="trailing" secondItem="tri-rT-zBB" secondAttribute="trailing" id="y7r-SW-qnQ"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="14"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <outletCollection property="gestureRecognizers" destination="g8h-7k-sbT" appends="YES" id="5CR-UR-wvj"/>
+                    </connections>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="0.97254901960784312" green="0.97647058823529409" blue="0.9882352941176471" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="6Es-PT-RKh" firstAttribute="top" secondItem="Usm-eK-CbE" secondAttribute="top" id="6dg-GT-Ksh"/>
+                <constraint firstItem="7pE-lf-Zsa" firstAttribute="bottom" secondItem="KbL-Cl-bwO" secondAttribute="bottom" id="GP7-dl-p1G"/>
+                <constraint firstItem="6Es-PT-RKh" firstAttribute="bottom" secondItem="Usm-eK-CbE" secondAttribute="bottom" id="HsQ-Jp-7lQ"/>
+                <constraint firstItem="7pE-lf-Zsa" firstAttribute="trailing" secondItem="KbL-Cl-bwO" secondAttribute="trailing" id="KLk-JI-yy5"/>
+                <constraint firstItem="Usm-eK-CbE" firstAttribute="top" secondItem="KbL-Cl-bwO" secondAttribute="bottom" constant="16" id="NNX-2g-AL1"/>
+                <constraint firstItem="KbL-Cl-bwO" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="18" id="Q2d-d9-jkt"/>
+                <constraint firstItem="7pE-lf-Zsa" firstAttribute="leading" secondItem="KbL-Cl-bwO" secondAttribute="leading" id="SX4-zW-u40"/>
+                <constraint firstItem="6Es-PT-RKh" firstAttribute="leading" secondItem="Usm-eK-CbE" secondAttribute="leading" id="UVc-oT-i8l"/>
+                <constraint firstItem="7pE-lf-Zsa" firstAttribute="top" secondItem="KbL-Cl-bwO" secondAttribute="top" id="eIY-He-vXn"/>
+                <constraint firstItem="KbL-Cl-bwO" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="16" id="kZn-jQ-9OT"/>
+                <constraint firstItem="Usm-eK-CbE" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="16" id="nNg-ul-d1k"/>
+                <constraint firstAttribute="trailing" secondItem="KbL-Cl-bwO" secondAttribute="trailing" constant="16" id="r6T-3q-ibo"/>
+                <constraint firstAttribute="trailing" secondItem="Usm-eK-CbE" secondAttribute="trailing" constant="16" id="vZr-Ku-Vfw"/>
+                <constraint firstItem="6Es-PT-RKh" firstAttribute="trailing" secondItem="Usm-eK-CbE" secondAttribute="trailing" id="xtt-yt-JZo"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="metrnomeBgView" destination="7pE-lf-Zsa" id="6s3-XW-LSJ"/>
+                <outlet property="toneBgView" destination="6Es-PT-RKh" id="TbE-VR-gNn"/>
+            </connections>
+            <point key="canvasLocation" x="87.692307692307693" y="68.957345971563981"/>
+        </view>
+        <tapGestureRecognizer id="9vs-gn-bTj">
+            <connections>
+                <action selector="chooseMetronome:" destination="iN0-l3-epB" id="rdo-OF-fwD"/>
+            </connections>
+        </tapGestureRecognizer>
+        <tapGestureRecognizer id="g8h-7k-sbT">
+            <connections>
+                <action selector="chooseTone:" destination="iN0-l3-epB" id="ueq-cr-tj7"/>
+            </connections>
+        </tapGestureRecognizer>
+    </objects>
+    <resources>
+        <image name="metronome_image" width="132" height="114"/>
+        <image name="tone_tuning" width="132" height="114"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/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
KulexiuForStudent/KulexiuForStudent/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
KulexiuForStudent/KulexiuForStudent/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>