Jelajahi Sumber

Merge branch 'master' of http://39.96.8.150:10080/l405023944/LenzSDK_iOS

思立蓝科技 1 tahun lalu
induk
melakukan
d925150273
94 mengubah file dengan 3749 tambahan dan 796 penghapusan
  1. 8 0
      .idea/.gitignore
  2. 8 0
      .idea/LenzSDK.iml
  3. 8 0
      .idea/LenzSDK_iOS.iml
  4. 8 0
      .idea/modules.xml
  5. 19 0
      .idea/php.xml
  6. 6 0
      .idea/vcs.xml
  7. 4 4
      Example/LenzCameraNativeModuleForRN.xcodeproj/project.pbxproj
  8. 88 0
      Example/LenzCameraNativeModuleForRN.xcodeproj/xcshareddata/xcschemes/LenzCameraNativeModuleForRN_Example.xcscheme
  9. 6 4
      Example/LenzCameraNativeModuleForRN/LENZViewController.m
  10. 3 0
      Example/LenzCameraNativeModuleForRN/LenzCameraNativeModuleForRN-Info.plist
  11. 2 2
      Example/Podfile.lock
  12. 0 1
      Example/Pods/Headers/Private/LenzSDK/AVCapturePhotoOutput+VersionAdaptor.h
  13. 1 1
      Example/Pods/Headers/Private/LenzSDK/CameraManager.h
  14. 1 0
      Example/Pods/Headers/Private/LenzSDK/PCSDeviceOrientationManager.h
  15. 0 1
      Example/Pods/Headers/Private/LenzSDK/PCSSessionWrapper.h
  16. 0 1
      Example/Pods/Headers/Private/LenzSDK/TensorFlowWrapper.h
  17. 1 0
      Example/Pods/Headers/Private/LenzSDK/UIImage+ImageRotate.h
  18. 0 1
      Example/Pods/Headers/Private/LenzSDK/cpp-headers.h
  19. 7 4
      Example/Pods/Local Podspecs/LenzSDK.podspec.json
  20. 2 2
      Example/Pods/Manifest.lock
  21. 354 359
      Example/Pods/Pods.xcodeproj/project.pbxproj
  22. 1 1
      Example/Pods/Target Support Files/LenzSDK/ResourceBundle-LenzCameraNativeModuleForRN-LenzSDK-Info.plist
  23. 1 1
      Example/Pods/Target Support Files/Pods-LenzCameraNativeModuleForRN_Example/Pods-LenzCameraNativeModuleForRN_Example.debug.xcconfig
  24. 1 1
      Example/Pods/Target Support Files/Pods-LenzCameraNativeModuleForRN_Example/Pods-LenzCameraNativeModuleForRN_Example.release.xcconfig
  25. 3 0
      LenzCameraNativeModuleForRN/Classes/headers/LenzSDKConstant.h
  26. 1 0
      LenzCameraNativeModuleForRN/Classes/inner/DB/DBModels/LenzCachedResourceModel.h
  27. 5 5
      LenzCameraNativeModuleForRN/Classes/inner/DB/LenzDataManager.m
  28. 2 2
      LenzCameraNativeModuleForRN/Classes/inner/Manager/CameraManager.h
  29. 51 11
      LenzCameraNativeModuleForRN/Classes/inner/Manager/CameraManager.m
  30. 44 0
      LenzCameraNativeModuleForRN/Classes/inner/Manager/PCSDeviceOrientationManager.h
  31. 102 0
      LenzCameraNativeModuleForRN/Classes/inner/Manager/PCSDeviceOrientationManager.m
  32. 0 21
      LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeAIPanorama.m
  33. 7 5
      LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeMovie.m
  34. 3 0
      LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeVideoBase.h
  35. 39 30
      LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeVideoBase.m
  36. 1 1
      LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSBaseViewController.h
  37. 570 85
      LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSBaseViewController.m
  38. 107 11
      LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSPreviewViewController.m
  39. 0 28
      LenzCameraNativeModuleForRN/Classes/inner/PCSSessionWrapper.h
  40. 0 13
      LenzCameraNativeModuleForRN/Classes/inner/PCSSessionWrapper.m
  41. 1 0
      LenzCameraNativeModuleForRN/Classes/inner/UI/Label/TimerLabel.m
  42. 14 1
      LenzCameraNativeModuleForRN/Classes/inner/UI/ModeListView/PCSModeList.m
  43. 11 8
      LenzCameraNativeModuleForRN/Classes/inner/UI/PCSAutherView.m
  44. 9 4
      LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaGuideView/PanoramaGuideView.h
  45. 509 167
      LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaGuideView/PanoramaGuideView.m
  46. 4 1
      LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaOrientaionView/PanoramaOrientationView.h
  47. 8 7
      LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaOrientaionView/PanoramaOrientationView.m
  48. 18 0
      LenzCameraNativeModuleForRN/Classes/inner/UI/UIView+tool/UIImage+ImageRotate.h
  49. 56 0
      LenzCameraNativeModuleForRN/Classes/inner/UI/UIView+tool/UIImage+ImageRotate.m
  50. 8 8
      LenzCameraNativeModuleForRN/Classes/inner/VC.storyboard
  51. 2 2
      LenzSDK.podspec
  52. 47 0
      LenzSDK/2.0.3/LenzSDK.podspec
  53. 47 0
      LenzSDK/2.0.4/LenzSDK.podspec
  54. 47 0
      LenzSDK/2.0.5/LenzSDK.podspec
  55. 47 0
      LenzSDK/2.0.6/LenzSDK.podspec
  56. 47 0
      LenzSDK/2.0.7/LenzSDK.podspec
  57. 47 0
      LenzSDK/2.0.8/LenzSDK.podspec
  58. 47 0
      LenzSDK/2.0.9/LenzSDK.podspec
  59. 47 0
      LenzSDK/2.1.0/LenzSDK.podspec
  60. 47 0
      LenzSDK/2.2.0/LenzSDK.podspec
  61. 47 0
      LenzSDK/2.2.1/LenzSDK.podspec
  62. 47 0
      LenzSDK/2.2.10/LenzSDK.podspec
  63. 47 0
      LenzSDK/2.2.11/LenzSDK.podspec
  64. 47 0
      LenzSDK/2.2.2/LenzSDK.podspec
  65. 47 0
      LenzSDK/2.2.3/LenzSDK.podspec
  66. 47 0
      LenzSDK/2.2.5/LenzSDK.podspec
  67. 47 0
      LenzSDK/2.2.6/LenzSDK.podspec
  68. 47 0
      LenzSDK/2.2.7/LenzSDK.podspec
  69. 47 0
      LenzSDK/2.2.8/LenzSDK.podspec
  70. 47 0
      LenzSDK/2.2.9/LenzSDK.podspec
  71. 47 0
      LenzSDK/2.3.0/LenzSDK.podspec
  72. 47 0
      LenzSDK/2.3.1/LenzSDK.podspec
  73. 47 0
      LenzSDK/2.3.10/LenzSDK.podspec
  74. 47 0
      LenzSDK/2.3.2/LenzSDK.podspec
  75. 47 0
      LenzSDK/2.3.3/LenzSDK.podspec
  76. 47 0
      LenzSDK/2.3.4/LenzSDK.podspec
  77. 47 0
      LenzSDK/2.3.5/LenzSDK.podspec
  78. 47 0
      LenzSDK/2.3.6/LenzSDK.podspec
  79. 47 0
      LenzSDK/2.3.7/LenzSDK.podspec
  80. 47 0
      LenzSDK/2.3.8/LenzSDK.podspec
  81. 47 0
      LenzSDK/2.3.9/LenzSDK.podspec
  82. 47 0
      LenzSDK_iOS.podspec
  83. 2 0
      LenzStitchSDK.framework/Headers/lenz_stitch_jni.hpp
  84. 138 0
      LenzStitchSDK.framework/Headers/lenz_stitcher.hpp
  85. TEMPAT SAMPAH
      LenzStitchSDK.framework/LenzStitchSDK
  86. TEMPAT SAMPAH
      LenzStitchSDK.framework/_CodeSignature/CodeDirectory
  87. TEMPAT SAMPAH
      LenzStitchSDK.framework/_CodeSignature/CodeRequirements-1
  88. 18 3
      LenzStitchSDK.framework/_CodeSignature/CodeResources
  89. TEMPAT SAMPAH
      LenzStitchSDK.framework/_CodeSignature/CodeSignature
  90. TEMPAT SAMPAH
      LenzTensorFlowSDK.framework/LenzTensorFlowSDK
  91. TEMPAT SAMPAH
      LenzTensorFlowSDK.framework/_CodeSignature/CodeDirectory
  92. TEMPAT SAMPAH
      LenzTensorFlowSDK.framework/_CodeSignature/CodeRequirements-1
  93. 30 0
      LenzTensorFlowSDK.framework/_CodeSignature/CodeResources
  94. TEMPAT SAMPAH
      LenzTensorFlowSDK.framework/_CodeSignature/CodeSignature

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 8 - 0
.idea/LenzSDK.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 8 - 0
.idea/LenzSDK_iOS.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/LenzSDK.iml" filepath="$PROJECT_DIR$/.idea/LenzSDK.iml" />
+    </modules>
+  </component>
+</project>

+ 19 - 0
.idea/php.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MessDetectorOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCSFixerOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCodeSnifferOptionsConfiguration">
+    <option name="highlightLevel" value="WARNING" />
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PhpStanOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PsalmOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 4 - 4
Example/LenzCameraNativeModuleForRN.xcodeproj/project.pbxproj

@@ -414,7 +414,7 @@
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
-				ONLY_ACTIVE_ARCH = NO;
+				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
@@ -465,8 +465,8 @@
 				INFOPLIST_FILE = "LenzCameraNativeModuleForRN/LenzCameraNativeModuleForRN-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MODULE_NAME = ExampleApp;
-				ONLY_ACTIVE_ARCH = NO;
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
+				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.demo.1111;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;
@@ -485,7 +485,7 @@
 				INFOPLIST_FILE = "LenzCameraNativeModuleForRN/LenzCameraNativeModuleForRN-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MODULE_NAME = ExampleApp;
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
+				PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.demo.1111;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_VERSION = 4.0;
 				WRAPPER_EXTENSION = app;

+ 88 - 0
Example/LenzCameraNativeModuleForRN.xcodeproj/xcshareddata/xcschemes/LenzCameraNativeModuleForRN_Example.xcscheme

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1420"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "6003F589195388D20070C39A"
+               BuildableName = "LenzCameraNativeModuleForRN_Example.app"
+               BlueprintName = "LenzCameraNativeModuleForRN_Example"
+               ReferencedContainer = "container:LenzCameraNativeModuleForRN.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "6003F5AD195388D20070C39A"
+               BuildableName = "LenzCameraNativeModuleForRN_Tests.xctest"
+               BlueprintName = "LenzCameraNativeModuleForRN_Tests"
+               ReferencedContainer = "container:LenzCameraNativeModuleForRN.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "6003F589195388D20070C39A"
+            BuildableName = "LenzCameraNativeModuleForRN_Example.app"
+            BlueprintName = "LenzCameraNativeModuleForRN_Example"
+            ReferencedContainer = "container:LenzCameraNativeModuleForRN.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "6003F589195388D20070C39A"
+            BuildableName = "LenzCameraNativeModuleForRN_Example.app"
+            BlueprintName = "LenzCameraNativeModuleForRN_Example"
+            ReferencedContainer = "container:LenzCameraNativeModuleForRN.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 6 - 4
Example/LenzCameraNativeModuleForRN/LENZViewController.m

@@ -99,11 +99,13 @@
     self.textView.text = nil;
     NSMutableDictionary *dict = [NSMutableDictionary dictionary];
     dict[@"dataRetainedMode"] = @"retain";
-    NSArray *array = @[@{@"flashMode": @"auto", @"isRemake":@(1),@"mode":@"continuous", @"quality":@(100),@"type":@"back"  },
-    @{@"flashMode": @"auto", @"isRemake":@(1),@"mode":@"single", @"quality":@(100),@"type":@"back"  },
-    @{@"flashMode": @"auto", @"isRemake":@(1),@"mode":@"video", @"quality":@(100),@"type":@"back", @"videoQuality":@(1080)},
+    NSArray *array = @[
+    @{@"flashMode": @"auto", @"isRemake":@(0),@"mode":@"continuous", @"quality":@(100),@"type":@"back"  },
+    @{@"flashMode": @"auto", @"isRemake":@(0),@"mode":@"single", @"quality":@(100),@"type":@"back"  },
+    @{@"flashMode": @"auto", @"isRemake":@(1),@"mode":@"video", @"quality":@(100),@"type":@"back", @"videoQuality":@(480)},
     @{@"flashMode": @"auto", @"isRemake":@(1),@"mode":@"panorama", @"quality":@(100),@"type":@"back", @"videoQuality":@(1080)},
-    @{@"flashMode": @"auto", @"isRemake":@(1),@"mode":@"panoramaPlus", @"quality":@(100),@"type":@"back", @"videoQuality":@(480)}];
+    @{@"flashMode": @"auto", @"isRemake":@(1),@"mode":@"panoramaPlus", @"quality":@(100),@"type":@"back", @"videoQuality":@(480)}
+    ];
     
     
     dict[@"cameraMode"] = array;

+ 3 - 0
Example/LenzCameraNativeModuleForRN/LenzCameraNativeModuleForRN-Info.plist

