Browse Source

Merge branch 'develop' into configuration

# Conflicts:
#	KulexiuForTeacher/KulexiuForTeacher/Common/Define/KSDomain.h
#	KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj
Steven 1 year ago
parent
commit
9ab613080f
22 changed files with 351 additions and 221 deletions
  1. 5 13
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 1 1
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcshareddata/xcschemes/KulexiuForTeacher.xcscheme
  3. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down.imageset/sort_down@2x.png
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down.imageset/sort_down@3x.png
  5. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/aboutUs_icon.imageset/Contents.json
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/aboutUs_icon.imageset/aboutUs_icon@2x.png
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/aboutUs_icon.imageset/aboutUs_icon@3x.png
  8. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/check_detailImage.imageset/Contents.json
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/check_detailImage.imageset/check_detailImage@2x.png
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/check_detailImage.imageset/check_detailImage@3x.png
  11. 12 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSAccompanyWebViewController.m
  12. 3 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m
  13. 8 12
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSVideoRecordManager.m
  14. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Define/KSDomain.h
  15. 13 4
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/AboutUsViewController.m
  16. 4 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/AboutUsBodyView.h
  17. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/AboutUsBodyView.m
  18. 93 37
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/AboutUsBodyView.xib
  19. 12 6
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/NewWhiteboard/KSNewWhiteBoard.m
  20. 9 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Controller/ToneTuningViewController.m
  21. 10 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Model/TuningFunction/Tuner.swift
  22. 138 146
      KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj

+ 5 - 13
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -1231,10 +1231,6 @@
 		BCF61BEC28042D1A0000ACFE /* InstrumentMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF61BEB28042D1A0000ACFE /* InstrumentMessageModel.m */; };
 		BCF61BEF28042F9B0000ACFE /* InstrumentChooseBottonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF61BEE28042F9B0000ACFE /* InstrumentChooseBottonView.m */; };
 		BCF61BF128042FA90000ACFE /* InstrumentChooseBottonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCF61BF028042FA90000ACFE /* InstrumentChooseBottonView.xib */; };
-		BCF880EB2B91C70C0007B8F0 /* Config-dev.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = BCF880EA2B91C70C0007B8F0 /* Config-dev.xcconfig */; };
-		BCF880ED2B91C7200007B8F0 /* Config-test.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = BCF880EC2B91C7200007B8F0 /* Config-test.xcconfig */; };
-		BCF880EF2B91C7310007B8F0 /* Config-debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = BCF880EE2B91C7310007B8F0 /* Config-debug.xcconfig */; };
-		BCF880F22B91C7580007B8F0 /* Config-release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = BCF880F12B91C7580007B8F0 /* Config-release.xcconfig */; };
 		BCFE540928168DFF00AD6786 /* KSButtonStatusView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE540828168DFF00AD6786 /* KSButtonStatusView.m */; };
 		BCFE541028178FF600AD6786 /* MyIncomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE540F28178FF600AD6786 /* MyIncomeViewController.m */; };
 		BCFE54142817918600AD6786 /* MyIncomeListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE54122817918600AD6786 /* MyIncomeListCell.m */; };