@@ -41,6 +41,9 @@
 	<key>UISupportedInterfaceOrientations</key>
 	<array>
 		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
 	<key>UISupportedInterfaceOrientations~ipad</key>
 	<array>

+ 2 - 2
Example/Podfile.lock

@@ -1,5 +1,5 @@
 PODS:
-  - LenzSDK (2.0.0):
+  - LenzSDK (2.3.2):
     - Masonry (= 1.1.0)
     - OpenCV2 (~> 4.3.0)
     - SVProgressHUD (~> 2.2.5)
@@ -27,7 +27,7 @@ EXTERNAL SOURCES:
     :path: "../"
 
 SPEC CHECKSUMS:
-  LenzSDK: e7a4797dfdbd6e488154732cc420fc99e039303a
+  LenzSDK: b4f646beafcf1e367274c023918e2fb5c4305f78
   Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
   OpenCV2: ffe82e5cb5d16dc3fc01a5f4127b9a5b3cfc7d1b
   SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6

+ 0 - 1
Example/Pods/Headers/Private/LenzSDK/AVCapturePhotoOutput+VersionAdaptor.h

@@ -1 +0,0 @@
-../../../../../LenzCameraNativeModuleForRN/Classes/inner/Exts/AVCapturePhotoOutput+VersionAdaptor.h

+ 1 - 1
Example/Pods/Headers/Private/LenzSDK/CameraManager.h

@@ -1 +1 @@
-../../../../../LenzCameraNativeModuleForRN/Classes/inner/CameraManager/CameraManager.h
+../../../../../LenzCameraNativeModuleForRN/Classes/inner/Manager/CameraManager.h

+ 1 - 0
Example/Pods/Headers/Private/LenzSDK/PCSDeviceOrientationManager.h

@@ -0,0 +1 @@
+../../../../../LenzCameraNativeModuleForRN/Classes/inner/Manager/PCSDeviceOrientationManager.h

+ 0 - 1
Example/Pods/Headers/Private/LenzSDK/PCSSessionWrapper.h

@@ -1 +0,0 @@
-../../../../../LenzCameraNativeModuleForRN/Classes/inner/PCSSessionWrapper.h

+ 0 - 1
Example/Pods/Headers/Private/LenzSDK/TensorFlowWrapper.h

@@ -1 +0,0 @@
-../../../../../LenzCameraNativeModuleForRN/Classes/inner/TensorFlow/TensorFlowWrapper.h

+ 1 - 0
Example/Pods/Headers/Private/LenzSDK/UIImage+ImageRotate.h

@@ -0,0 +1 @@
+../../../../../LenzCameraNativeModuleForRN/Classes/inner/UI/UIView+tool/UIImage+ImageRotate.h

+ 0 - 1
Example/Pods/Headers/Private/LenzSDK/cpp-headers.h

@@ -1 +0,0 @@
-../../../../../LenzCameraNativeModuleForRN/Classes/inner/cpp-headers.h

+ 7 - 4
Example/Pods/Local Podspecs/LenzSDK.podspec.json

@@ -1,6 +1,6 @@
 {
   "name": "LenzSDK",
-  "version": "2.0.0",
+  "version": "2.3.2",
   "summary": "A short description of LenzSDK.",
   "description": "this  is the long description",
   "homepage": "http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git",
@@ -13,10 +13,10 @@
   },
   "source": {
     "git": "http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git",
-    "tag": "2.0.0"
+    "tag": "2.3.2"
   },
   "platforms": {
-    "ios": "11.0"
+    "ios": "12.0"
   },
   "source_files": "LenzCameraNativeModuleForRN/Classes/**/*",
   "resource_bundles": {
@@ -43,7 +43,10 @@
     "AVFoundation",
     "CoreMedia"
   ],
-  "vendored_frameworks": "LenzStitchSDK.framework",
+  "vendored_frameworks": [
+    "LenzTensorFlowSDK.framework",
+    "LenzStitchSDK.framework"
+  ],
   "libraries": [
     "c++",
     "z"

+ 2 - 2
Example/Pods/Manifest.lock

@@ -1,5 +1,5 @@
 PODS:
-  - LenzSDK (2.0.0):
+  - LenzSDK (2.3.2):
     - Masonry (= 1.1.0)
     - OpenCV2 (~> 4.3.0)
     - SVProgressHUD (~> 2.2.5)
@@ -27,7 +27,7 @@ EXTERNAL SOURCES:
     :path: "../"
 
 SPEC CHECKSUMS:
-  LenzSDK: e7a4797dfdbd6e488154732cc420fc99e039303a
+  LenzSDK: b4f646beafcf1e367274c023918e2fb5c4305f78
   Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
   OpenCV2: ffe82e5cb5d16dc3fc01a5f4127b9a5b3cfc7d1b
   SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6

File diff ditekan karena terlalu besar
+ 354 - 359
Example/Pods/Pods.xcodeproj/project.pbxproj


+ 1 - 1
Example/Pods/Target Support Files/LenzSDK/ResourceBundle-LenzCameraNativeModuleForRN-LenzSDK-Info.plist

@@ -13,7 +13,7 @@
   <key>CFBundlePackageType</key>
   <string>BNDL</string>
   <key>CFBundleShortVersionString</key>
-  <string>2.0.0</string>
+  <string>2.3.2</string>
   <key>CFBundleSignature</key>
   <string>????</string>
   <key>CFBundleVersion</key>

+ 1 - 1
Example/Pods/Target Support Files/Pods-LenzCameraNativeModuleForRN_Example/Pods-LenzCameraNativeModuleForRN_Example.debug.xcconfig

@@ -3,7 +3,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../.." "${PODS_ROOT}/OpenCV2
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/LenzSDK" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/YYText" '${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework/Headers'
 LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LenzSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/YYText"
-OTHER_LDFLAGS = $(inherited) -L ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework -ObjC -l"LenzSDK" -l"Masonry" -l"SVProgressHUD" -l"YYText" -l"c++" -l"stdc++" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "AssetsLibrary" -framework "CoreData" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Foundation" -framework "LenzStitchSDK" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "Photos" -framework "QuartzCore" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -framework "opencv2" -framework "tensorflow_lite" -force_load ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework/tensorflow_lite
+OTHER_LDFLAGS = $(inherited) -L ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework -ObjC -l"LenzSDK" -l"Masonry" -l"SVProgressHUD" -l"YYText" -l"c++" -l"stdc++" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "AssetsLibrary" -framework "CoreData" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Foundation" -framework "LenzStitchSDK" -framework "LenzTensorFlowSDK" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "Photos" -framework "QuartzCore" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -framework "opencv2" -framework "tensorflow_lite" -force_load ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework/tensorflow_lite
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 1 - 1
Example/Pods/Target Support Files/Pods-LenzCameraNativeModuleForRN_Example/Pods-LenzCameraNativeModuleForRN_Example.release.xcconfig

@@ -3,7 +3,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../.." "${PODS_ROOT}/OpenCV2
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/LenzSDK" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/YYText" '${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework/Headers'
 LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LenzSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/YYText"
-OTHER_LDFLAGS = $(inherited) -L ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework -ObjC -l"LenzSDK" -l"Masonry" -l"SVProgressHUD" -l"YYText" -l"c++" -l"stdc++" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "AssetsLibrary" -framework "CoreData" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Foundation" -framework "LenzStitchSDK" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "Photos" -framework "QuartzCore" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -framework "opencv2" -framework "tensorflow_lite" -force_load ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework/tensorflow_lite
+OTHER_LDFLAGS = $(inherited) -L ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework -ObjC -l"LenzSDK" -l"Masonry" -l"SVProgressHUD" -l"YYText" -l"c++" -l"stdc++" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "AssetsLibrary" -framework "CoreData" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Foundation" -framework "LenzStitchSDK" -framework "LenzTensorFlowSDK" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "Photos" -framework "QuartzCore" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -framework "opencv2" -framework "tensorflow_lite" -force_load ${SRCROOT}/Pods/TensorFlowLite/Frameworks/tensorflow_lite.framework/tensorflow_lite
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 3 - 0
LenzCameraNativeModuleForRN/Classes/headers/LenzSDKConstant.h

@@ -25,6 +25,9 @@ typedef enum SDKCaptureModeIndex {
     SDK_CAPTURE_MODE_PANORAMA,
     /// 智能全景
     SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA,
+    ///
+    SDK_CAPTURE_MODE_UNKNOW,
+
 } SDKCaptureModeIndex;
 
 typedef enum SDKDataRetainedModeIndex{

+ 1 - 0
LenzCameraNativeModuleForRN/Classes/inner/DB/DBModels/LenzCachedResourceModel.h

@@ -26,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic) BOOL isRemake;
 @property (nonatomic) SDKCaptureModeIndex mode;
 @property (nonatomic) UIImage *image;
+@property (nonatomic) UIImage *previewImage;
 @property (nonatomic) NSMutableArray *keyFrame;
 @property (nonatomic) BOOL isStitch;
 

+ 5 - 5
LenzCameraNativeModuleForRN/Classes/inner/DB/LenzDataManager.m

@@ -77,31 +77,31 @@ NSString *const LenFileDirectoryAiPanoramaPath = @"/aiPanorama/";
 + (NSString *)singlePath {
     NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
     NSString *key = [NSString stringWithFormat:@"%.0f", timeInterval];
-    return [[LenzDataManager singleDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",key]];
+    return [[LenzDataManager singleDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"i_single_%@.jpg",key]];
 }
 
 + (NSString *)continuousPath {
     NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
     NSString *key = [NSString stringWithFormat:@"%.0f", timeInterval];
-    return [[LenzDataManager continuousDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",key]];
+    return [[LenzDataManager continuousDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"i_continuous_%@.jpg",key]];
 }
 
 + (NSString *)panoramPath {
     NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
     NSString *key = [NSString stringWithFormat:@"%.0f", timeInterval];
-    return [[LenzDataManager panoramsDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",key]];
+    return [[LenzDataManager panoramsDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"i_panorama_%@.jpg",key]];
 }
 
 + (NSString *)aiPanoramPath {
     NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
     NSString *key = [NSString stringWithFormat:@"%.0f", timeInterval];
-    return [[LenzDataManager aiPanoramsDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",key]];
+    return [[LenzDataManager aiPanoramsDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"i_panoramaPlus_%@.jpg",key]];
 }
 
 + (NSString *)moviePath {
     NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
     NSString *key = [NSString stringWithFormat:@"%.0f", timeInterval];
-    return [[LenzDataManager movieDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mov",key]];
+    return [[LenzDataManager movieDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"i_video_%@.mov",key]];
 }
 
 

+ 2 - 2
LenzCameraNativeModuleForRN/Classes/inner/CameraManager/CameraManager.h → LenzCameraNativeModuleForRN/Classes/inner/Manager/CameraManager.h

@@ -7,7 +7,7 @@
 
 #import <Foundation/Foundation.h>
 #import <AVFoundation/AVFoundation.h>
-
+#import "LenzSDKConstant.h"
 NS_ASSUME_NONNULL_BEGIN
 
 @class AVCaptureDevice;
@@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
 - (void)focusOn:(CGPoint)point;
 - (void)focusOn:(CGPoint)point device: (AVCaptureDevice*)device;
 
-- (void)setResolutionFor:(AVCaptureDevicePosition)position with: (NSInteger)desiredWidth;
+- (void)setResolutionFor:(AVCaptureDevicePosition)position with: (NSInteger)desiredHeight model:(SDKCaptureModeIndex)model;
 - (AVCaptureDevice *)cameraWithPosition:(AVCaptureDevicePosition)position;
 
 @end

+ 51 - 11
LenzCameraNativeModuleForRN/Classes/inner/CameraManager/CameraManager.m → LenzCameraNativeModuleForRN/Classes/inner/Manager/CameraManager.m

@@ -20,34 +20,74 @@
 @synthesize front = _front;
 @synthesize back = _back;
 
-- (void)setResolutionFor:(AVCaptureDevicePosition)position with: (NSInteger)desiredWidth{
+- (void)setResolutionFor:(AVCaptureDevicePosition)position with: (NSInteger)desiredHeight model:(SDKCaptureModeIndex)model{
     
     AVCaptureDevice* device = [self cameraWithPosition:position];
+    
     if(device == nil){
         return;
     }
     
     NSArray *supportedFormats = device.formats;
     
+    CGFloat width = [UIScreen mainScreen].bounds.size.width;
+    CGFloat height = [UIScreen mainScreen].bounds.size.height;
+    
     AVCaptureDeviceFormat *bestFormat;
     CGFloat aspect = 1;
-    
-    
+    //分辨率
+    CGFloat radio = 16.0/9.0;
+    if(model == SDK_CAPTURE_MODE_SINGLE || model == SDK_CAPTURE_MODE_CONTINUOUS) {
+        radio = height/width;
+    }
+    [device lockForConfiguration:nil];
+
     for (AVCaptureDeviceFormat *format in supportedFormats) {
+        // 目标格式与当前预览宽高比一致
         CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[format formatDescription]);
-        //分辨率
-        if (dimensions.width <= desiredWidth) {
-            if(dimensions.height > 0)
-                aspect = (CGFloat)dimensions.width / dimensions.height;
+//        NSLog(@"~~~~~~: H: %d, W:%D, r:%f", dimensions.width, dimensions.height, (CGFloat)dimensions.width/(CGFloat)dimensions.height);
+        if (((CGFloat)dimensions.width/(CGFloat)dimensions.height) == radio && dimensions.height == desiredHeight) {
             bestFormat = format;
+            break;
         }
     }
     
-    [device lockForConfiguration:nil];
-    [device setActiveFormat:bestFormat];
+    if (!bestFormat) {
+        //未找到 匹配格式 查找固定匹配格式 (720  1080  2160)
+        for (AVCaptureDeviceFormat *format in supportedFormats) {
+            CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[format formatDescription]);
+//            CMVideoDimensions bestVideoDimensions = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[bestFormat formatDescription]);
+            if (((CGFloat)dimensions.width/(CGFloat)dimensions.height) == radio &&
+                (dimensions.height == 720 || dimensions.height == 1080 || dimensions.height == 2160)) {
+//                if (bestVideoDimensions.height <= dimensions.height) {
+//                    bestFormat = format;
+//                }
+                if (dimensions.height == 1080) {
+                    bestFormat = format;
+                }
+            }
+        }
+    }
+    
+    if (!bestFormat) {
+        //未找到 固定格式 (720  1080  2160) 查找最佳格式(目标格式最近的分辨率)
+        for (AVCaptureDeviceFormat *format in supportedFormats) {
+            CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[format formatDescription]);
+            CMVideoDimensions bestVideoDimensions = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[bestFormat formatDescription]);
+            if (((CGFloat)dimensions.width/(CGFloat)dimensions.height) == radio && dimensions.height <= desiredHeight ) {
+                if (bestVideoDimensions.height <= dimensions.height) {
+                    bestFormat = format;
+                }
+            }
+        }
+    }
+    
+    if(bestFormat) {
+        [device setActiveFormat:bestFormat];
+    }
     
-    [device setActiveVideoMaxFrameDuration:CMTimeMake(1, 10)];
-    [device setActiveVideoMinFrameDuration:CMTimeMake(1, 10)];
+    [device setActiveVideoMaxFrameDuration:CMTimeMake(1, 20)];
+    [device setActiveVideoMinFrameDuration:CMTimeMake(1, 20)];
     
     [device unlockForConfiguration];
     

+ 44 - 0
LenzCameraNativeModuleForRN/Classes/inner/Manager/PCSDeviceOrientationManager.h

@@ -0,0 +1,44 @@
+//
+//  PCSDeviceOrientationManager.h
+//  LenzSDK
+//
+//  Created by lr on 2023/5/12.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger,TgDirection) {
+    TgDirectionUnkown,
+    TgDirectionPortrait,
+    TgDirectionDown,
+    TgDirectionRight,
+    TgDirectionLeft,
+};
+
+@protocol PCSDeviceOrientationDelegate <NSObject>
+
+- (void)directionChange:(TgDirection)direction;
+
+@end
+
+@interface PCSDeviceOrientationManager : NSObject
+
+
+@property (nonatomic) id<PCSDeviceOrientationDelegate> delegate;
+@property (nonatomic) TgDirection currentDirection;
+
+- (instancetype)initWithDelegate:(id<PCSDeviceOrientationDelegate>) delegate;
+/**
+ 开启监听
+ */
+- (void)startMonitor;
+/**
+ 结束监听,请stop
+ */
+- (void)stop;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 102 - 0
LenzCameraNativeModuleForRN/Classes/inner/Manager/PCSDeviceOrientationManager.m

@@ -0,0 +1,102 @@
+//
+//  PCSDeviceOrientationManager.m
+//  LenzSDK
+//
+//  Created by lr on 2023/5/12.
+//
+
+#import "PCSDeviceOrientationManager.h"
+#import <CoreMotion/CoreMotion.h>
+
+static const float sensitive = 0.77;
+
+
+@interface PCSDeviceOrientationManager () {
+    
+    CMMotionManager *_motionManager;
+}
+@end
+
+@implementation PCSDeviceOrientationManager
+
+
+- (instancetype)initWithDelegate:(id<PCSDeviceOrientationDelegate>)delegate {
+    self = [super init];
+    if (self) {
+        
+        _delegate = delegate;
+    }
+    return self;
+}
+- (void)startMonitor {
+    
+    [self start];
+}
+
+- (void)stop {
+    [_motionManager stopDeviceMotionUpdates];
+}
+
+
+//陀螺仪 每隔一个间隔做轮询
+- (void)start{
+    
+    if (_motionManager == nil) {
+        
+        _motionManager = [[CMMotionManager alloc] init];
+    }
+    _motionManager.deviceMotionUpdateInterval = 1/40.f;
+    if (_motionManager.deviceMotionAvailable) {
+        
+        [_motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
+                                            withHandler: ^(CMDeviceMotion *motion, NSError *error){
+                                                [self performSelectorOnMainThread:@selector(deviceMotion:) withObject:motion waitUntilDone:YES];
+                                            }];
+    }
+}
+- (void)deviceMotion:(CMDeviceMotion *)motion{
+    
+    double x = motion.gravity.x;
+    double y = motion.gravity.y;
+
+    if (y < 0 ) {
+        if (fabs(y) > sensitive) {
+            if (self.currentDirection != TgDirectionPortrait) {
+                self.currentDirection = TgDirectionPortrait;
+                if ([self.delegate respondsToSelector:@selector(directionChange:)]) {
+                    [self.delegate directionChange:self.currentDirection];
+                }
+            }
+        }
+    }else {
+        if (y > sensitive) {
+            if (self.currentDirection != TgDirectionDown) {
+                self.currentDirection = TgDirectionDown;
+                if ([self.delegate respondsToSelector:@selector(directionChange:)]) {
+                    [self.delegate directionChange:self.currentDirection];
+                }
+            }
+        }
+    }
+    if (x < 0 ) {
+        if (fabs(x) > sensitive) {
+            if (self.currentDirection != TgDirectionLeft) {
+                self.currentDirection = TgDirectionLeft;
+                if ([self.delegate respondsToSelector:@selector(directionChange:)]) {
+                    [self.delegate directionChange:self.currentDirection];
+                }
+            }
+        }
+    }else {
+        if (x > sensitive) {
+            if (self.currentDirection != TgDirectionRight) {
+                self.currentDirection = TgDirectionRight;
+                if ([self.delegate respondsToSelector:@selector(directionChange:)]) {
+                    [self.delegate directionChange:self.currentDirection];
+                }
+            }
+        }
+    }
+}
+
+@end

+ 0 - 21
LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeAIPanorama.m

@@ -55,31 +55,10 @@
 - (BOOL)start{
     [super start];
     BOOL ret = [self.controller startVideoDataOutputing];
-    if(ret){
-        self.controller.panoramaGuideView.hidden = NO;
-        self.controller.panoramOrientationGuideView.selectedItemIndex = PanoramaOrientationViewLeft;
-        if ([self.controller.panoramOrientationGuideView.delegate respondsToSelector:@selector(panoramaOrientationViewslt:)]) {
-            [self.controller.panoramOrientationGuideView.delegate panoramaOrientationViewslt:PanoramaOrientationViewLeft];
-        }
-//        [self.controller panoramaOrientationViewslt:PanoramaOrientationViewLeft];
-//        self.controller.panoramOrientationGuideView.hidden = NO;
-    }
     return ret;
 }
 
 - (void)stop{
-    if (!NSThread.isMainThread) {
-        __weak typeof(self) weakSelf = self;
-        dispatch_async(dispatch_get_main_queue(), ^{
-//            weakSelf.controller.switchButton.hidden = NO;
-//            weakSelf.controller.panoramaGuideView.hidden = YES;
-//            weakSelf.controller.panoramOrientationGuideView.hidden = YES;
-        });
-    } else {
-//        self.controller.switchButton.hidden = NO;
-//        self.controller.panoramaGuideView.hidden = YES;
-//        self.controller.panoramOrientationGuideView.hidden = YES;
-    }
     
     [super stop];
     dispatch_async(dispatch_get_main_queue(), ^{

+ 7 - 5
LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeMovie.m

@@ -88,12 +88,14 @@
 }
 
 - (void)updateUI{
-    self.controller.modeLabel.hidden = YES;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        self.controller.modeLabel.hidden = YES;
         
-    self.controller.timerLabel.backgroundColor = !self.isRecording ? [UIColor clearColor] : [PCSThemeColorManager orange];
-    self.controller.timerLabel.hidden = NO;
-    [self.controller.timerLabel updateWith:0];
-    self.controller.timerLabel.padding = UIEdgeInsetsMake(0, 2.5, 0, 2.5);
+        self.controller.timerLabel.backgroundColor = !self.isRecording ? [UIColor clearColor] : [PCSThemeColorManager orange];
+        self.controller.timerLabel.hidden = NO;
+        [self.controller.timerLabel updateWith:0];
+        self.controller.timerLabel.padding = UIEdgeInsetsMake(0, 2.5, 0, 2.5);
+    });
     
 }
 

+ 3 - 0
LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeVideoBase.h

@@ -7,6 +7,7 @@
 
 #import <Foundation/Foundation.h>
 #import "LenzHeader.h"
+#import <LenzStitchSDK/LenzStitchSDK.h>
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -17,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, assign) BOOL isRecording;
 @property (nonatomic) BOOL needHiddenDir;
 @property (nonatomic) NSInteger recTime;
+@property (nonatomic) LenVideoStitchResult stitchResult;
+
 
 - (void)updateButtonStatusByCurrentRecordingState;
 - (void)takePhotoButtonTouched;

+ 39 - 30
LenzCameraNativeModuleForRN/Classes/inner/OperationNode/OperationNodeVideoBase.m

@@ -55,11 +55,24 @@
     self.controller.isVideoStitchStopedWhenRecording = NO;
     self.isRecording = updatedRecording && [self start];
 
+    if(self.isRecording){
+        if (self.controller.mode == SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA) {
+            self.controller.panoramaGuideView.hidden = NO;
+        }
+        if ([self.controller.panoramOrientationGuideView.delegate respondsToSelector:@selector(panoramDirDidChange)]) {
+            [self.controller.panoramOrientationGuideView.delegate panoramDirDidChange];
+        }
+    }
+    
     self.controller.panGesture.enabled = !self.isRecording;
     self.controller.timerLabel.backgroundColor = !self.isRecording ? [UIColor clearColor] : [PCSThemeColorManager orange];
     [self updateTakePhotoButtonStatus];
     if(!self.isRecording){
-        self.controller.isVideoStitchStopedWhenRecording = YES;
+        if (self.stitchResult != LenVideoStitchResultStitchFail && self.stitchResult != LenVideoStitchResultFail) {
+            self.controller.isVideoStitchStopedWhenRecording = YES;
+        } else {
+            self.controller.isVideoStitchStopedWhenRecording = NO;
+        }
         [self updateButtonStatusByCurrentRecordingState];
         if (self.modeIndex == SDK_CAPTURE_MODE_PANORAMA || self.modeIndex == SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA) {
             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
@@ -151,38 +164,34 @@
 #pragma mark - Accessor
 
 - (void)updateTakePhotoButtonStatus {
-    UIImage* img = self.isRecording ? [UIImage loadNamed:@"btn-stop-recording"] : [UIImage loadNamed:@"take-photo-btn"];
-    if (!NSThread.isMainThread) {
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [self.controller.takePhotoButton setImage:img forState:UIControlStateNormal];
-        });
-    } else {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        UIImage* img = self.isRecording ? [UIImage loadNamed:@"btn-stop-recording"] : [UIImage loadNamed:@"take-photo-btn"];
         [self.controller.takePhotoButton setImage:img forState:UIControlStateNormal];
-    }
-
-    if (!self.isRecording) {
-        [self.controller.timerLabel updateWith:0];
-        self.controller.flashButton.hidden = NO;
-        self.controller.discardPhotoButton.hidden = NO;
-        self.controller.savePhotoButton.hidden = NO;
-        if (self.modeIndex == SDK_CAPTURE_MODE_PANORAMA || self.modeIndex == SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA) {
-            self.controller.switchButton.hidden = YES;
+        
+        if (!self.isRecording) {
+            [self.controller.timerLabel updateWith:0];
+            self.controller.flashButton.hidden = NO;
+            self.controller.discardPhotoButton.hidden = NO;
+            self.controller.savePhotoButton.hidden = NO;
+            if (self.modeIndex == SDK_CAPTURE_MODE_PANORAMA || self.modeIndex == SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA) {
+                self.controller.switchButton.hidden = YES;
+            } else {
+                self.controller.switchButton.hidden = NO;
+            }
+            self.controller.modeList.hidden = NO;
+            self.controller.ablumImageView.hidden = NO;
         } else {
-            self.controller.switchButton.hidden = NO;
+            self.controller.flashButton.hidden = YES;
+            self.controller.discardPhotoButton.hidden = YES;
+            self.controller.savePhotoButton.hidden = YES;
+            self.controller.switchButton.hidden = YES;
+            self.controller.backButton.hidden = YES;
+            self.controller.modeList.hidden = YES;
+            self.controller.ablumImageView.hidden = YES;
+            self.controller.numberOfImagesLabel.hidden = YES;
+            
         }
-        self.controller.modeList.hidden = NO;
-        self.controller.ablumImageView.hidden = NO;
-    } else {
-        self.controller.flashButton.hidden = YES;
-        self.controller.discardPhotoButton.hidden = YES;
-        self.controller.savePhotoButton.hidden = YES;
-        self.controller.switchButton.hidden = YES;
-        self.controller.backButton.hidden = YES;
-        self.controller.modeList.hidden = YES;
-        self.controller.ablumImageView.hidden = YES;
-        self.controller.numberOfImagesLabel.hidden = YES;
-
-    }
+    });
 }
 
 

+ 1 - 1
LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSBaseViewController.h

@@ -109,7 +109,7 @@ typedef void(^PCSBaseVCCompleteBLock)(NSDictionary *dict);
 //  根据当前正在录制的视频方向返回视频预览图的方向。
 @property (nonatomic, assign) UIImageOrientation thumbnailOritaionByCurrentVideoOrientation;
 
-+ (instancetype)makeViewController;
+//+ (instancetype)makeViewController;
 + (instancetype)initWithParams:(NSDictionary *)params complete:(PCSBaseVCCompleteBLock)complete;
 
 - (IBAction)takePhotoButtonTouchUpInside:(id)sender;

File diff ditekan karena terlalu besar
+ 570 - 85
LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSBaseViewController.m


+ 107 - 11
LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSPreviewViewController.m

@@ -28,26 +28,27 @@
 
 - (instancetype)initWithFrame:(CGRect)frame {
     if (self = [super initWithFrame:frame]) {
+        self.contentView.backgroundColor = [UIColor clearColor];
         [self.contentView addSubview:self.imageView];
         [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
             make.edges.mas_offset(0);
         }];
+        [self.contentView addSubview:self.player.view];
+
         [self.contentView addSubview:self.videoImageView];
         [self.videoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
             make.center.mas_equalTo(self.contentView);
             make.width.height.mas_offset(48);
         }];
-        
-//        player.view.frame = CGRectMake(0, 0, CGRectGetWidth(self.scrollView.frame), CGRectGetHeight(self.scrollView.frame));
-//        player.view.hidden = YES;
-        [self.contentView addSubview:self.player.view];
+
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished) name:AVPlayerItemDidPlayToEndTimeNotification  object:nil];
 
     }
     return self;
 }
 - (void)setModel:(LenzResourceItemModel *)model {
     _model = model;
-    self.imageView.image = model.image;
+    self.imageView.image = model.previewImage;
     if (model.mode == SDK_CAPTURE_MODE_MOVIE) {
         self.videoImageView.hidden = NO;
     } else {
@@ -62,9 +63,21 @@
         self.player.player = player;
         [self.player.player play];
         self.player.view.hidden = NO;
+        self.videoImageView.hidden = YES;
     } else {
         [self.player.player pause];
         self.player.view.hidden = YES;
+        self.videoImageView.hidden = NO;
+    }
+}
+
+- (void)playerAction {
+    if (self.player.player.timeControlStatus == AVPlayerTimeControlStatusPlaying) {
+        [self.player.player pause];
+        self.videoImageView.hidden = NO;
+    } else {
+        [self.player.player play];
+        self.videoImageView.hidden = YES;
     }
 }
 
@@ -78,7 +91,7 @@
         _imageView = [[UIImageView alloc]init];
         _imageView.layer.cornerRadius = 8;
         _imageView.layer.masksToBounds = YES;
-        _imageView.backgroundColor = [UIColor blackColor];
+//        _imageView.backgroundColor = [UIColor blackColor];
         _imageView.contentMode = UIViewContentModeScaleAspectFit;
     }
     return _imageView;
@@ -97,11 +110,25 @@
     if (!_player) {
         _player = [[AVPlayerViewController alloc]init];
         _player.view.hidden = YES;
+        _player.view.backgroundColor = [UIColor clearColor];
         _player.videoGravity = AVLayerVideoGravityResizeAspect;
+        _player.showsPlaybackControls = NO;
+
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(playerAction)];
+        [_player.view addGestureRecognizer:tap];
     }
+    
     return _player;
 }
 