@@ -8089,7 +8085,7 @@
 			isa = PBXProject;
 			attributes = {
 				BuildIndependentTargetsInParallel = 1;
-				LastUpgradeCheck = 1500;
+				LastUpgradeCheck = 1520;
 				TargetAttributes = {
 					275E8A6327E18F2300DD3F6E = {
 						CreatedOnToolsVersion = 13.2.1;
@@ -8276,7 +8272,6 @@
 				BC14E4812AB2EE5F000C4983 /* UnbindBottomView.xib in Resources */,
 				BCDB093F2805C0EF00D0BDAD /* NewClassPopCell.xib in Resources */,
 				BC56C97D2923A3FD00AF301F /* CoursewareAlertCell.xib in Resources */,
-				BCF880EB2B91C70C0007B8F0 /* Config-dev.xcconfig in Resources */,
 				BCAD01C22872F5560002CC40 /* LiveVideoListView.xib in Resources */,
 				275E3DE927F4679E0010EC30 /* LiveRoomHeadView.xib in Resources */,
 				BC6BEAA3288A4C2A00022109 /* KSHomeButton.xib in Resources */,
@@ -8286,7 +8281,6 @@
 				27D83F4E27F3EC2100062476 /* CreateLiveBodyView.xib in Resources */,
 				BC5756B328B600A3002302D8 /* HomeAuthAlertView.xib in Resources */,
 				BCF425F42AB9782A00BCD942 /* MineDescView.xib in Resources */,
-				BCF880EF2B91C7310007B8F0 /* Config-debug.xcconfig in Resources */,
 				BC31BF8F2B219C5700F7D538 /* TuningForkSettingView.xib in Resources */,
 				BCEA75282819103B00886A86 /* UnbindBodyView.xib in Resources */,
 				BC8B6E602856ED0600866917 /* WeiboSDK.bundle in Resources */,
@@ -8351,7 +8345,6 @@
 				BC14E48E2AB2FBCD000C4983 /* TenantUnbindDetailBodyView.xib in Resources */,
 				BC513E7E28A4D874003F58C4 /* live_animation.json in Resources */,
 				BC106BA32A8F45AA000759A9 /* TXLiveRoomHeadView.xib in Resources */,
-				BCF880ED2B91C7200007B8F0 /* Config-test.xcconfig in Resources */,
 				BCC408DA2AFCE0D700C60249 /* VideoCropImageViewCell.xib in Resources */,
 				27D83F5927F4225D00062476 /* LivePreviewBodyView.xib in Resources */,
 				BC41104A2806706800800BD9 /* HomeworkListCell.xib in Resources */,
@@ -8469,7 +8462,6 @@
 				BCA724002806AEA000DA0D0D /* AccompanyHomeworkCell.xib in Resources */,
 				BC7CFFD22817FF6D00CAEB21 /* CardDisplayView.xib in Resources */,
 				BC2456E5286BE86600D1F7C0 /* MineStyleEmptyView.xib in Resources */,
-				BCF880F22B91C7580007B8F0 /* Config-release.xcconfig in Resources */,
 				27F9CB0127EC3D42003E0FE4 /* GroupListViewCell.xib in Resources */,
 				BCDE358A2897B48E00A9A560 /* shareImage@2x.png in Resources */,
 				BC8B6E582856ED0600866917 /* UMSocialSDKResources.bundle in Resources */,
@@ -9600,7 +9592,7 @@
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForTeacher/KulexiuForTeacher.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1.5.8;
+				CURRENT_PROJECT_VERSION = 1.6.1;
 				DEVELOPMENT_TEAM = B2AP53HHTU;
 				ENABLE_BITCODE = NO;
 				ENABLE_MODULE_VERIFIER = YES;
@@ -9646,7 +9638,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.5.8;
+				MARKETING_VERSION = 1.6.0;
 				MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
 				MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++17";
 				OTHER_LDFLAGS = (
@@ -9779,7 +9771,7 @@
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = KulexiuForTeacher/KulexiuForTeacher.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1.5.8;
+				CURRENT_PROJECT_VERSION = 1.6.1;
 				DEVELOPMENT_TEAM = B2AP53HHTU;
 				ENABLE_BITCODE = NO;
 				ENABLE_MODULE_VERIFIER = YES;
@@ -9825,7 +9817,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.5.8;
+				MARKETING_VERSION = 1.6.0;
 				MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
 				MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++17";
 				OTHER_LDFLAGS = (

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcshareddata/xcschemes/KulexiuForTeacher.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1500"
+   LastUpgradeVersion = "1520"
    version = "1.7">
    <BuildAction
       parallelizeBuildables = "YES"

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down.imageset/sort_down@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down.imageset/sort_down@3x.png


+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down.imageset/Contents.json → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/aboutUs_icon.imageset/Contents.json

@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "sort_down@2x.png",
+      "filename" : "aboutUs_icon@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "sort_down@3x.png",
+      "filename" : "aboutUs_icon@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/aboutUs_icon.imageset/aboutUs_icon@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/aboutUs_icon.imageset/aboutUs_icon@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/check_detailImage.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/check_detailImage.imageset/check_detailImage@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/check_detailImage.imageset/check_detailImage@3x.png


+ 12 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSAccompanyWebViewController.m

@@ -129,6 +129,9 @@
     if (_playerEngine) {
         [self stopPlayAction];
     }
+    if (_musicPlayer) {
+        [self stopMp3Player];
+    }
 }
 
 - (void)resumeAudioSession {
@@ -462,6 +465,15 @@
         // 返回不保存视频
         [self ignorRecordVideo];
         [self freeMp3Player];
+        [self removeTuner];
+    }
+}
+
+- (void)removeTuner {
+    if (_tuner) {
+        [_tuner freeTuner];
+        _tuner = nil;
+        NSLog(@"--- free tuner ");
     }
 }
 

+ 3 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSBaseWKWebViewController.m

@@ -1078,6 +1078,9 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
                 completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
             }
         }
+        else {
+            completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
+        }
     });
 }
 