+- (void)playbackFinished {
+    if (_model.mode == SDK_CAPTURE_MODE_MOVIE) {
+        self.videoImageView.hidden = NO;
+        self.player.view.hidden = YES;
+    }
+}
+
+
 @end
 
 
@@ -134,7 +161,9 @@
 @end
 
 @implementation PCSPreviewViewController
-
+- (void)dealloc {
+    
+}
 - (void)viewDidLoad {
     [super viewDidLoad];
     self.allPlayer  = [NSMutableArray array];
@@ -195,6 +224,7 @@
     self.collectionView.delegate = self;
     self.collectionView.dataSource = self;
     self.collectionView.pagingEnabled = YES;
+    self.collectionView.backgroundColor = [UIColor clearColor];
     self.collectionView.hidden = YES;
     // 注册item类型
     [self.collectionView registerClass:[PCSPreCollectionCell class] forCellWithReuseIdentifier:@"PCSPreCollectionCell"];
@@ -208,6 +238,7 @@
 
 
     self.currentIndexPath = nil;
+    
     if (self.model.continousArray.count > 0 && self.selectIndex == SDK_CAPTURE_MODE_CONTINUOUS) {
         self.currentIndex = 1;
         self.currentIndexPath = [NSIndexPath indexPathForItem:self.model.continousArray.count - 1 inSection:0];
@@ -225,6 +256,21 @@
         self.currentIndex = 4;
         self.currentIndexPath = [NSIndexPath indexPathForItem:self.model.aiPanoramArray.count - 1 inSection:3];
     }
+    if(!self.currentIndexPath) {
+        if (self.model.aiPanoramArray.count > 0) {
+            self.currentIndex = 4;
+            self.currentIndexPath = [NSIndexPath indexPathForItem:self.model.aiPanoramArray.count - 1 inSection:3];
+        } else if (self.model.panoramArray.count > 0) {
+            self.currentIndex = 3;
+            self.currentIndexPath = [NSIndexPath indexPathForItem:self.model.panoramArray.count - 1 inSection:2];
+        } else if (self.model.movieArray.count > 0) {
+            self.currentIndex = 2;
+            self.currentIndexPath = [NSIndexPath indexPathForItem:self.model.movieArray.count - 1 inSection:1];
+        } else {
+            self.currentIndex = 1;
+            self.currentIndexPath = [NSIndexPath indexPathForItem:self.model.continousArray.count - 1 inSection:0];
+        }
+    }
     [self changeLabelStatusWith:self.currentIndex];
     [self updateCountLabelWith:self.currentIndexPath];
 
@@ -452,6 +498,25 @@
     [self.modeView addSubview:self.lineImageView];
 }
 
+- (void)updateTotal {
+    NSInteger count = 0;
+    if (self.model.continousArray.count) {
+        count += self.model.continousArray.count;
+    }
+    
+    if (self.model.movieArray.count) {
+        count += self.model.movieArray.count;
+    }
+    if (self.model.panoramArray.count) {
+        count += self.model.panoramArray.count;
+    }
+    if (self.model.aiPanoramArray.count) {
+        count += self.model.aiPanoramArray.count;
+    }
+    self.countLabel.text = [NSString stringWithFormat:@"共%ld笔数据", count];
+    
+}
+
 
 - (void)changeAction:(UITapGestureRecognizer *)tap {
 
@@ -593,6 +658,13 @@
     }
 }
 
+- (BOOL)shouldAutorotate {
+    return NO;
+}
+- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
+    return UIInterfaceOrientationMaskPortrait;
+}
+
 - (void)backAction {
     [self dismissViewControllerAnimated:YES completion:nil];
 }
@@ -605,33 +677,57 @@
             
         [alertController dismissViewControllerAnimated:YES completion:nil];
         } rightButtonCallBack:^(QuitMultipleModeAlertViewController * _Nonnull alertController) {
+            NSIndexPath *showIndexPath = nil;
             if (self.currentIndex == 1) {
                 if (self.model.continousArray.count > self.currentIndexPath.item) {
                     [self.model.continousArray removeObjectAtIndex:self.currentIndexPath.item];
                 }
+                if (self.model.continousArray.count > 0 ) {
+                    showIndexPath = [NSIndexPath indexPathForRow:self.currentIndexPath.item - 1 inSection:self.currentIndexPath.section];
+                }
             } else if (self.currentIndex == 2) {
                 if (self.model.movieArray.count > self.currentIndexPath.item) {
                     [self.model.movieArray removeObjectAtIndex:self.currentIndexPath.item];
                 }
+                if (self.model.movieArray.count > 0 ) {
+                    showIndexPath = [NSIndexPath indexPathForRow:self.currentIndexPath.item - 1 inSection:self.currentIndexPath.section];
+                }
             } else if (self.currentIndex == 3) {
                 if (self.model.panoramArray.count > self.currentIndexPath.item) {
                     [self.model.panoramArray removeObjectAtIndex:self.currentIndexPath.item];
                 }
+                if (self.model.panoramArray.count > 0 ) {
+                    showIndexPath = [NSIndexPath indexPathForRow:self.currentIndexPath.item - 1 inSection:self.currentIndexPath.section];
+                }
             } else if (self.currentIndex == 4) {
                 if (self.model.aiPanoramArray.count > self.currentIndexPath.item) {
                     [self.model.aiPanoramArray removeObjectAtIndex:self.currentIndexPath.item];
                 }
+                if (self.model.aiPanoramArray.count > 0 ) {
+                    showIndexPath = [NSIndexPath indexPathForRow:self.currentIndexPath.item - 1 inSection:self.currentIndexPath.section];
+                }
             }
-            [self setupModeView];
-            [self scrollViewDidEndDecelerating:self.collectionView];
 
-            [self.collectionView reloadData];
+
+            if(showIndexPath) {
+                UICollectionViewLayoutAttributes*attributes = [self.collectionView layoutAttributesForItemAtIndexPath:showIndexPath];
+                CGRect rect = attributes.frame;
+                [self.collectionView reloadData];
+                [self.collectionView setContentOffset:CGPointMake(rect.origin.x, rect.origin.y ) animated:NO];
+            } else {
+                [self setupModeView];
+                [self scrollViewDidEndDecelerating:self.collectionView];
+                [self.collectionView reloadData];
+            }
+            
+            
             [self.view setNeedsLayout];
             [self.view layoutIfNeeded];
             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.35 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                 [self updateCurrentIndexPath];
             });
             
+            [self updateTotal];
             [self updateViewWhenDelete];
             if (self.dataChangeBlock) {
                 self.dataChangeBlock();
@@ -681,7 +777,7 @@
         _scrollView.layer.cornerRadius = 8;
         _scrollView.layer.masksToBounds = YES;
         _scrollView.delegate = self;
-        _scrollView.backgroundColor = [UIColor blackColor];
+//        _scrollView.backgroundColor = [UIColor blackColor];
     }
     return _scrollView;
 }

+ 0 - 28
LenzCameraNativeModuleForRN/Classes/inner/PCSSessionWrapper.h

@@ -1,28 +0,0 @@
-//
-//  PCSSessionWrapper.h
-//  sampleSDK
-//
-//  Created by 王昭威 on 2023/1/15.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class AVCaptureSession;
-@class AVCapturePhotoOutput;
-@class AVCaptureVideoDataOutput;
-@class AVCaptureMovieFileOutput;
-@class AVCaptureVideoPreviewLayer;
-@interface PCSSessionWrapper : NSObject
-
-@property (nonatomic, strong) AVCaptureSession* captureSession;
-@property (nonatomic, strong) AVCapturePhotoOutput* cameraPhotoOutput;
-@property (nonatomic, strong) AVCaptureVideoDataOutput* cameraVideoOutput;
-@property (nonatomic, strong) AVCaptureMovieFileOutput* movieFileOutput;
-
-@property (nonatomic, strong) AVCaptureVideoPreviewLayer* previewLayer;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 13
LenzCameraNativeModuleForRN/Classes/inner/PCSSessionWrapper.m

@@ -1,13 +0,0 @@
-//
-//  PCSSessionWrapper.m
-//  sampleSDK
-//
-//  Created by 王昭威 on 2023/1/15.
-//
-
-#import "PCSSessionWrapper.h"
-#import <AVFoundation/AVFoundation.h>
-
-@implementation PCSSessionWrapper
-
-@end

+ 1 - 0
LenzCameraNativeModuleForRN/Classes/inner/UI/Label/TimerLabel.m

@@ -14,6 +14,7 @@
     NSInteger minutes = seconds / 60 % 60;
     NSInteger sec = seconds % 60;
     self.text = [NSString stringWithFormat:@"%02ld:%02ld:%02ld", hours, minutes, sec];
+    NSLog(@"~~~~~~~~~~~~~~~~~~~~:%@", self.text);
 }
 
 @end

+ 14 - 1
LenzCameraNativeModuleForRN/Classes/inner/UI/ModeListView/PCSModeList.m

@@ -76,6 +76,12 @@
                 make.left.equalTo(previous.mas_right).offset(self.space);
             }
             make.centerY.equalTo(self);
+            if (obj.tag == SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA) {
+                make.width.mas_offset(60);
+            } else {
+                make.width.mas_offset(44);
+            }
+            make.height.mas_offset(44);
         }];
         previous = obj;
     }];
@@ -84,7 +90,7 @@
 }
 
 - (CGFloat)space{
-    return 40;
+    return 0;
 }
 
 - (void)updateIndexByTanslation:(CGPoint)translation{
@@ -142,6 +148,7 @@
         UILabel* label = [[UILabel alloc] init];
         label.font = [UIFont systemFontOfSize:13];
         [labels addObject:label];
+        label.textAlignment = NSTextAlignmentCenter;
         label.translatesAutoresizingMaskIntoConstraints = NO;
         label.text = obj.modeItemString;
         label.textColor = UIColor.whiteColor;
@@ -152,6 +159,12 @@
                 make.left.equalTo(previous.mas_right).offset(self.space);
             }
             make.centerY.equalTo(self);
+            if (obj.modeIndex == SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA) {
+                make.width.mas_offset(60);
+            } else {
+                make.width.mas_offset(44);
+            }
+            make.height.mas_offset(44);
         }];
         previous = label;
     }];

+ 11 - 8
LenzCameraNativeModuleForRN/Classes/inner/UI/PCSAutherView.m

@@ -66,14 +66,17 @@
     }
 }
 - (void)showAutherWith:(PCSAuthType)type {
-    NSString *title = @"需要访问相机和麦克风权限,";
-    if (type == PCSAuthPhone) {
-        title = @"需要访问相机权限,";
-    } else if (type == PCSAuthMir) {
-        title = @"需要访问麦克风权限,";
-    }
-    self.hidden = NO;
-    self.subLabel.text = title;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        
+        NSString *title = @"需要访问相机和麦克风权限,";
+        if (type == PCSAuthPhone) {
+            title = @"需要访问相机权限,";
+        } else if (type == PCSAuthMir) {
+            title = @"需要访问麦克风权限,";
+        }
+        self.hidden = NO;
+        self.subLabel.text = title;
+    });
 }
 - (UIButton *)closeButton {
     if (!_closeButton) {

+ 9 - 4
LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaGuideView/PanoramaGuideView.h

@@ -7,7 +7,7 @@
 
 #import <UIKit/UIKit.h>
 #import "PanoramaOrientationView.h"
-
+#import "PCSDeviceOrientationManager.h"
 
 UIKIT_EXTERN  CGFloat const PanoramaGuideViewWOrH;
 
@@ -26,13 +26,18 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface PanoramaGuideView : UIView
 
--(void)direction:(PanoramaOrientationViewDirectionEnum)dir;
+@property (nonatomic) TgDirection dir;
+@property (nonatomic) PanoramaOrientationViewDirectionEnum orginDir;
+//@property (nonatomic) UIImage *lastImage;
+
+
+- (void)direction:(PanoramaOrientationViewDirectionEnum)dir;
 
 - (void)updatePreviewAspect: (CGFloat)aspect;
 - (void)updateOffset:(CGFloat)offset;
 
-- (void)showImageWith:(UIImage *_Nullable)image dir:(PanoramaOrientationViewDirectionEnum)dir;
-
+- (void)showImageWith:(UIImage *_Nullable)image;
+//- (void)updatePromptLabelWith:(TgDirection)dir;
 - (void)clearImage;
 
 - (void)updateArrowWith:(PanoramaArrowDir)arrowDir dir:(PanoramaOrientationViewDirectionEnum)dir;

+ 509 - 167
LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaGuideView/PanoramaGuideView.m

@@ -47,6 +47,7 @@ CGFloat const PanoramaGuideViewWOrH = 120;
 
 @property (nonatomic) NSNumber *offSetTop;
 @property (nonatomic) NSNumber *offSetLeft;
+@property (nonatomic) PanoramaOrientationViewDirectionEnum currentDirection;
 
 @end
 
@@ -93,9 +94,10 @@ CGFloat const PanoramaGuideViewWOrH = 120;
 }
 
 - (void)direction:(PanoramaOrientationViewDirectionEnum)dir{
-
+    self.currentDirection = dir;
     [self insertSubview:self.line atIndex:0];
     self.line.hidden = YES;
+//    self.label.hidden = YES;
     [self.superV addSubview:self.label];
     [self addSubview:self.whiteArrow];
     [self.line mas_remakeConstraints:^(MASConstraintMaker *make) {
@@ -123,33 +125,34 @@ CGFloat const PanoramaGuideViewWOrH = 120;
     }];
     
     
-    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
-        switch (dir) {
-            case PanoramaOrientationViewLeft:
-            case PanoramaOrientationViewRight:  // 横
-            {
-                make.top.mas_equalTo(self.mas_bottom).offset(5);
-                make.centerX.mas_equalTo(self.superV);
-                make.height.offset(20);
-                make.width.offset(160);
-                self.label.verticalForm = NO;
-            }
-                break;
-            case PanoramaOrientationViewUp:
-            case PanoramaOrientationViewDown: // 上下
-            {
-                make.right.mas_equalTo(self.mas_left).offset(-5);
-                make.centerY.mas_equalTo(self.superV);
-                make.width.offset(20);
-                make.height.offset(160);
-                self.label.verticalForm = YES;
-            }
-                break;
-                
-            default:
-                break;
-        }
-    }];
+//    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+//        switch (dir) {
+//            case PanoramaOrientationViewLeft:
+//            case PanoramaOrientationViewRight:  // 横
+//            {
+//                make.top.mas_equalTo(self.mas_bottom).offset(5);
+//                make.centerX.mas_equalTo(self.superV);
+//                make.height.offset(20);
+//                make.width.offset(160);
+//                self.label.verticalForm = NO;
+//            }
+//                break;
+//            case PanoramaOrientationViewUp:
+//            case PanoramaOrientationViewDown: // 上下
+//            {
+//                make.right.mas_equalTo(self.mas_left).offset(-5);
+//                make.centerY.mas_equalTo(self.superV);
+//                make.width.offset(20);
+//                make.height.offset(160);
+//                self.label.verticalForm = YES;
+//            }
+//                break;
+//                
+//            default:
+//                break;
+//        }
+//    }];
+    [self updatePromptLabel];
 
     [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
         switch (dir) {
@@ -234,62 +237,301 @@ CGFloat const PanoramaGuideViewWOrH = 120;
         [self layoutIfNeeded];
     } completion:^(BOOL finished) {
         self.line.hidden = NO;
+//        self.label.hidden = NO;
     }];
 }
 
-- (void)showImageWith:(UIImage * _Nullable)image dir:(PanoramaOrientationViewDirectionEnum)dir {
-//    if (!image) {
-//        dispatch_async(dispatch_get_main_queue(), ^{
-//            self.showImageView.image = nil;
-//        });
-//        return;
-//    }
-    dispatch_async(dispatch_get_main_queue(), ^{
-        CGFloat imageWH = 0;
-        if (image) {
-            if (dir == PanoramaOrientationViewDown || dir == PanoramaOrientationViewUp) {
-                imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
-            } else {
-                imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+- (void)updatePromptLabel {
+    
+//    self.backgroundColor = [UIColor redColor];
+//    self.superV.backgroundColor = [UIColor yellowColor];
+    self.label.transform = CGAffineTransformMakeRotation(0);
+
+    switch (self.dir) {
+        case TgDirectionPortrait: {
+            [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                switch (self.orginDir) {
+                    case PanoramaOrientationViewLeft:
+                    case PanoramaOrientationViewRight:  // 横
+                    {
+                        make.top.mas_equalTo(self.mas_bottom).offset(5);
+                        make.centerX.mas_equalTo(self.superV);
+                        make.height.offset(20);
+                        make.width.offset(160);
+                        self.label.verticalForm = NO;
+                    }
+                        break;
+                    case PanoramaOrientationViewUp:
+                    case PanoramaOrientationViewDown: // 上下
+                    {
+                        make.right.mas_equalTo(self.mas_left).offset(-5);
+                        make.centerY.mas_equalTo(self.superV);
+                        make.width.offset(20);
+                        make.height.offset(160);
+                        self.label.verticalForm = YES;
+                    }
+                        break;
+        
+                    default:
+                        break;
+                }
+            }];
+            
+        }
+            break;
+        case TgDirectionDown: {
+            switch (self.orginDir) {
+                case PanoramaOrientationViewLeft: {
+                    self.label.transform = CGAffineTransformMakeRotation(-M_PI);
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.bottom.mas_equalTo(self.mas_top).mas_offset(-20);
+                        make.centerX.mas_equalTo(self);
+                        make.height.offset(20);
+                        make.width.offset(160);
+                        self.label.verticalForm = NO;
+                    }];
+
+                }
+                    break;
+                case PanoramaOrientationViewRight:  // 横
+                {
+//                        self.label.transform = CGAffineTransformMakeRotation(0);
+                    self.label.transform = CGAffineTransformMakeRotation(-M_PI/2);
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.mas_equalTo(self.mas_right).offset(-60);
+                        make.centerY.mas_equalTo(self);
+                        make.height.offset(20);
+                        make.width.offset(160);
+                        self.label.verticalForm = NO;
+                    }];
+
+                }
+                    break;
+                case PanoramaOrientationViewUp: {
+                    self.label.transform = CGAffineTransformMakeRotation(M_PI);
+
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+
+                        make.right.mas_equalTo(self.mas_left).offset(-5);
+                        make.centerY.mas_equalTo(self.superV);
+                        make.width.offset(20);
+                        make.height.offset(160);
+                        self.label.verticalForm = YES;
+                    }];
+                }
+                    break;
+                case PanoramaOrientationViewDown: // 上下
+                {
+                    self.label.transform = CGAffineTransformMakeRotation(M_PI);
+
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+
+                        make.right.mas_equalTo(self.mas_left).offset(-5);
+                        make.centerY.mas_equalTo(self.superV);
+                        make.width.offset(20);
+                        make.height.offset(160);
+                        self.label.verticalForm = YES;
+                    }];
+
+                }
+                    break;
+    
+                default:
+                    break;
+            }
+            
+        }
+            break;
+        case TgDirectionLeft: {
+
+                switch (self.orginDir) {
+                    case PanoramaOrientationViewLeft: {
+//                        self.label.transform = CGAffineTransformMakeRotation(0);
+                        self.label.transform = CGAffineTransformMakeRotation(M_PI/2);
+                        [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                            make.right.mas_equalTo(self.mas_left).mas_offset(60);
+                            make.centerY.mas_equalTo(self);
+                            make.height.offset(20);
+                            make.width.offset(160);
+                            self.label.verticalForm = NO;
+                        }];
+
+                    }
+                        break;
+                    case PanoramaOrientationViewRight:  // 横
+                    {
+                        
+//                        self.label.transform = CGAffineTransformMakeRotation(0);
+                        self.label.transform = CGAffineTransformMakeRotation(M_PI/2);
+                        [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                            make.right.mas_equalTo(self.mas_left).mas_offset(60);
+                            make.centerY.mas_equalTo(self);
+                            make.height.offset(20);
+                            make.width.offset(160);
+                            self.label.verticalForm = NO;
+                        }];
+
+                    }
+                        break;
+                    case PanoramaOrientationViewUp:{
+                        self.label.transform = CGAffineTransformMakeRotation(M_PI/2);
+                        [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                            make.top.mas_equalTo(self.mas_bottom).offset(-60);
+                            make.centerX.mas_equalTo(self.superV);
+                            make.width.offset(20);
+                            make.height.offset(160);
+                            self.label.verticalForm = YES;
+                        }];
+                    }
+                        break;
+                    case PanoramaOrientationViewDown: // 上下
+                    {
+                        self.label.transform = CGAffineTransformMakeRotation(M_PI/2);
+                        [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                            make.top.mas_equalTo(self.mas_bottom).offset(-60);
+                            make.centerX.mas_equalTo(self.superV);
+                            make.width.offset(20);
+                            make.height.offset(160);
+                            self.label.verticalForm = YES;
+                        }];
+
+                    }
+                        break;
+        
+                    default:
+                        break;
+                }
+            
+            
+        }
+            break;
+        case TgDirectionRight: {
+            switch (self.orginDir) {
+                case PanoramaOrientationViewLeft: {
+                    self.label.transform = CGAffineTransformMakeRotation(-M_PI/2);
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.mas_equalTo(self.mas_right).offset(-60);
+                        make.centerY.mas_equalTo(self);
+                        make.height.offset(20);
+                        make.width.offset(160);
+                        self.label.verticalForm = NO;
+                    }];
+
+                }
+                    break;
+                case PanoramaOrientationViewRight:  // 横
+                {
+                    self.label.transform = CGAffineTransformMakeRotation(-M_PI/2);
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.mas_equalTo(self.mas_right).offset(-60);
+                        make.centerY.mas_equalTo(self);
+                        make.height.offset(20);
+                        make.width.offset(160);
+                        self.label.verticalForm = NO;
+                    }];
+
+                }
+                    break;
+                case PanoramaOrientationViewUp:{
+                    self.label.transform = CGAffineTransformMakeRotation(-M_PI/2);
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.top.mas_equalTo(self.mas_bottom).offset(-60);
+                        make.centerX.mas_equalTo(self.superV);
+                        make.width.offset(20);
+                        make.height.offset(160);
+                        self.label.verticalForm = YES;
+                    }];
+                }
+                    break;
+                case PanoramaOrientationViewDown: // 上下
+                {
+                    self.label.transform = CGAffineTransformMakeRotation(-M_PI/2);
+                    [self.label mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.top.mas_equalTo(self.mas_bottom).offset(-60);
+                        make.centerX.mas_equalTo(self.superV);
+                        make.width.offset(20);
+                        make.height.offset(160);
+                        self.label.verticalForm = YES;
+                    }];
+
+                }
+                    break;
+    
+                default:
+                    break;
             }