+ 8 - 12
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSVideoRecordManager.m

@@ -81,7 +81,10 @@
     // 设置YES 播放web伴奏会导致打断
     _captureSession.automaticallyConfiguresApplicationAudioSession = NO;
     // 初始化会话对象
-    if ([_captureSession canSetSessionPreset:AVCaptureSessionPresetInputPriority]) {
+    if ([_captureSession canSetSessionPreset:AVCaptureSessionPresetiFrame1280x720]) {
+        _captureSession.sessionPreset = AVCaptureSessionPresetiFrame1280x720;
+    }
+    else if ([_captureSession canSetSessionPreset:AVCaptureSessionPresetInputPriority]) {
         _captureSession.sessionPreset = AVCaptureSessionPresetInputPriority;
     }
     NSError *error = nil;
@@ -239,10 +242,12 @@
 }
 
 - (void)stopRecord {
-    if (_captureMovieFileOutput) {
+    if (_captureMovieFileOutput && _isRecording) {
         [self.captureMovieFileOutput stopRecording];
     }
-    [self resetSession];
+    else {
+        [self resetSession];
+    }
 }
 
 
@@ -305,15 +310,6 @@
     }
     NSLog(@"录制结束");
     _isRecording = NO;
-    if (_isChangeSession == NO) {
-        @weakObj(self);
-        dispatch_async(self.videoRecordQueue, ^{
-            @strongObj(self);
-            if (self.captureSession.running) {
-                [self.captureSession stopRunning];
-            }
-        });
-    }
 
     // 暂时存储文件地址
     self.videoFileURL = outputFileURL;

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Define/KSDomain.h

@@ -15,6 +15,7 @@
 #define WEBPATH (@"/teacher")
 
 #define FILE_DOMAIN (@"klx/")
+
 // 接口
 #define hostURL ([NSString stringWithFormat:@"https://%@",REQUEST_DOMAIN])
 // 网络教室

+ 13 - 4
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/Controller/AboutUsViewController.m

@@ -41,13 +41,22 @@
 }
 
 - (void)configUI {
+    [self.scrollView removeFromSuperview];
     _bodyView = [AboutUsBodyView shareInstance];
-    [self.scrollView addSubview:_bodyView];
+    [self.view addSubview:_bodyView];
     [_bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.mas_equalTo(self.scrollView.mas_top);
-        make.right.left.mas_equalTo(self.view);
-        make.height.mas_equalTo(kScreenHeight - kNaviBarHeight - iPhoneXSafeBottomMargin);
+        make.top.left.right.bottom.mas_equalTo(self.view);
     }];