-        } else {
+        }
+            break;
+            
+        default:
+            break;
+    }
+    
+}
+
+
+
+- (void)showImageWith:(UIImage * _Nullable)image {
+        
+//    self.lastImage = image;
+    dispatch_async(dispatch_get_main_queue(), ^{
+       __block CGFloat imageWH = 0;
+        if (!image) {
             self.offSetTop = @((120-38)/2);
             self.offSetLeft = @((120-38)/2);
         }
+        
 
-    //    UIImage *resultImage = [self showDir:dir image:image];
         self.showImageView.image = image;
         [UIView animateWithDuration:.15 animations:^{
-            switch (dir) {
-                case PanoramaOrientationViewDown: {
+            if (self.dir == TgDirectionPortrait) {
+                if (self.orginDir == PanoramaOrientationViewDown) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
                     [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
                         make.height.mas_equalTo(imageWH);
                         make.height.mas_lessThanOrEqualTo(self);
                         make.left.right.bottom.mas_equalTo(0);
                     }];
                     [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-                        make.bottom.offset(-imageWH);
+                        make.bottom.mas_offset(-imageWH);
                         make.left.mas_equalTo(self.offSetLeft.doubleValue);
-//                        make.centerX.mas_equalTo(self);
                     }];
-                }
-                    break;
-                case PanoramaOrientationViewUp:{
+                } else if (self.orginDir == PanoramaOrientationViewUp) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
                     [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
                         make.left.right.top.mas_equalTo(0);
                         make.height.mas_equalTo(imageWH);
                         make.height.mas_lessThanOrEqualTo(self);
                     }];
                     [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-                        make.top.offset(imageWH);
-//                        make.centerX.mas_equalTo(self);
+                        make.top.mas_offset(imageWH);
                         make.left.mas_equalTo(self.offSetLeft.doubleValue);
 
                     }];
-                            
-                }
-                    break;
-                case PanoramaOrientationViewRight: {
+                } else if (self.orginDir == PanoramaOrientationViewLeft) {
+                    
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.width.mas_equalTo(imageWH);
+                        make.width.mas_lessThanOrEqualTo(self);
+                        make.left.top.bottom.mas_equalTo(0);
+                    }];
+                    
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.mas_offset(imageWH);
+                        make.top.mas_equalTo(self.offSetTop.doubleValue);
+
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewRight) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
                     [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
                         make.width.mas_equalTo(imageWH);
                         make.width.mas_lessThanOrEqualTo(self);
@@ -297,15 +539,61 @@ CGFloat const PanoramaGuideViewWOrH = 120;
                     }];
                     
                     [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-                        make.right.offset(-imageWH);
-//                        make.centerY.mas_equalTo(self);
+                        make.right.mas_offset(-imageWH);
                         make.top.mas_equalTo(self.offSetTop.doubleValue);
 
                     }];
                 }
-                    break;
+                
+            } else if (self.dir == TgDirectionLeft) {
+                if (self.orginDir == PanoramaOrientationViewLeft) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.right.top.mas_equalTo(0);
+                        make.height.mas_equalTo(imageWH);
+                        make.height.mas_lessThanOrEqualTo(self);
+                    }];
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.top.mas_offset(imageWH);
+                        make.left.mas_equalTo(self.offSetLeft.doubleValue);
+
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewRight) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.height.mas_equalTo(imageWH);
+                        make.height.mas_lessThanOrEqualTo(self);
+                        make.left.right.bottom.mas_equalTo(0);
+                    }];
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.bottom.mas_offset(-imageWH);
+                        make.left.mas_equalTo(self.offSetLeft.doubleValue);
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewUp) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.width.mas_equalTo(imageWH);
+                        make.width.mas_lessThanOrEqualTo(self);
+                        make.top.right.bottom.mas_equalTo(0);
+                    }];
                     
-                case PanoramaOrientationViewLeft:{
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.right.mas_offset(-imageWH);
+                        make.top.mas_equalTo(self.offSetTop.doubleValue);
+
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewDown) {
+
+                    
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
                     [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
                         make.width.mas_equalTo(imageWH);
                         make.width.mas_lessThanOrEqualTo(self);
@@ -313,18 +601,134 @@ CGFloat const PanoramaGuideViewWOrH = 120;
                     }];
                     
                     [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-                        make.left.offset(imageWH);
-//                        make.centerY.mas_equalTo(self);
+                        make.left.mas_offset(imageWH);
                         make.top.mas_equalTo(self.offSetTop.doubleValue);
 
                     }];
                 }
+                
+            } else if (self.dir == TgDirectionRight) {
+                if (self.orginDir == PanoramaOrientationViewLeft) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.height.mas_equalTo(imageWH);
+                        make.height.mas_lessThanOrEqualTo(self);
+                        make.left.right.bottom.mas_equalTo(0);
+                    }];
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.bottom.mas_offset(-imageWH);
+                        make.left.mas_equalTo(self.offSetLeft.doubleValue);
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewRight) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.right.top.mas_equalTo(0);
+                        make.height.mas_equalTo(imageWH);
+                        make.height.mas_lessThanOrEqualTo(self);
+                    }];
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.top.mas_offset(imageWH);
+                        make.left.mas_equalTo(self.offSetLeft.doubleValue);
+
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewUp) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.width.mas_equalTo(imageWH);
+                        make.width.mas_lessThanOrEqualTo(self);
+                        make.left.top.bottom.mas_equalTo(0);
+                    }];
                     
-                    break;
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.mas_offset(imageWH);
+                        make.top.mas_equalTo(self.offSetTop.doubleValue);
+
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewDown) {
+
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.width.mas_equalTo(imageWH);
+                        make.width.mas_lessThanOrEqualTo(self);
+                        make.top.right.bottom.mas_equalTo(0);
+                    }];
                     
-                default:
-                    break;
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.right.mas_offset(-imageWH);
+                        make.top.mas_equalTo(self.offSetTop.doubleValue);
+
+                    }];
+                }
+            } else if (self.dir == TgDirectionDown) {
+                if (self.orginDir == PanoramaOrientationViewLeft) {
+
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.width.mas_equalTo(imageWH);
+                        make.width.mas_lessThanOrEqualTo(self);
+                        make.top.right.bottom.mas_equalTo(0);
+                    }];
+                    
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.right.mas_offset(-imageWH);
+                        make.top.mas_equalTo(self.offSetTop.doubleValue);
+
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewRight) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.width)/image.size.height;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.width.mas_equalTo(imageWH);
+                        make.width.mas_lessThanOrEqualTo(self);
+                        make.left.top.bottom.mas_equalTo(0);
+                    }];
+                    
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.mas_offset(imageWH);
+                        make.top.mas_equalTo(self.offSetTop.doubleValue);
+
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewUp) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.height.mas_equalTo(imageWH);
+                        make.height.mas_lessThanOrEqualTo(self);
+                        make.left.right.bottom.mas_equalTo(0);
+                    }];
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.bottom.mas_offset(-imageWH);
+                        make.left.mas_equalTo(self.offSetLeft.doubleValue);
+                    }];
+                } else if (self.orginDir == PanoramaOrientationViewDown) {
+                    if (image) {
+                        imageWH = (PanoramaGuideViewWOrH * image.size.height)/image.size.width;
+                    }
+                    [self.showImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.left.right.top.mas_equalTo(0);
+                        make.height.mas_equalTo(imageWH);
+                        make.height.mas_lessThanOrEqualTo(self);
+                    }];
+                    [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
+                        make.top.mas_offset(imageWH);
+                        make.left.mas_equalTo(self.offSetLeft.doubleValue);
+
+                    }];
+                }
             }
+
             [self setNeedsLayout];
             [self layoutIfNeeded];
         }];
@@ -341,109 +745,47 @@ CGFloat const PanoramaGuideViewWOrH = 120;
         if (!self.showImageView.image) {
             return;
         }
-        CGFloat imageWidth = self.showImageView.image.size.width;
-        CGFloat imageHight = self.showImageView.image.size.height;
-        if (dir == PanoramaOrientationViewDown || dir == PanoramaOrientationViewUp) {
-            if (arrowDir == PanoramaArrowDirCenter) {
-                self.offSetLeft = @((120-38)/2);
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.bottom.offset(-(PanoramaGuideViewWOrH * imageWidth)/imageHight);
-////                    make.centerX.mas_equalTo(self);
-//                    make.left.mas_offset(self.offSetLeft.doubleValue);
-//                }];
-            } else if (arrowDir == PanoramaArrowDirLeft) {
-                self.offSetLeft = @(0);
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.bottom.offset(-(PanoramaGuideViewWOrH * imageWidth)/imageHight);
-////                    make.left.mas_equalTo(self).mas_offset(10);
-//                    make.left.mas_offset(self.offSetLeft.doubleValue);
-//
-//                }];
-            } else if (arrowDir == PanoramaArrowDirRight) {
-                self.offSetLeft = @(120-38);
-
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.bottom.offset(-(PanoramaGuideViewWOrH * imageWidth)/imageHight);
-////                    make.right.mas_equalTo(self).mas_offset(-10);
-//                    make.left.mas_offset(self.offSetLeft.doubleValue);
-//
-//                }];
+        if (self.dir == TgDirectionPortrait || self.dir == TgDirectionDown) {
+            if (dir == PanoramaOrientationViewDown || dir == PanoramaOrientationViewUp) {
+                if (arrowDir == PanoramaArrowDirCenter) {
+                    self.offSetLeft = @((120-38)/2);
+                } else if (arrowDir == PanoramaArrowDirLeft) {
+                    self.offSetLeft = @(0);
+                } else if (arrowDir == PanoramaArrowDirRight) {
+                    self.offSetLeft = @(120-38);
+                }
+            } else if (dir == PanoramaOrientationViewLeft || dir == PanoramaOrientationViewRight) {
+                if (arrowDir == PanoramaArrowDirCenter) {
+                    self.offSetTop = @((120-38)/2);
+                } else if (arrowDir == PanoramaArrowDirUp) {
+                    self.offSetTop = @(0);
+                } else if (arrowDir == PanoramaArrowDirDown) {
+                    self.offSetTop = @(120-38);
+                }
+                
             }
-        }
-//        else if (dir == PanoramaOrientationViewUp) {
-//            if (arrowDir == PanoramaArrowDirCenter) {
-//                self.offSetTop = @((120-38)/2);
-//
-////                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-////                    make.top.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-//////                    make.centerX.mas_equalTo(self);
-////                    make.top.mas_offset(self.offSetTop.doubleValue);
-////                }];
-//            } else if (arrowDir == PanoramaArrowDirLeft) {
-//                self.offSetTop = @((120-38)/2);
-//
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.top.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-//                    make.left.mas_equalTo(self).mas_offset(10);
-//                }];
-//            } else if (arrowDir == PanoramaArrowDirRight) {
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.top.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-//                    make.right.mas_equalTo(self).mas_offset(-10);
-//                }];
-//            }
-//
-//        }
-        else if (dir == PanoramaOrientationViewLeft || dir == PanoramaOrientationViewRight) {
-            if (arrowDir == PanoramaArrowDirCenter) {
-                self.offSetTop = @((120-38)/2);
-//
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.left.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-////                    make.centerY.mas_equalTo(self);
-//                    make.top.mas_offset(self.offSetTop.doubleValue);
-//
-//                }];
-            } else if (arrowDir == PanoramaArrowDirUp) {
-                self.offSetTop = @(0);
-
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.left.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-////                    make.top.mas_equalTo(self).mas_offset(10);
-//                    make.top.mas_offset(self.offSetTop.doubleValue);
-//
-//                }];
-            } else if (arrowDir == PanoramaArrowDirDown) {
-                self.offSetTop = @(120-38);
-
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.left.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-////                    make.bottom.mas_equalTo(self).mas_offset(-10);
-//                    make.top.mas_offset(self.offSetTop.doubleValue);
-//
-//                }];
+        } else if (self.dir == TgDirectionLeft || self.dir == TgDirectionRight) {
+            if (dir == PanoramaOrientationViewLeft || dir == PanoramaOrientationViewRight) {
+                if (arrowDir == PanoramaArrowDirCenter) {
+                    self.offSetLeft = @((120-38)/2);
+                } else if (arrowDir == PanoramaArrowDirLeft) {
+                    self.offSetLeft = @(0);
+                } else if (arrowDir == PanoramaArrowDirRight) {
+                    self.offSetLeft = @(120-38);
+                }
+            } else {
+                if (arrowDir == PanoramaArrowDirCenter) {
+                    self.offSetTop = @((120-38)/2);
+                } else if (arrowDir == PanoramaArrowDirUp) {
+                    self.offSetTop = @(0);
+                } else if (arrowDir == PanoramaArrowDirDown) {
+                    self.offSetTop = @(120-38);
+                }
             }
-            
         }
-//        else if (dir == PanoramaOrientationViewRight) {
-//            if (arrowDir == PanoramaArrowDirCenter) {
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.left.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-//                    make.centerY.mas_equalTo(self);
-//                }];
-//            } else if (arrowDir == PanoramaArrowDirUp) {
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.left.offset((PanoramaGuideViewWOrH * imageWidth)/imageHight);
-//                    make.top.mas_equalTo(self).mas_offset(10);
-//                }];
-//            } else if (arrowDir == PanoramaArrowDirDown) {
-//                [self.whiteArrow mas_remakeConstraints:^(MASConstraintMaker *make) {
-//                    make.right.offset(-(PanoramaGuideViewWOrH * imageWidth)/imageHight);
-//                    make.bottom.mas_equalTo(self).mas_offset(-10);
-//                }];
-//            }
-//        }
         
+        [self showImageWith:self.showImageView.image];
+
     });
 }
 
@@ -523,13 +865,13 @@ CGFloat const PanoramaGuideViewWOrH = 120;
     if (_label == nil) {
         NSAttributedString *att = [[NSAttributedString alloc]initWithString:@"请沿箭头方向匀速拍摄"];
         _label = [[YYLabel alloc]init];
-        _label.numberOfLines = 0;
+//        _label.numberOfLines = 0;
         _label.backgroundColor = [UIColor jk_colorWithHexString:@"000000" andAlpha:0.35];
         _label.attributedText = att;
         _label.textAlignment = NSTextAlignmentCenter;
         _label.layer.cornerRadius = 3;
         _label.layer.masksToBounds = YES;
-        _label.textVerticalAlignment = YYTextVerticalAlignmentCenter; // 文字置顶显示
+//        _label.textVerticalAlignment = YYTextVerticalAlignmentCenter; // 文字置顶显示
         _label.textColor = UIColor.whiteColor;
     }
     return _label;

+ 4 - 1
LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaOrientaionView/PanoramaOrientationView.h

@@ -20,7 +20,10 @@ typedef enum : NSUInteger {
 
 @protocol PanoramaOrientationViewDelegate <NSObject>
 
--(void)panoramaOrientationViewslt:(PanoramaOrientationViewDirectionEnum)direction;
+//-(void)panoramaOrientationViewslt:(PanoramaOrientationViewDirectionEnum)direction;
+
+- (void)panoramDirDidChange;
+
 
 @end
 @interface PanoramaOrientationView : UIView

+ 8 - 7
LenzCameraNativeModuleForRN/Classes/inner/UI/PanoramaOrientaionView/PanoramaOrientationView.m

@@ -37,7 +37,7 @@
         UILabel* paddingLabel = [[UILabel alloc] init];
         paddingLabel.textAlignment = NSTextAlignmentCenter;
         [self addSubview:paddingLabel];
-        paddingLabel.font = [UIFont systemFontOfSize:12];
+        paddingLabel.font = [UIFont systemFontOfSize:13];
         paddingLabel.text = text;
         paddingLabel.textColor = UIColor.whiteColor;
         paddingLabel.backgroundColor = UIColor.clearColor;
@@ -112,7 +112,8 @@
     [items.firstObject mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.equalTo(self.mas_left);
         make.top.bottom.equalTo(self);
-        make.height.mas_equalTo(30);
+        make.width.mas_offset(44);
+        make.height.mas_equalTo(22);
     }];
     PanoramaOrientationViewItem* previous = items.firstObject;
     for(int i = 1; i < 5; ++i){
@@ -130,7 +131,7 @@
     }];
 
 
-    self.selectedItemIndex = PanoramaOrientationViewLeft;
+    self.selectedItemIndex = PanoramaOrientationViewAny;
     self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.4];
     self.layer.cornerRadius = 3.5;
     self.layer.masksToBounds = YES;