+    
+    MJWeakSelf;
+    [_bodyView showCheckLink:^{
+        [weakSelf showCheckLink];
+    }];
+}
+
+- (void)showCheckLink {
+    // 外部浏览器打开
+    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://beian.miit.gov.cn/"] options: @{} completionHandler: nil];
 }
 /*
 #pragma mark - Navigation

+ 4 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/AboutUsBodyView.h

@@ -7,6 +7,8 @@
 
 #import <UIKit/UIKit.h>
 
+typedef void(^DisplayCheckLinkCallback)(void);
+
 NS_ASSUME_NONNULL_BEGIN
 
 @interface AboutUsBodyView : UIView
@@ -15,6 +17,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)configPhone:(NSString *)phone email:(NSString *)email;
 
+- (void)showCheckLink:(DisplayCheckLinkCallback)callback;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/AboutUsBodyView.m

@@ -13,6 +13,11 @@
 @property (weak, nonatomic) IBOutlet UILabel *phoneLabel;
 @property (weak, nonatomic) IBOutlet UILabel *emailLabel;
 
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomSpace;
+
+@property (nonatomic, copy) DisplayCheckLinkCallback callback;
+
+
 @end
 
 @implementation AboutUsBodyView
@@ -22,6 +27,8 @@
     self.versionLabel.text = [NSString stringWithFormat:@"版本号%@",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]];
     self.phoneLabel.text = @"15347100733";
     self.emailLabel.text = @"klx@kulexiu999.onexmail.com";
+    self.bottomSpace.constant = 6 + iPhoneXSafeBottomMargin;
+
 }
 
 - (void)configPhone:(NSString *)phone email:(NSString *)email {
@@ -34,6 +41,17 @@
     return view;
 }
 
+
+- (void)showCheckLink:(DisplayCheckLinkCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+- (IBAction)openWebView:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 93 - 37
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Setting/View/AboutUsBodyView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -14,46 +14,46 @@
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QYL-JY-4ew">
-                    <rect key="frame" x="14" y="15" width="386" height="300"/>
+                    <rect key="frame" x="0.0" y="0.0" width="414" height="372"/>
                     <subviews>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="klx_logo" translatesAutoresizingMaskIntoConstraints="NO" id="cTa-D0-od4">
-                            <rect key="frame" x="125.5" y="42" width="135" height="40"/>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="aboutUs_icon" translatesAutoresizingMaskIntoConstraints="NO" id="cTa-D0-od4">
+                            <rect key="frame" x="137" y="42" width="140" height="140"/>
                         </imageView>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="版本号:1.0.0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7sa-Ud-PzI">
-                            <rect key="frame" x="149.5" y="93" width="87" height="20"/>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="版本号:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7sa-Ud-PzI">
+                            <rect key="frame" x="182" y="195" width="50.5" height="20"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="20" id="Va0-Ci-tdX"/>
                             </constraints>
                             <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                            <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <color key="textColor" red="0.54509803921568623" green="0.54509803921568623" blue="0.54509803921568623" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Llz-E9-UuO">
-                            <rect key="frame" x="0.0" y="245" width="386" height="50"/>
+                            <rect key="frame" x="0.0" y="307" width="414" height="60"/>
                             <subviews>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="E-mail" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zan-am-t8E">
-                                    <rect key="frame" x="16" y="15" width="75" height="20"/>
+                                    <rect key="frame" x="16" y="20" width="75" height="20"/>
                                     <constraints>
                                         <constraint firstAttribute="width" constant="75" id="aKh-78-34y"/>
                                     </constraints>
                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                    <color key="textColor" red="0.070588235294117646" green="0.074509803921568626" blue="0.078431372549019607" 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="cnn-JH-ETQ">
-                                    <rect key="frame" x="370" y="14" width="0.0" height="22"/>
+                                    <rect key="frame" x="398" y="19" width="0.0" height="22"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="22" id="fnZ-IC-1WB"/>
                                     </constraints>
                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                    <color key="textColor" red="0.54509803921568623" green="0.54509803921568623" blue="0.54509803921568623" alpha="1" colorSpace="calibratedRGB"/>
                                     <nil key="highlightedColor"/>
                                 </label>
                             </subviews>
                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
                                 <constraint firstItem="zan-am-t8E" firstAttribute="centerY" secondItem="Llz-E9-UuO" secondAttribute="centerY" id="J0e-zN-IpI"/>
-                                <constraint firstAttribute="height" constant="50" id="M1m-bo-gOH"/>
+                                <constraint firstAttribute="height" constant="60" id="M1m-bo-gOH"/>
                                 <constraint firstItem="cnn-JH-ETQ" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="zan-am-t8E" secondAttribute="trailing" constant="12" id="W4N-Kb-gpR"/>
                                 <constraint firstItem="zan-am-t8E" firstAttribute="leading" secondItem="Llz-E9-UuO" secondAttribute="leading" constant="16" id="XIq-kX-qbY"/>
                                 <constraint firstItem="cnn-JH-ETQ" firstAttribute="centerY" secondItem="Llz-E9-UuO" secondAttribute="centerY" id="xyz-wD-GMm"/>
@@ -61,28 +61,28 @@
                             </constraints>
                         </view>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ebq-nd-C8r">
-                            <rect key="frame" x="0.0" y="195" width="386" height="50"/>
+                            <rect key="frame" x="0.0" y="247" width="414" height="60"/>
                             <subviews>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="客服电话" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sAj-jF-RYu">
-                                    <rect key="frame" x="16" y="15" width="75" height="20"/>
+                                    <rect key="frame" x="16" y="20" width="75" height="20"/>
                                     <constraints>
                                         <constraint firstAttribute="width" constant="75" id="jJi-zT-p8P"/>
                                     </constraints>
                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                    <color key="textColor" red="0.070588235294117646" green="0.074509803921568626" blue="0.078431372549019607" 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="v4W-Tc-Z7P">
-                                    <rect key="frame" x="370" y="14" width="0.0" height="22"/>
+                                    <rect key="frame" x="398" y="19" width="0.0" height="22"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="22" id="YZF-fi-TdF"/>
                                     </constraints>
                                     <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                    <color key="textColor" red="0.54509803921568623" green="0.54509803921568623" blue="0.54509803921568623" alpha="1" colorSpace="calibratedRGB"/>
                                     <nil key="highlightedColor"/>
                                 </label>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uiK-CI-oZC">
-                                    <rect key="frame" x="10" y="49" width="366" height="1"/>
+                                    <rect key="frame" x="10" y="59" width="394" height="1"/>
                                     <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="1" id="g81-iD-VDo"/>
@@ -98,7 +98,7 @@
                                 <constraint firstAttribute="trailing" secondItem="v4W-Tc-Z7P" secondAttribute="trailing" constant="16" id="Of5-H2-upH"/>
                                 <constraint firstItem="sAj-jF-RYu" firstAttribute="leading" secondItem="Ebq-nd-C8r" secondAttribute="leading" constant="16" id="k9H-YA-caI"/>
                                 <constraint firstItem="uiK-CI-oZC" firstAttribute="leading" secondItem="Ebq-nd-C8r" secondAttribute="leading" constant="10" id="kNb-qR-XQk"/>
-                                <constraint firstAttribute="height" constant="50" id="lTh-2Z-bZ3"/>
+                                <constraint firstAttribute="height" constant="60" id="lTh-2Z-bZ3"/>
                                 <constraint firstAttribute="bottom" secondItem="uiK-CI-oZC" secondAttribute="bottom" id="s3I-hR-ozV"/>
                             </constraints>
                         </view>
@@ -106,13 +106,13 @@
                     <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="trailing" secondItem="Ebq-nd-C8r" secondAttribute="trailing" id="1th-5I-09q"/>
-                        <constraint firstAttribute="height" constant="300" id="2SY-FP-iDP"/>
                         <constraint firstItem="Ebq-nd-C8r" firstAttribute="leading" secondItem="QYL-JY-4ew" secondAttribute="leading" id="52M-Sm-2KK"/>
+                        <constraint firstItem="Ebq-nd-C8r" firstAttribute="top" secondItem="7sa-Ud-PzI" secondAttribute="bottom" constant="32" id="5Ba-C7-JFP"/>
                         <constraint firstItem="cTa-D0-od4" firstAttribute="centerX" secondItem="QYL-JY-4ew" secondAttribute="centerX" id="DgL-EJ-qaz"/>
                         <constraint firstItem="7sa-Ud-PzI" firstAttribute="centerX" secondItem="QYL-JY-4ew" secondAttribute="centerX" id="W98-HT-q2L"/>
                         <constraint firstItem="Llz-E9-UuO" firstAttribute="leading" secondItem="QYL-JY-4ew" secondAttribute="leading" id="e3f-KG-5gm"/>
                         <constraint firstAttribute="bottom" secondItem="Llz-E9-UuO" secondAttribute="bottom" constant="5" id="if4-hy-JZQ"/>
-                        <constraint firstItem="7sa-Ud-PzI" firstAttribute="top" secondItem="cTa-D0-od4" secondAttribute="bottom" constant="11" id="kLn-bC-hAy"/>
+                        <constraint firstItem="7sa-Ud-PzI" firstAttribute="top" secondItem="cTa-D0-od4" secondAttribute="bottom" constant="13" id="kLn-bC-hAy"/>
                         <constraint firstItem="cTa-D0-od4" firstAttribute="top" secondItem="QYL-JY-4ew" secondAttribute="top" constant="42" id="lKG-gx-cGs"/>
                         <constraint firstItem="Llz-E9-UuO" firstAttribute="top" secondItem="Ebq-nd-C8r" secondAttribute="bottom" id="s33-ak-GIU"/>
                         <constraint firstAttribute="trailing" secondItem="Llz-E9-UuO" secondAttribute="trailing" id="xlh-Lh-IXX"/>
@@ -123,36 +123,92 @@
                         </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                 </view>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="22H-v9-w8r">
-                    <rect key="frame" x="50" y="335" width="314" height="29"/>
-                    <string key="text">Copyright©2021-2022
-酷乐秀 colexiu.com 版权所有</string>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Copyright@2021-2024|酷乐秀 colexiu.com 版权所有" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RCe-Qt-jJF">
+                    <rect key="frame" x="39" y="836" width="303" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="5DR-Vo-3dI"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.69803921570000005" green="0.69803921570000005" blue="0.69803921570000005" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="网络安全等级保护备案号:42010043158-24001" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wc3-bW-281">
+                    <rect key="frame" x="39" y="816" width="303" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="bNI-MK-Ex8"/>
+                    </constraints>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <color key="textColor" red="0.69803921570000005" green="0.69803921570000005" blue="0.69803921570000005" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="增值电信业务经营许可证:鄂B2-20231246" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mye-MS-osg">
+                    <rect key="frame" x="39" y="796" width="303" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="3gq-Hl-6Uf"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.69803921570000005" green="0.69803921570000005" blue="0.69803921570000005" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ICP备案号:鄂ICP备2021020787号-5A" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="elj-Xx-PAq">
+                    <rect key="frame" x="39" y="776" width="224.5" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="5OE-CL-tuc"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.69803921570000005" green="0.69803921570000005" blue="0.69803921570000005" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="check_detailImage" translatesAutoresizingMaskIntoConstraints="NO" id="IWT-MF-wFV">
+                    <rect key="frame" x="267.5" y="781" width="5" height="10"/>
+                </imageView>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w51-GE-XJy">
+                    <rect key="frame" x="39" y="766" width="233.5" height="40"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="40" id="XxL-EW-OBv"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <connections>
+                        <action selector="openWebView:" destination="iN0-l3-epB" eventType="touchUpInside" id="kPi-zL-ueU"/>
+                    </connections>
+                </button>
             </subviews>
-            <color key="backgroundColor" red="0.96470588235294119" green="0.97254901960784312" blue="0.97647058823529409" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
-                <constraint firstItem="QYL-JY-4ew" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="15" id="6Se-bm-pwg"/>
-                <constraint firstItem="QYL-JY-4ew" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="FG5-oZ-Yh6"/>
-                <constraint firstItem="22H-v9-w8r" firstAttribute="top" secondItem="QYL-JY-4ew" secondAttribute="bottom" constant="20" id="ILu-zg-1dG"/>
-                <constraint firstAttribute="trailing" secondItem="QYL-JY-4ew" secondAttribute="trailing" constant="14" id="JEg-YC-TgD"/>
-                <constraint firstItem="22H-v9-w8r" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="50" id="lMW-TZ-D4t"/>
-                <constraint firstAttribute="trailing" secondItem="22H-v9-w8r" secondAttribute="trailing" constant="50" id="waq-zt-aic"/>
+                <constraint firstItem="wc3-bW-281" firstAttribute="leading" secondItem="Mye-MS-osg" secondAttribute="leading" id="29t-lA-OdR"/>
+                <constraint firstItem="Mye-MS-osg" firstAttribute="leading" secondItem="elj-Xx-PAq" secondAttribute="leading" id="3fh-cN-mHb"/>
+                <constraint firstAttribute="bottom" secondItem="RCe-Qt-jJF" secondAttribute="bottom" constant="40" id="3kr-YL-98f"/>
+                <constraint firstItem="QYL-JY-4ew" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="6Se-bm-pwg"/>
+                <constraint firstItem="elj-Xx-PAq" firstAttribute="leading" secondItem="w51-GE-XJy" secondAttribute="leading" id="9ca-J5-vpM"/>
+                <constraint firstItem="Mye-MS-osg" firstAttribute="top" secondItem="elj-Xx-PAq" secondAttribute="bottom" id="Cam-br-Qpj"/>
+                <constraint firstItem="wc3-bW-281" firstAttribute="top" secondItem="Mye-MS-osg" secondAttribute="bottom" id="D3r-0A-fjG"/>
+                <constraint firstItem="QYL-JY-4ew" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="FG5-oZ-Yh6"/>
+                <constraint firstItem="RCe-Qt-jJF" firstAttribute="top" secondItem="wc3-bW-281" secondAttribute="bottom" id="IJa-Yn-y4o"/>
+                <constraint firstItem="RCe-Qt-jJF" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="39" id="IKa-cz-GH3"/>
+                <constraint firstAttribute="trailing" secondItem="QYL-JY-4ew" secondAttribute="trailing" id="JEg-YC-TgD"/>
+                <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="RCe-Qt-jJF" secondAttribute="trailing" constant="15" id="OXD-19-s0w"/>
+                <constraint firstItem="IWT-MF-wFV" firstAttribute="trailing" secondItem="w51-GE-XJy" secondAttribute="trailing" id="PXo-KK-oKP"/>
+                <constraint firstItem="wc3-bW-281" firstAttribute="trailing" secondItem="Mye-MS-osg" secondAttribute="trailing" id="WKz-db-YKz"/>
+                <constraint firstItem="RCe-Qt-jJF" firstAttribute="leading" secondItem="wc3-bW-281" secondAttribute="leading" id="aZk-aK-JZI"/>
+                <constraint firstItem="IWT-MF-wFV" firstAttribute="leading" secondItem="elj-Xx-PAq" secondAttribute="trailing" constant="4" id="abb-6m-5lU"/>
+                <constraint firstItem="RCe-Qt-jJF" firstAttribute="trailing" secondItem="wc3-bW-281" secondAttribute="trailing" id="adO-nv-VSb"/>
+                <constraint firstItem="elj-Xx-PAq" firstAttribute="centerY" secondItem="IWT-MF-wFV" secondAttribute="centerY" id="oZu-8U-9d5"/>
+                <constraint firstItem="elj-Xx-PAq" firstAttribute="centerY" secondItem="w51-GE-XJy" secondAttribute="centerY" id="zLk-dc-8Bg"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
+                <outlet property="bottomSpace" destination="3kr-YL-98f" id="0WP-mA-PBD"/>
                 <outlet property="emailLabel" destination="cnn-JH-ETQ" id="Tw7-E2-9rc"/>
                 <outlet property="phoneLabel" destination="v4W-Tc-Z7P" id="8Ny-d5-rLd"/>
                 <outlet property="versionLabel" destination="7sa-Ud-PzI" id="qhk-vt-cRf"/>
             </connections>
-            <point key="canvasLocation" x="132" y="79"/>
+            <point key="canvasLocation" x="131.8840579710145" y="78.348214285714278"/>
         </view>
     </objects>
     <resources>
-        <image name="klx_logo" width="135" height="40"/>
+        <image name="aboutUs_icon" width="140" height="140"/>
+        <image name="check_detailImage" width="5" height="10"/>
     </resources>
 </document>

+ 12 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/NewWhiteboard/KSNewWhiteBoard.m

@@ -247,14 +247,20 @@
 
 - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *_Nullable))completionHandler
 {
-    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
-        if (challenge.previousFailureCount == 0) {
-            NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
-            completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
-        } else {
+    dispatch_queue_t queue =  dispatch_queue_create("webViewChallengeQueue", NULL);
+    dispatch_async(queue, ^{
+        if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
+            if (challenge.previousFailureCount == 0) {
+                NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
+                completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
+            } else {
+                completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
+            }
+        }
+        else {
             completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
         }
-    }
+    });
 }
 #pragma mark - WKScriptMessageHandler
 - (void)userContentController:(WKUserContentController *)userContentController

+ 9 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Controller/ToneTuningViewController.m

@@ -159,6 +159,7 @@ static float correctTime = 0.5;
     BOOL isBack = [self isViewPopDismiss];
     if (isBack) {
         [METRONOME_MANAGER stopPlay];
+        [self removeTuner];
     }
 }
 
@@ -176,6 +177,14 @@ static float correctTime = 0.5;
     }
 }
 
+- (void)removeTuner {
+    if (_tuner) {
+        [_tuner freeTuner];
+        _tuner = nil;
+        NSLog(@"--- free tuner ");
+    }
+}
+
 - (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];

+ 10 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Widget/Model/TuningFunction/Tuner.swift

@@ -182,6 +182,16 @@ private let frequencies: [Float] = [
         engine!.stop()
     }
     
+    @objc public func freeTuner() {
+        microphone!.stop()
+        pitchTap!.stop()
+        engine!.stop()
+        microphone = nil
+        pitchTap = nil
+        silence = nil
+        engine = nil
+    }
+    
     func tap_handler(freq: [Float], amp: [Float]) -> Void {
         // Reduces sensitivity to background noise to prevent random / fluctuating data.
         guard amp[0] > 0.1 else { return }

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


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