@@ -146,8 +147,8 @@
 - (void)tapAction:(UITapGestureRecognizer *)tap {
     UIView *view = tap.view;
     self.selectedItemIndex = view.tag;
-    if ([self.delegate respondsToSelector:@selector(panoramaOrientationViewslt:)]) {
-        [self.delegate panoramaOrientationViewslt:view.tag];
+    if ([self.delegate respondsToSelector:@selector(panoramDirDidChange)]) {
+        [self.delegate panoramDirDidChange];
     }
 
 }
@@ -170,8 +171,8 @@
         [self.items enumerateKeysAndObjectsUsingBlock:^(NSNumber * _Nonnull key, __kindof PanoramaOrientationViewItem * _Nonnull obj, BOOL * _Nonnull stop) {
             if (CGRectContainsPoint(obj.frame, center)) {
                 self.selectedItemIndex = key.integerValue;
-                if ([self.delegate respondsToSelector:@selector(panoramaOrientationViewslt:)]) {
-                    [self.delegate panoramaOrientationViewslt:key.integerValue];
+                if ([self.delegate respondsToSelector:@selector(panoramDirDidChange)]) {
+                    [self.delegate panoramDirDidChange];
                 }
             }
         }];

+ 18 - 0
LenzCameraNativeModuleForRN/Classes/inner/UI/UIView+tool/UIImage+ImageRotate.h

@@ -0,0 +1,18 @@
+//
+//  UIImage+ImageRotate.h
+//  LenzSDK
+//
+//  Created by lr on 2023/5/18.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIImage (ImageRotate)
+
+- (UIImage *)imageRotateWithIndegree:(CGFloat)indegree;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 56 - 0
LenzCameraNativeModuleForRN/Classes/inner/UI/UIView+tool/UIImage+ImageRotate.m

@@ -0,0 +1,56 @@
+//
+//  UIImage+ImageRotate.m
+//  LenzSDK
+//
+//  Created by lr on 2023/5/18.
+//
+
+#import "UIImage+ImageRotate.h"
+#import <QuartzCore/QuartzCore.h>
+#import <Accelerate/Accelerate.h>
+
+@implementation UIImage (ImageRotate)
+
+
+#pragma mark - 图片旋转
+
+// 1 image --> Context 2. context  3. context --> image
+
+- (UIImage *)imageRotateWithIndegree:(CGFloat)indegree {
+    
+    
+    
+    // 1. image --> context
+    size_t width = (size_t)(self.size.height * self.scale);
+    size_t height = (size_t)(self.size.width * self.scale);
+
+    size_t bytesPerRow = width * 4;                        // 每行图片字节数
+    CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst;      // alpha
+    
+    CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault | alphaInfo);
+    
+    if (!bmContext) {
+        return nil;
+    }
+    
+    CGContextDrawImage(bmContext, CGRectMake(0, 0, width, height), self.CGImage);
+    
+    // 2. 旋转
+    UInt8 * data = (UInt8 *)CGBitmapContextGetData(bmContext);
+    
+    // 需要引入 #import <Accelerate/Accelerate.h>  解释这个类干什么用的
+    vImage_Buffer src = {data,height,width,bytesPerRow};
+    vImage_Buffer dest = {data,height,width,bytesPerRow};
+    Pixel_8888 bgColor = {0,0,0,0};
+    vImageRotate_ARGB8888(&src, &dest, NULL, indegree, bgColor, kvImageBackgroundColorFill);
+    
+    // 3. context --> UIImage
+    CGImageRef rotateImageRef = CGBitmapContextCreateImage(bmContext);
+    UIImage * rotateImage = [UIImage imageWithCGImage:rotateImageRef scale:self.scale orientation:self.imageOrientation];
+    
+    CGContextRelease(bmContext);
+    CGImageRelease(rotateImageRef);
+    return rotateImage;
+}
+
+@end

+ 8 - 8
LenzCameraNativeModuleForRN/Classes/inner/VC.storyboard

@@ -120,14 +120,14 @@
                                 <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <nil key="highlightedColor"/>
                             </label>
-                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="单拍模式" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="47K-Og-STx">
-                                <rect key="frame" x="180.5" y="83" width="53.5" height="16"/>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="单拍模式" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="47K-Og-STx">
+                                <rect key="frame" x="180.5" y="76" width="53.5" height="16"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="13"/>
                                 <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <nil key="highlightedColor"/>
                             </label>
-                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00:00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NZ4-JN-bQc" customClass="TimerLabel">
-                                <rect key="frame" x="161.5" y="80.5" width="91" height="21"/>
+                            <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NZ4-JN-bQc" customClass="TimerLabel">
+                                <rect key="frame" x="161.5" y="76" width="91" height="21"/>
                                 <color key="backgroundColor" red="0.92156862750000001" green="0.3294117647" blue="0.27450980390000002" alpha="1" colorSpace="calibratedRGB"/>
                                 <constraints>
                                     <constraint firstAttribute="width" constant="91" id="02u-b1-BAs"/>
@@ -137,10 +137,10 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Lp-cE-Qcw" customClass="PanoramaOrientationView">
-                                <rect key="frame" x="82" y="700" width="250" height="30"/>
+                                <rect key="frame" x="97" y="700" width="220" height="30"/>
                                 <color key="backgroundColor" systemColor="systemPurpleColor"/>
                                 <constraints>
-                                    <constraint firstAttribute="width" constant="250" id="EfH-5x-k3r"/>
+                                    <constraint firstAttribute="width" constant="220" id="EfH-5x-k3r"/>
                                     <constraint firstAttribute="height" constant="30" placeholder="YES" id="eWf-j2-49O"/>
                                 </constraints>
                             </view>
@@ -155,7 +155,6 @@
                         <constraints>
                             <constraint firstAttribute="bottom" secondItem="382-n1-wn0" secondAttribute="bottom" id="41e-a5-Rhk"/>
                             <constraint firstAttribute="bottom" secondItem="LOu-Cg-zR1" secondAttribute="bottom" id="5l5-XK-lrO"/>
-                            <constraint firstItem="47K-Og-STx" firstAttribute="centerY" secondItem="7WQ-5N-eNK" secondAttribute="centerY" id="7bB-6b-Sqm"/>
                             <constraint firstItem="WFx-Yh-LWF" firstAttribute="leading" secondItem="i1l-LJ-al9" secondAttribute="trailing" constant="20" id="8kj-ul-AME"/>
                             <constraint firstItem="ff6-rt-big" firstAttribute="centerX" secondItem="7Gh-4U-PQm" secondAttribute="centerX" id="ARf-Ve-LgG"/>
                             <constraint firstItem="382-n1-wn0" firstAttribute="left" secondItem="5EZ-qb-Rvc" secondAttribute="left" id="B1P-ne-I0C"/>
@@ -163,12 +162,13 @@
                             <constraint firstItem="47K-Og-STx" firstAttribute="centerX" secondItem="vDu-zF-Fre" secondAttribute="centerX" id="DK1-Lo-FAP"/>
                             <constraint firstItem="EmB-uD-8uJ" firstAttribute="top" secondItem="7WQ-5N-eNK" secondAttribute="bottom" constant="15" id="Iq8-vC-N7k"/>
                             <constraint firstItem="sWX-pF-oOq" firstAttribute="trailing" secondItem="vDu-zF-Fre" secondAttribute="trailing" id="Jv5-CI-Yvb"/>
-                            <constraint firstItem="NZ4-JN-bQc" firstAttribute="centerY" secondItem="47K-Og-STx" secondAttribute="centerY" id="L9e-77-Ok0"/>
+                            <constraint firstItem="NZ4-JN-bQc" firstAttribute="centerY" secondItem="47K-Og-STx" secondAttribute="centerY" constant="2.5" id="L9e-77-Ok0"/>
                             <constraint firstItem="ce1-TG-wkP" firstAttribute="bottom" secondItem="7Lp-cE-Qcw" secondAttribute="bottom" constant="30" id="Nly-xH-jfA"/>
                             <constraint firstItem="Cid-tw-AOV" firstAttribute="leading" secondItem="WFx-Yh-LWF" secondAttribute="trailing" constant="20" id="OL4-05-0Ol"/>
                             <constraint firstItem="vDu-zF-Fre" firstAttribute="bottom" secondItem="WFx-Yh-LWF" secondAttribute="bottom" constant="10" id="OXQ-zM-yde"/>
                             <constraint firstItem="382-n1-wn0" firstAttribute="top" secondItem="5EZ-qb-Rvc" secondAttribute="top" id="RGg-qC-cd7"/>
                             <constraint firstItem="WFx-Yh-LWF" firstAttribute="centerX" secondItem="vDu-zF-Fre" secondAttribute="centerX" id="S4u-BR-VM5"/>
+                            <constraint firstItem="47K-Og-STx" firstAttribute="top" secondItem="vDu-zF-Fre" secondAttribute="top" constant="32" id="aVZ-Rs-yOB"/>
                             <constraint firstAttribute="trailing" secondItem="LOu-Cg-zR1" secondAttribute="trailing" id="b2S-Sj-Lok"/>
                             <constraint firstItem="7Gh-4U-PQm" firstAttribute="leading" secondItem="vDu-zF-Fre" secondAttribute="leading" constant="15" id="b4o-2a-J3u"/>
                             <constraint firstItem="YjN-bX-F51" firstAttribute="centerY" secondItem="WFx-Yh-LWF" secondAttribute="centerY" id="cLt-R6-oCd"/>

+ 2 - 2
LenzSDK.podspec

@@ -8,7 +8,7 @@
 
 Pod::Spec.new do |s|
   s.name             = 'LenzSDK'
-  s.version          = '2.0.2'
+  s.version          = '2.3.10'
   s.summary          = 'A short description of LenzSDK.'
 
 # This description is used to generate tags and improve search results.
@@ -25,7 +25,7 @@ Pod::Spec.new do |s|
   s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
   s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
 
-  s.ios.deployment_target = '11.0'
+  s.ios.deployment_target = '12.0'
 
   s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
   

+ 47 - 0
LenzSDK/2.0.3/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.0.3'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.0.4/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.0.4'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.0.5/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.0.5'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.0.6/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.0.6'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.0.7/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.0.7'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.0.8/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.0.8'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.0.9/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.0.9'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.1.0/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.1.0'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '11.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.0/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.0'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.1/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.1'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.10/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.10'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.11/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.11'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.2/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.2'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.3/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.3'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.5/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.5'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.6/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.6'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.7/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.7'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.8/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.8'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.2.9/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.2.9'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.0/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.0'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.1/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.1'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.10/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.10'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.2/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.2'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.3/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.3'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.4/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.4'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.5/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.5'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.6/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.6'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.7/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.7'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.8/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.8'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK/2.3.9/LenzSDK.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK'
+  s.version          = '2.3.9'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { '76930516@qq.com' => 'wangzhaowei1991@gmail.com' }
+  s.source           = { :git => 'http://39.96.8.150:10080/l405023944/LenzSDK_iOS.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 47 - 0
LenzSDK_iOS.podspec

@@ -0,0 +1,47 @@
+#
+# Be sure to run `pod lib lint LenzCameraNativeModuleForRN.podspec' to ensure this is a
+# valid spec before submitting.
+#
+# Any lines starting with a # are optional, but their use is encouraged
+# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
+#
+
+Pod::Spec.new do |s|
+  s.name             = 'LenzSDK_iOS'
+  s.version          = '2.3.10'
+  s.summary          = 'A short description of LenzSDK.'
+
+# This description is used to generate tags and improve search results.
+#   * Think: What does it do? Why did you write it? What is the focus?
+#   * Try to keep it short, snappy and to the point.
+#   * Write the description between the DESC delimiters below.
+#   * Finally, don't worry about the indent, CocoaPods strips it!
+
+  s.description  = "this  is the long description"
+
+  s.homepage         = 'https://gitlab.langjtech.com/sililan/lenzsdk.git'
+  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
+  s.license          = { :type => 'MIT', :file => 'LICENSE' }
+  s.author           = { 'l405023944' => 'guoshaoyi@qq.com' }
+  s.source           = { :git => 'https://gitlab.langjtech.com/sililan/lenzsdk.git', :tag => s.version.to_s }
+
+  s.ios.deployment_target = '12.0'
+
+  s.source_files = 'LenzCameraNativeModuleForRN/Classes/**/*'
+  
+  s.resource_bundles = {
+    'LenzCameraNativeModuleForRN' => ['LenzCameraNativeModuleForRN/Assets/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings,tflite}', 'LenzCameraNativeModuleForRN/Classes/inner/**/*.{png,jpeg,jpg,storyboard,xib,xcassets,strings}']
+  }
+
+  s.public_header_files = 'LenzCameraNativeModuleForRN/Classes/headers/*.h'
+  # s.ios.public_header_files = 
+  s.frameworks = 'UIKit', 'MapKit', 'WebKit', 'AdSupport', 'Accelerate' ,'MediaPlayer', 'CoreData', 'SystemConfiguration' ,'CoreServices' ,'AssetsLibrary' ,'CoreTelephony' ,'CoreMotion' ,'Photos' ,'AVFoundation' ,'CoreMedia'
+  s.vendored_frameworks = 'LenzTensorFlowSDK.framework', "LenzStitchSDK.framework"
+  s.libraries = "c++", "z"
+  s.dependency "Masonry", '1.1.0'
+  s.dependency 'YYText'
+  s.dependency 'SVProgressHUD', '~> 2.2.5'
+  s.dependency 'OpenCV2', '~> 4.3.0'
+  s.dependency "TensorFlowLite", '~> 1.13.1'
+
+end

+ 2 - 0
LenzStitchSDK.framework/Headers/lenz_stitch_jni.hpp

@@ -46,6 +46,8 @@ const char* getTestCurrentPanoramaShow(void);
 
 cv::Mat getCurrentPanoramsShowMat(void);
 
+
+
 #endif
 
 

+ 138 - 0
LenzStitchSDK.framework/Headers/lenz_stitcher.hpp

@@ -0,0 +1,138 @@
+//
+//  lenz_stitcher.hpp
+//  LenzCameraNativeModuleForRN
+//
+//  Created by lr on 2023/2/8.
+//
+
+#ifndef lenz_stitcher_hpp
+#define lenz_stitcher_hpp
+
+#if __cplusplus && __has_include(<opencv2/imgcodecs/ios.h>)
+
+#import <opencv2/core/ocl.hpp>
+#import <opencv2/opencv.hpp>
+
+#include <iostream>
+#include <thread>
+#include <vector>
+#include <string>
+#include <random>
+#include <math.h>
+#include <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+using namespace cv;
+using namespace cv::detail;
+using namespace cv::ocl;
+using namespace std;
+
+#define STITCH_STATUS_INIT 0
+#define STITCH_STATUS_CHECKING 1
+#define STITCH_STATUS_STITCHING 2
+#define STITCH_STATUS_FREE 3
+#define STITCH_STATUS_FAILED 4
+
+#define FEATURE_HEIGHT 300
+#define STITCH_HEIGHT 300
+#define BIG_STITCH_HEIGHT 1000
+#define BIG_FEATURE_HEIGHT 800
+
+#define MAX_SIZE 4000      // 缩略图的最大尺寸,长或宽都不能超过MAX_SIZE*MAX_SIZE,否则直接报错
+#define BIG_MAX_SIZE 10000 // 拼接大图的最大尺寸, 长或宽都不能超过BIG_MAX_SIZE
+
+struct stitch_data
+{
+    Mat scaled_gray_frame;
+    float work_scale;
+    vector<KeyPoint> keypoints;
+    Mat descriptors;
+    Mat homo = (Mat_<double>(3, 3) << 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0); // store homography matrix to base image
+    Mat base_homo = (Mat_<double>(3, 3) << 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0); // store homography matrix to last base image
+};
+
+struct LinePara
+{
+    float k;
+    float b;
+};
+
+string test_image_path = "";
+
+class LenzStitcher
+{
+public:
+    string task_id = "";
+    string local_path = "";
+    int stitcher_status = STITCH_STATUS_INIT; // 0: initialized, 1: checking, 2: stitching, 3: free
+
+    int failed_count = 0;  // 当前连续失败的帧数
+    int failed_thresh = 10; // 连续5帧失败才返回失败
+
+    float iou_thresh = 0.7;  // iou低于该阈值的时候把这张图片存下来
+    float area_thresh = 0.5; // area threshold for green box
+    float angle_thresh = 10; // angle threshold for green box
+    float inline_thresh = 0.1; // 光流法匹配的点的比例至少要大于这个值,才认为是正确的映射矩阵
+    int matches_thresh = 10; // 前后两帧基于光流的匹配点的个数的阈值,低于该值则无法进行拼接
+    float check_match_conf = 0.2f;
+    int frame_index = 0;
+    vector<Point2f> last_warp_points; // 上一张存下来的图的四个点在拼接图上的坐标
+    int big_frame_index = 0;          // 存下来的帧的信息
+    float total_shift_x = 0;
+    float total_shift_y = 0;
+
+    Mat last_frame;
+    Mat last_stitch_image = Mat(); // 最后一张拼接缩略图
+    int last_direction = 0;        // 上一帧的手机移动方向
+    vector<float> last_angles = vector<float>{90, 90, 90, 90};
+    string last_stitch_image_path = ""; // 拼接缩略图的本地路径
+    stitch_data last_check_data;        // 上一帧的数据
+    string big_stitch_image_path = "";  // 拼接大图的本地路径
+
+    string test_image_path = ""; // test
+
+    LenzStitcher(string input_id);
+    int *ofcheck_stitch(Mat &frame, int const direction, int const is_last_one); // 输入每一帧实时产生拼接缩略图
+
+    bool get_big_image(int get_big_image); // 在收到当前帧是最后一帧的时候运行,会用之前存下来的帧数据产生最后的拼接大图
+    void remove_local_path();
+};
+
+bool is_good_homo(const vector<Point2f> &corners, const Mat &frame, float area_thresh, float angle_thresh);
+bool is_convex(const vector<Point2f> &corners);
+float calc_area(const vector<Point2f> &corners, const Mat &frame);
+float min_axis(vector<float> input_list);
+float max_axis(vector<float> input_list);
+float calc_angle(const vector<cv::Point2f> &conners);
+float calc_vangle(const vector<cv::Point2f> &conners);
+float calc_hangle(const vector<cv::Point2f> &conners);
+void double_match(const Mat &query_des, const Mat &train_des, vector<DMatch> &good_matches, float check_match_conf);
+void single_match(const Mat &query_des, const Mat &train_des, vector<DMatch> &good_matches, float check_match_conf);
+void getFilePath(const char *path, const char *filename, char *filepath);
+void deleteFile(const char *path);
+bool isFloderexit(const char *path);
+void randomSelectKeyPoints(vector<KeyPoint> kpts, vector<Point2f> &pts, int max_num);
+void optimizeSeam(Mat &last_img, Mat &stitched_image, vector<Point2f> &corners);
+void getLinePara(float x1, float y1, float x2, float y2, LinePara &LP);
+float point_2_line(float k, float b, float k2, float x, float y);
+int get_direction(vector<Point2f> &frame_corners, vector<Point2f> &transpose_corners);
+int dcmp(float x);
+float cross(Point2f a, Point2f b, Point2f c);
+float CPIA(vector<Point2f> a, vector<Point2f> b, int na, int nb);
+float SPIA(vector<Point2f> a, vector<Point2f> b, int na, int nb);
+Point2f get_intersection_point(Point2f a, Point2f b, Point2f c, Point2f d);
+float PolygonArea(vector<Point2f> p, int n);
+float single_quadrangle_iou(vector<Point2f> pts1, vector<Point2f> pts2);
+float single_box_iou(vector<Point2f> pts1, vector<Point2f> pts2);
+void stitch_big_image(Mat frame, vector<float> angles, int direction, int big_frame_index);
+void cylindrical_projection(Mat &img, Mat &output, float angle);
+void fill_contours(vector<vector<Point>> contours, Mat &source_image, Mat &target_image);
+float angle_of_two_vector(Point2f &pt1, Point2f &pt2, Point2f &c);
+void calc_angles(vector<Point2f> &conners);
+
+
+#endif
+
+#endif

TEMPAT SAMPAH
LenzStitchSDK.framework/LenzStitchSDK


TEMPAT SAMPAH
LenzStitchSDK.framework/_CodeSignature/CodeDirectory


TEMPAT SAMPAH
LenzStitchSDK.framework/_CodeSignature/CodeRequirements-1


+ 18 - 3
LenzStitchSDK.framework/_CodeSignature/CodeResources

@@ -14,7 +14,11 @@
 		</data>
 		<key>Headers/lenz_stitch_jni.hpp</key>
 		<data>
-		BiWMBnP4j0+CuhQUrzL60L65CHc=
+		eHEqnYRibWGq99OMfYh/tNt85zA=
+		</data>
+		<key>Headers/lenz_stitcher.hpp</key>
+		<data>
+		A8S3alqzGWa9zAKR1mtQZBDPstc=
 		</data>
 		<key>Info.plist</key>
 		<data>
@@ -53,11 +57,22 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			BiWMBnP4j0+CuhQUrzL60L65CHc=
+			eHEqnYRibWGq99OMfYh/tNt85zA=
+			</data>
+			<key>hash2</key>
+			<data>
+			5fADOFBRoq2n70+yLTpvcgewJAj6mBdYeNV7ajolkls=
+			</data>
+		</dict>
+		<key>Headers/lenz_stitcher.hpp</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			A8S3alqzGWa9zAKR1mtQZBDPstc=
 			</data>
 			<key>hash2</key>
 			<data>
-			XXLOZB3e0u9OU3Qqoad7mMTT7hgvQcpE4kDHoqMrF0A=
+			DtF2/KVgCGICzVxE8MASuJz6srILU91n1Ri4feqpjIY=
 			</data>
 		</dict>
 		<key>Modules/module.modulemap</key>

TEMPAT SAMPAH
LenzStitchSDK.framework/_CodeSignature/CodeSignature


TEMPAT SAMPAH
LenzTensorFlowSDK.framework/LenzTensorFlowSDK


TEMPAT SAMPAH
LenzTensorFlowSDK.framework/_CodeSignature/CodeDirectory


TEMPAT SAMPAH
LenzTensorFlowSDK.framework/_CodeSignature/CodeRequirements-1


+ 30 - 0
LenzTensorFlowSDK.framework/_CodeSignature/CodeResources

@@ -4,6 +4,14 @@
 <dict>
 	<key>files</key>
 	<dict>
+		<key>Headers/LenzTensorFlow.h</key>
+		<data>
+		VeGZRPeUzABprxh5r63OqLeBg1Q=
+		</data>
+		<key>Headers/LenzTensorFlowLib.h</key>
+		<data>
+		LTJK0l+VKSJ9UNVrgCfffrgeqQ4=
+		</data>
 		<key>Headers/LenzTensorFlowSDK.h</key>
 		<data>
 		y9iqg7O6awzYa8kOgmfH1Q8rzQs=
@@ -19,6 +27,28 @@
 	</dict>
 	<key>files2</key>
 	<dict>
+		<key>Headers/LenzTensorFlow.h</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			VeGZRPeUzABprxh5r63OqLeBg1Q=
+			</data>
+			<key>hash2</key>
+			<data>
+			9NfCsOXoHUYlTW4sukl7NAc6hVyIZcUdFw+3Lr/GURI=
+			</data>
+		</dict>
+		<key>Headers/LenzTensorFlowLib.h</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			LTJK0l+VKSJ9UNVrgCfffrgeqQ4=
+			</data>
+			<key>hash2</key>
+			<data>
+			yWjk54msJb+5rpTFpv3RMHFjZGoYgRava773DQHSe3k=
+			</data>
+		</dict>
 		<key>Headers/LenzTensorFlowSDK.h</key>
 		<dict>
 			<key>hash</key>

TEMPAT SAMPAH
LenzTensorFlowSDK.framework/_CodeSignature/CodeSignature


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini