Merge branch 'master' into yunying_tagPoint

This commit is contained in:
bluesea 2024-05-21 18:08:13 +08:00
commit 0b5b42c2bd
8 changed files with 1369 additions and 1858 deletions

View File

@ -20,6 +20,9 @@
006B61D32BBAA938003FCB49 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 006B61D22BBAA938003FCB49 /* StoreKit.framework */; }; 006B61D32BBAA938003FCB49 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 006B61D22BBAA938003FCB49 /* StoreKit.framework */; };
006B61DC2BBCFAC4003FCB49 /* CustomSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61DB2BBCFAC4003FCB49 /* CustomSheetController.swift */; }; 006B61DC2BBCFAC4003FCB49 /* CustomSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61DB2BBCFAC4003FCB49 /* CustomSheetController.swift */; };
006B61DE2BBCFB45003FCB49 /* CustomSheetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61DD2BBCFB45003FCB49 /* CustomSheetCell.swift */; }; 006B61DE2BBCFB45003FCB49 /* CustomSheetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61DD2BBCFB45003FCB49 /* CustomSheetCell.swift */; };
00733EA92BFB462500D53BA8 /* CCSpatialShootController+SessionConfigure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00733EA82BFB462500D53BA8 /* CCSpatialShootController+SessionConfigure.swift */; };
00733EAB2BFB471100D53BA8 /* CCSpatialShootController+CaputreAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00733EAA2BFB471100D53BA8 /* CCSpatialShootController+CaputreAction.swift */; };
00733EAD2BFB47AE00D53BA8 /* CCSpatialShootController+Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00733EAC2BFB47AE00D53BA8 /* CCSpatialShootController+Generate.swift */; };
0073BD142BCE80F700721885 /* ZZHCustomPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD132BCE80F700721885 /* ZZHCustomPlayer.swift */; }; 0073BD142BCE80F700721885 /* ZZHCustomPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD132BCE80F700721885 /* ZZHCustomPlayer.swift */; };
0073BD182BCF7B3400721885 /* ZZHCustomSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD172BCF7B3400721885 /* ZZHCustomSlider.swift */; }; 0073BD182BCF7B3400721885 /* ZZHCustomSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD172BCF7B3400721885 /* ZZHCustomSlider.swift */; };
0073BD1A2BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD192BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift */; }; 0073BD1A2BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD192BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift */; };
@ -135,6 +138,9 @@
006B61DD2BBCFB45003FCB49 /* CustomSheetCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomSheetCell.swift; sourceTree = "<group>"; }; 006B61DD2BBCFB45003FCB49 /* CustomSheetCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomSheetCell.swift; sourceTree = "<group>"; };
0072361E2BD13B9D000595A9 /* ZZHCustomVideoCompositor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomVideoCompositor.swift; sourceTree = "<group>"; }; 0072361E2BD13B9D000595A9 /* ZZHCustomVideoCompositor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomVideoCompositor.swift; sourceTree = "<group>"; };
007236202BD13C75000595A9 /* ZZHCustomVideoCompositionInstruction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomVideoCompositionInstruction.swift; sourceTree = "<group>"; }; 007236202BD13C75000595A9 /* ZZHCustomVideoCompositionInstruction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomVideoCompositionInstruction.swift; sourceTree = "<group>"; };
00733EA82BFB462500D53BA8 /* CCSpatialShootController+SessionConfigure.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CCSpatialShootController+SessionConfigure.swift"; sourceTree = "<group>"; };
00733EAA2BFB471100D53BA8 /* CCSpatialShootController+CaputreAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CCSpatialShootController+CaputreAction.swift"; sourceTree = "<group>"; };
00733EAC2BFB47AE00D53BA8 /* CCSpatialShootController+Generate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CCSpatialShootController+Generate.swift"; sourceTree = "<group>"; };
0073BD132BCE80F700721885 /* ZZHCustomPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomPlayer.swift; sourceTree = "<group>"; }; 0073BD132BCE80F700721885 /* ZZHCustomPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomPlayer.swift; sourceTree = "<group>"; };
0073BD172BCF7B3400721885 /* ZZHCustomSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomSlider.swift; sourceTree = "<group>"; }; 0073BD172BCF7B3400721885 /* ZZHCustomSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomSlider.swift; sourceTree = "<group>"; };
0073BD192BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomPlayerForVideoTask.swift; sourceTree = "<group>"; }; 0073BD192BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHCustomPlayerForVideoTask.swift; sourceTree = "<group>"; };
@ -309,6 +315,17 @@
path = deapt; path = deapt;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
00733EA72BFB460C00D53BA8 /* CCSpatialShootController */ = {
isa = PBXGroup;
children = (
1EE5C5F62B8F973A00EDFC2F /* CCSpatialShootController.swift */,
00733EA82BFB462500D53BA8 /* CCSpatialShootController+SessionConfigure.swift */,
00733EAA2BFB471100D53BA8 /* CCSpatialShootController+CaputreAction.swift */,
00733EAC2BFB47AE00D53BA8 /* CCSpatialShootController+Generate.swift */,
);
path = CCSpatialShootController;
sourceTree = "<group>";
};
0096624B2BB3BA0100FCA65F /* ExternalScreen */ = { 0096624B2BB3BA0100FCA65F /* ExternalScreen */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -380,7 +397,7 @@
children = ( children = (
009B28AE2BC2692F006D8B8E /* CCSpatialPhotoDisplayController */, 009B28AE2BC2692F006D8B8E /* CCSpatialPhotoDisplayController */,
009662582BB5527200FCA65F /* CCSpatialVideoDisplayController */, 009662582BB5527200FCA65F /* CCSpatialVideoDisplayController */,
1EE5C5F62B8F973A00EDFC2F /* CCSpatialShootController.swift */, 00733EA72BFB460C00D53BA8 /* CCSpatialShootController */,
1E39459F2B8398B000D0F5CA /* VRVideoTransformController.swift */, 1E39459F2B8398B000D0F5CA /* VRVideoTransformController.swift */,
1EFAF0BF2B8B7A59002A1773 /* VRPhotoTransformController.swift */, 1EFAF0BF2B8B7A59002A1773 /* VRPhotoTransformController.swift */,
); );
@ -872,6 +889,7 @@
AF2120E62B4E9DE000400B7F /* CCTableSwitchView.swift in Sources */, AF2120E62B4E9DE000400B7F /* CCTableSwitchView.swift in Sources */,
0096624D2BB3BA3B00FCA65F /* ZZHExternalViewController.swift in Sources */, 0096624D2BB3BA3B00FCA65F /* ZZHExternalViewController.swift in Sources */,
00D33BFA2B9AB21A00604A44 /* ZZHAVExtension.swift in Sources */, 00D33BFA2B9AB21A00604A44 /* ZZHAVExtension.swift in Sources */,
00733EAD2BFB47AE00D53BA8 /* CCSpatialShootController+Generate.swift in Sources */,
009661F82BAD6C7100FCA65F /* CCSpaceAlbumFilterPopView2.swift in Sources */, 009661F82BAD6C7100FCA65F /* CCSpaceAlbumFilterPopView2.swift in Sources */,
009DFB132BC8EA90007B56E8 /* MenuVCCell.swift in Sources */, 009DFB132BC8EA90007B56E8 /* MenuVCCell.swift in Sources */,
AF2120E02B4E9C8000400B7F /* Timer+Add.swift in Sources */, AF2120E02B4E9C8000400B7F /* Timer+Add.swift in Sources */,
@ -883,6 +901,7 @@
AFD9F5952B58D029008716DE /* MetalPlayer.swift in Sources */, AFD9F5952B58D029008716DE /* MetalPlayer.swift in Sources */,
AF2121002B4EA5FE00400B7F /* CCRegisterController.swift in Sources */, AF2121002B4EA5FE00400B7F /* CCRegisterController.swift in Sources */,
AF2120D02B4E982300400B7F /* CCUserDefault.swift in Sources */, AF2120D02B4E982300400B7F /* CCUserDefault.swift in Sources */,
00733EA92BFB462500D53BA8 /* CCSpatialShootController+SessionConfigure.swift in Sources */,
AF2120EC2B4EA2FC00400B7F /* BaseController.swift in Sources */, AF2120EC2B4EA2FC00400B7F /* BaseController.swift in Sources */,
AF2120D22B4E99E600400B7F /* CCAddImage.swift in Sources */, AF2120D22B4E99E600400B7F /* CCAddImage.swift in Sources */,
AF2120E42B4E9D5A00400B7F /* CCSMSView.swift in Sources */, AF2120E42B4E9D5A00400B7F /* CCSMSView.swift in Sources */,
@ -905,6 +924,7 @@
AF2120FE2B4EA5F100400B7F /* CCLoginController.swift in Sources */, AF2120FE2B4EA5F100400B7F /* CCLoginController.swift in Sources */,
006B61CF2BBA5D0A003FCB49 /* MembershipVCConfigureView.swift in Sources */, 006B61CF2BBA5D0A003FCB49 /* MembershipVCConfigureView.swift in Sources */,
AF2120CE2B4E979500400B7F /* CCTextField.swift in Sources */, AF2120CE2B4E979500400B7F /* CCTextField.swift in Sources */,
00733EAB2BFB471100D53BA8 /* CCSpatialShootController+CaputreAction.swift in Sources */,
1E1EA2882B9325D300A5D5D2 /* CCSpatialPhotoDisplayController.swift in Sources */, 1E1EA2882B9325D300A5D5D2 /* CCSpatialPhotoDisplayController.swift in Sources */,
006B61DC2BBCFAC4003FCB49 /* CustomSheetController.swift in Sources */, 006B61DC2BBCFAC4003FCB49 /* CustomSheetController.swift in Sources */,
); );

View File

@ -50,38 +50,6 @@
endingLineNumber = "141" endingLineNumber = "141"
landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)" landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "861A7483-B1E7-42C3-840B-310497DFBDC4 - 30a991d4c8b10ec"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #1 (SwiftProject.CCSpatialDisplayTypeConfigure) -&gt; () in SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "119"
endingLineNumber = "119"
offsetFromSymbolStart = "96">
</Location>
<Location
uuid = "861A7483-B1E7-42C3-840B-310497DFBDC4 - 30a991d4c8b10ec"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #1 (SwiftProject.CCSpatialDisplayTypeConfigure) -&gt; () in SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "119"
endingLineNumber = "119"
offsetFromSymbolStart = "260">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -130,38 +98,6 @@
endingLineNumber = "103" endingLineNumber = "103"
landmarkName = "convertVideo(asset:outputFile:type:progress:)" landmarkName = "convertVideo(asset:outputFile:type:progress:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "AC12A8D6-51D9-4E5A-B902-E05E9C3A533D - 949edb90126739b4"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "(9) suspend resume partial function for SwiftProject.SpatialVideoConvertor.convertVideo(asset: __C.AVAsset, outputFile: Foundation.URL, type: SwiftProject.Video3DFormat, progress: Swift.Optional&lt;(Swift.Float) -&gt; ()&gt;) async throws -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Util/SpatialVideoConvertor.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "94"
endingLineNumber = "94"
offsetFromSymbolStart = "3140">
</Location>
<Location
uuid = "AC12A8D6-51D9-4E5A-B902-E05E9C3A533D - 3e8f5de0faefa96a"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "(11) suspend resume partial function for SwiftProject.SpatialVideoConvertor.convertVideo(asset: __C.AVAsset, outputFile: Foundation.URL, type: SwiftProject.Video3DFormat, progress: Swift.Optional&lt;(Swift.Float) -&gt; ()&gt;) async throws -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Util/SpatialVideoConvertor.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "94"
endingLineNumber = "94"
offsetFromSymbolStart = "3188">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -231,38 +167,6 @@
endingLineNumber = "349" endingLineNumber = "349"
landmarkName = "filtersButtonAction()" landmarkName = "filtersButtonAction()"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "621D6F2E-FB8B-438E-8C37-01BA41381AA3 - 5112fde4769b479c"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #1 (Swift.Int) -&gt; () in SwiftProject.CCSpaceAlbumFliterPopView.filtersButtonAction() -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFliterPopView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "355"
endingLineNumber = "355"
offsetFromSymbolStart = "996">
</Location>
<Location
uuid = "621D6F2E-FB8B-438E-8C37-01BA41381AA3 - 5112fde4769b47fd"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #1 (Swift.Int) -&gt; () in SwiftProject.CCSpaceAlbumFliterPopView.filtersButtonAction() -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFliterPopView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "354"
endingLineNumber = "354"
offsetFromSymbolStart = "996">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -343,38 +247,6 @@
endingLineNumber = "366" endingLineNumber = "366"
landmarkName = "loadMoreData(offset:)" landmarkName = "loadMoreData(offset:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "185788B7-62F3-4E0C-9396-78ABE1E78628 - 43721050df86c6"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpaceAlbumFilterPopView2.loadMoreData(offset: Swift.Int) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFilterPopView2.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "363"
endingLineNumber = "363"
offsetFromSymbolStart = "1748">
</Location>
<Location
uuid = "185788B7-62F3-4E0C-9396-78ABE1E78628 - 43721050df86a5"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpaceAlbumFilterPopView2.loadMoreData(offset: Swift.Int) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFilterPopView2.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "364"
endingLineNumber = "364"
offsetFromSymbolStart = "1352">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -387,8 +259,8 @@
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController.swift" filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController.swift"
startingColumnNumber = "9223372036854775807" startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807"
startingLineNumber = "1238" startingLineNumber = "1195"
endingLineNumber = "1238" endingLineNumber = "1195"
landmarkName = "compositeSpatialPhoto()" landmarkName = "compositeSpatialPhoto()"
landmarkType = "7"> landmarkType = "7">
</BreakpointContent> </BreakpointContent>
@ -486,39 +358,7 @@
startingLineNumber = "169" startingLineNumber = "169"
endingLineNumber = "169" endingLineNumber = "169"
landmarkName = "show(praiseCallback:negativeCallback:)" landmarkName = "show(praiseCallback:negativeCallback:)"
landmarkType = "9"> landmarkType = "7">
<Locations>
<Location
uuid = "B6E2DD19-CC45-4EF2-94A7-8DFC039BBE5E - 8f11d5983f12631c"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "static SwiftProject.FeedbackView.show(praiseCallback: () -&gt; (), negativeCallback: () -&gt; ()) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/FeedbackView/FeedbackView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "155"
endingLineNumber = "155"
offsetFromSymbolStart = "264">
</Location>
<Location
uuid = "B6E2DD19-CC45-4EF2-94A7-8DFC039BBE5E - 8f11d5983f121d73"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "static SwiftProject.FeedbackView.show(praiseCallback: () -&gt; (), negativeCallback: () -&gt; ()) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/FeedbackView/FeedbackView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "170"
endingLineNumber = "170"
offsetFromSymbolStart = "264">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -567,53 +407,6 @@
endingLineNumber = "267" endingLineNumber = "267"
landmarkName = "touchesCancelled(_:with:)" landmarkName = "touchesCancelled(_:with:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "91D72EA1-7A61-4702-B30F-5B860A817DC7 - f5a1762b3e6912b0"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSlider.touchesCancelled(_: Swift.Set&lt;__C.UITouch&gt;, with: Swift.Optional&lt;__C.UIEvent&gt;) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "265"
endingLineNumber = "265"
offsetFromSymbolStart = "560">
</Location>
<Location
uuid = "91D72EA1-7A61-4702-B30F-5B860A817DC7 - f5a1762b3e691297"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSlider.touchesCancelled(_: Swift.Set&lt;__C.UITouch&gt;, with: Swift.Optional&lt;__C.UIEvent&gt;) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "266"
endingLineNumber = "266"
offsetFromSymbolStart = "560">
</Location>
<Location
uuid = "91D72EA1-7A61-4702-B30F-5B860A817DC7 - f5a1762b3e6912f6"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSlider.touchesCancelled(_: Swift.Set&lt;__C.UITouch&gt;, with: Swift.Optional&lt;__C.UIEvent&gt;) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "267"
endingLineNumber = "267"
offsetFromSymbolStart = "560">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -646,68 +439,6 @@
endingLineNumber = "661" endingLineNumber = "661"
landmarkName = "navgationButtonClick2(sender:)" landmarkName = "navgationButtonClick2(sender:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "A1C134FD-F27C-4C32-9835-E1C81C6ADB12 - 43f01c3bc010c770"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #2 (Swift.Int) -&gt; () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "619"
endingLineNumber = "619"
offsetFromSymbolStart = "920">
</Location>
<Location
uuid = "A1C134FD-F27C-4C32-9835-E1C81C6ADB12 - 43f01c3bc010f857"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #2 (Swift.Int) -&gt; () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "626"
endingLineNumber = "626"
offsetFromSymbolStart = "920">
</Location>
<Location
uuid = "A1C134FD-F27C-4C32-9835-E1C81C6ADB12 - 43f01c3bc010fc56"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #2 (Swift.Int) -&gt; () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "657"
endingLineNumber = "657"
offsetFromSymbolStart = "920">
</Location>
<Location
uuid = "A1C134FD-F27C-4C32-9835-E1C81C6ADB12 - 43f01c3bc010fdda"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #2 (Swift.Int) -&gt; () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "661"
endingLineNumber = "661"
offsetFromSymbolStart = "920">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -724,68 +455,6 @@
endingLineNumber = "699" endingLineNumber = "699"
landmarkName = "selectedSpatialType(selectedIndex:)" landmarkName = "selectedSpatialType(selectedIndex:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "C570719E-63A4-43FF-B822-56E182D55F24 - 6adcab4b430494fe"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialVideoDisplayController.selectedSpatialType(selectedIndex: Swift.Int) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "657"
endingLineNumber = "657"
offsetFromSymbolStart = "52">
</Location>
<Location
uuid = "C570719E-63A4-43FF-B822-56E182D55F24 - 6adcab4b43049595"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialVideoDisplayController.selectedSpatialType(selectedIndex: Swift.Int) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "664"
endingLineNumber = "664"
offsetFromSymbolStart = "52">
</Location>
<Location
uuid = "C570719E-63A4-43FF-B822-56E182D55F24 - 6adcab4b43049994"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialVideoDisplayController.selectedSpatialType(selectedIndex: Swift.Int) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "695"
endingLineNumber = "695"
offsetFromSymbolStart = "52">
</Location>
<Location
uuid = "C570719E-63A4-43FF-B822-56E182D55F24 - 6adcab4b43049a68"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialVideoDisplayController.selectedSpatialType(selectedIndex: Swift.Int) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "699"
endingLineNumber = "699"
offsetFromSymbolStart = "52">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -802,68 +471,6 @@
endingLineNumber = "172" endingLineNumber = "172"
landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)" landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "2332D3C8-7CB7-4C2D-9D3C-D9A7D05737DE - 14547669f585f4c4"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "162"
endingLineNumber = "162"
offsetFromSymbolStart = "4340">
</Location>
<Location
uuid = "2332D3C8-7CB7-4C2D-9D3C-D9A7D05737DE - 14547669f585fb1d"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "171"
endingLineNumber = "171"
offsetFromSymbolStart = "4340">
</Location>
<Location
uuid = "2332D3C8-7CB7-4C2D-9D3C-D9A7D05737DE - 14547669f585fb72"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "172"
endingLineNumber = "172"
offsetFromSymbolStart = "4340">
</Location>
<Location
uuid = "2332D3C8-7CB7-4C2D-9D3C-D9A7D05737DE - 14547669f585fb72"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "172"
endingLineNumber = "172"
offsetFromSymbolStart = "2664">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -880,68 +487,6 @@
endingLineNumber = "170" endingLineNumber = "170"
landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)" landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "02F226A8-01C1-4FB7-8724-3FB114CBBC79 - 14547669f585f4e7"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "161"
endingLineNumber = "161"
offsetFromSymbolStart = "4008">
</Location>
<Location
uuid = "02F226A8-01C1-4FB7-8724-3FB114CBBC79 - 14547669f585fb3c"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "170"
endingLineNumber = "170"
offsetFromSymbolStart = "4008">
</Location>
<Location
uuid = "02F226A8-01C1-4FB7-8724-3FB114CBBC79 - 14547669f585fb1d"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "171"
endingLineNumber = "171"
offsetFromSymbolStart = "4008">
</Location>
<Location
uuid = "02F226A8-01C1-4FB7-8724-3FB114CBBC79 - 14547669f585fb1d"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialDisplayTypeView.init(menuWidth: CoreGraphics.CGFloat, arrow: __C.CGPoint, datas: Swift.Array&lt;(icon: Swift.String, title: Swift.String, isHiden: Swift.Bool)&gt;, configures: Swift.Array&lt;SwiftProject.CCSpatialDisplayTypeConfigure&gt;, dissMissCallback: () -&gt; ()) -&gt; SwiftProject.CCSpatialDisplayTypeView"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "171"
endingLineNumber = "171"
offsetFromSymbolStart = "2352">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -958,53 +503,6 @@
endingLineNumber = "638" endingLineNumber = "638"
landmarkName = "navgationButtonClick2(sender:)" landmarkName = "navgationButtonClick2(sender:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "D98F3857-4C19-43E5-BF3F-36E1A8B7C5C1 - dd02be51299e6dbf"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "603"
endingLineNumber = "603"
offsetFromSymbolStart = "2144">
</Location>
<Location
uuid = "D98F3857-4C19-43E5-BF3F-36E1A8B7C5C1 - dd02be51299e5180"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "634"
endingLineNumber = "634"
offsetFromSymbolStart = "2144">
</Location>
<Location
uuid = "D98F3857-4C19-43E5-BF3F-36E1A8B7C5C1 - dd02be51299e523c"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "638"
endingLineNumber = "638"
offsetFromSymbolStart = "2144">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -1021,38 +519,6 @@
endingLineNumber = "231" endingLineNumber = "231"
landmarkName = "screenOrientationRotate()" landmarkName = "screenOrientationRotate()"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "3EC02902-D13D-4894-8E99-D225CFD60753 - 7be2dad2210925c2"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialPhotoDisplayController.screenOrientationRotate() -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "230"
endingLineNumber = "230"
offsetFromSymbolStart = "2092">
</Location>
<Location
uuid = "3EC02902-D13D-4894-8E99-D225CFD60753 - 7be2dad2210925c2"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "SwiftProject.CCSpatialPhotoDisplayController.screenOrientationRotate() -&gt; ()"
moduleName = "SwiftProject"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "230"
endingLineNumber = "230"
offsetFromSymbolStart = "1924">
</Location>
</Locations>
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy
@ -1069,38 +535,54 @@
endingLineNumber = "239" endingLineNumber = "239"
landmarkName = "screenOrientationRotate()" landmarkName = "screenOrientationRotate()"
landmarkType = "7"> landmarkType = "7">
<Locations> </BreakpointContent>
<Location </BreakpointProxy>
uuid = "A656010D-92B9-41AF-AFCD-DFA1C59CBBE3 - 7be2dad2210926fa" <BreakpointProxy
shouldBeEnabled = "Yes" BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
ignoreCount = "0" <BreakpointContent
continueAfterRunningActions = "No" uuid = "E9B8F98E-43F6-47FD-A113-118A931EACBE"
symbolName = "SwiftProject.CCSpatialPhotoDisplayController.screenOrientationRotate() -&gt; ()" shouldBeEnabled = "Yes"
moduleName = "SwiftProject" ignoreCount = "0"
usesParentBreakpointCondition = "Yes" continueAfterRunningActions = "No"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift" filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
startingColumnNumber = "9223372036854775807" startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807"
startingLineNumber = "238" startingLineNumber = "186"
endingLineNumber = "238" endingLineNumber = "186"
offsetFromSymbolStart = "3988"> landmarkName = "compositeSpatialPhoto()"
</Location> landmarkType = "7">
<Location </BreakpointContent>
uuid = "A656010D-92B9-41AF-AFCD-DFA1C59CBBE3 - 7be2dad2210926fa" </BreakpointProxy>
shouldBeEnabled = "Yes" <BreakpointProxy
ignoreCount = "0" BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
continueAfterRunningActions = "No" <BreakpointContent
symbolName = "SwiftProject.CCSpatialPhotoDisplayController.screenOrientationRotate() -&gt; ()" uuid = "F92BC10F-CFF7-4311-8706-052FD06BD96E"
moduleName = "SwiftProject" shouldBeEnabled = "Yes"
usesParentBreakpointCondition = "Yes" ignoreCount = "0"
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift" continueAfterRunningActions = "No"
startingColumnNumber = "9223372036854775807" filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
endingColumnNumber = "9223372036854775807" startingColumnNumber = "9223372036854775807"
startingLineNumber = "238" endingColumnNumber = "9223372036854775807"
endingLineNumber = "238" startingLineNumber = "252"
offsetFromSymbolStart = "3176"> endingLineNumber = "252"
</Location> landmarkName = "compositeSpatialPhoto()"
</Locations> landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "C6506EAA-0954-41A9-A944-2AFB157D551F"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "259"
endingLineNumber = "259"
landmarkName = "compositeSpatialPhoto()"
landmarkType = "7">
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
</Breakpoints> </Breakpoints>

View File

@ -0,0 +1,286 @@
//
// CCSpatialShootController+CaputreAction.swift
// SwiftProject
//
// Created by aaa on 2024/5/20.
//
import Foundation
import AVFoundation
import Photos
import AVKit
import VideoToolbox
import SVProgressHUD
import Firebase
import CoreMotion
extension CCSpatialShootController {
//
@objc func shutterPhotoButtonAction(){
shutterPhotoButton.backgroundColor = .gray
imgs.removeAllObjects()
guard let wideAngleCameraVideoDataOutput,
let ultraWideCameraVideoDataOutput else {
print("Movie output not configured")
return
}
//
let soundID: SystemSoundID = 1108
AudioServicesPlaySystemSound(soundID)
// let time = Date().timeIntervalSince1970
// let name1 = "wideAnglePhoto" + String(time) + ".mov"
// let name2 = "ultraWidePhoto" + String(time) + ".mov"
// let wideAngleCameraOutputURL = URL.documentsDirectory.appending(path:name1)
// let ultraWideCameraOutputURL = URL.documentsDirectory.appending(path:name2)
//
// wideAngleCameraMovieOutput.startRecording(to: wideAngleCameraOutputURL, recordingDelegate: self)
// ultraWideCameraMovieOutput.startRecording(to: ultraWideCameraOutputURL, recordingDelegate: self)
//0.1
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {[weak self] in
self?.shutterPhotoButton.backgroundColor = .white
self?.isTakePhoto_wideCamera = true
self?.isTakePhoto_ultraCamera = true
self?.isTakePhoto = true
// self.stopVideoRecording()
}
}
//
@objc func shutterVideoButtonAction(_ sender: UIButton){
if !self.isRecording {
//
print("录像中...")
UIView.animate(withDuration: 0.3) {
// transform
self.shutterVideoButton.transform = CGAffineTransform(scaleX: 0.53, y: 0.53)
self.shutterVideoButton.layer.cornerRadius = 4
}completion: { finished in
self.isRecording = true
self.changeSwitchstatus()
}
//
startRecordingTimer()
startVideoRecording()
}else{
stopRVideo()
}
}
func stopRVideo(){
print("录像结束!!!")
//
stopRecordingTimer()
stopVideoRecording()
UIView.animate(withDuration: 0.3) {
// transform
self.shutterVideoButton.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
self.shutterVideoButton.layer.cornerRadius = 28
}completion: { finished in
self.isRecording = false
self.changeSwitchstatus()
}
}
// MARK: - /
private func startVideoRecording() {
guard let wideAngleCameraVideoDataOutput,
let ultraWideCameraVideoDataOutput else {
print("Movie output not configured")
return
}
// let time = Date().timeIntervalSince1970
// let name1 = "wideAngleVideo" + String(time) + ".mov"
// let name2 = "ultraWideVideo" + String(time) + ".mov"
// leftEyeVideoURL = nil
// rightEyeVideoURL = nil
// let wideAngleCameraOutputURL = URL.documentsDirectory.appending(path:name1)
// let fultraWideCameraOutputURL = URL.documentsDirectory.appending(path:name2)
//
// wideAngleCameraMovieOutput.startRecording(to: wideAngleCameraOutputURL, recordingDelegate: self)
// ultraWideCameraMovieOutput.startRecording(to: fultraWideCameraOutputURL, recordingDelegate: self)
}
private func stopVideoRecording(){
// guard let wideAngleCameraMovieOutput = wideAngleCameraMovieOutput,
// let ultraWideCameraMovieOutput = ultraWideCameraMovieOutput else {
// print("Movie output not configured")
// return
// }
//
// wideAngleCameraMovieOutput.stopRecording()
// ultraWideCameraMovieOutput.stopRecording()
}
//MARK: -
func changeSwitchstatus() {
if isRecording {
self.switchBackView.isHidden = true
self.vipLogoView.isHidden = true
cameraLabel.isHidden = true
videoLabel.isHidden = true
}else{
self.switchBackView.isHidden = false
if !UserInfo.sharedInstance.isMemberShip {
self.vipLogoView.isHidden = false
}
if shootingMode == .CCShootingMode_Camera {
//
cameraLabel.isHidden = false
videoLabel.isHidden = true
cameraButton.backgroundColor = UIColor(hexString: "#000000", alpha: 0.3)
cameraButton.setImage(UIImage(named: "camera_button_selected"), for: .normal)
videoButton.backgroundColor = .clear
videoButton.setImage(UIImage(named: "video_button_normal"), for: .normal)
}else if shootingMode == .CCShootingMode_Video {
//
cameraLabel.isHidden = true
videoLabel.isHidden = false
cameraButton.backgroundColor = .clear
cameraButton.setImage(UIImage(named: "camera_button_normal"), for: .normal)
videoButton.backgroundColor = UIColor(hexString: "#000000", alpha: 0.3)
videoButton.setImage(UIImage(named: "video_button_selected"), for: .normal)
}
}
}
// MARK: - /
func startRecordingTimer() {
var count = 0 // 0
timer = Timer(timeInterval: 1, repeats: true, block: { timer in
DispatchQueue.global().async {
// 线
//
count += 1
let timeText = self.transToHourMinSec(second: count)
DispatchQueue.main.async {
// self.setNavgaionTitle(string: timeText)
self.setNavgationTitleForCaptureVC(string: timeText)
}
}
})
//timerrunloop
RunLoop.main.add(timer!, forMode: .common)
}
func stopRecordingTimer() {
self.setNavgaionTitle(string: "")
if let timer = self.timer {
//
timer.invalidate()
}
}
// MARK: - 00:00:00
///
/// - Parameter second:
/// - Returns: String
func transToHourMinSec(second: Int) -> String {
let allTime: Int = second
var hours = 0
var minutes = 0
var seconds = 0
var hoursText = ""
var minutesText = ""
var secondsText = ""
hours = allTime / 3600
hoursText = hours > 9 ? "\(hours)" : "0\(hours)"
minutes = allTime % 3600 / 60
minutesText = minutes > 9 ? "\(minutes)" : "0\(minutes)"
seconds = allTime % 3600 % 60
secondsText = seconds > 9 ? "\(seconds)" : "0\(seconds)"
return "\(hoursText):\(minutesText):\(secondsText)"
}
//MARK: -
func getAlbumFirstPhoto() {
PHPhotoLibrary.requestAuthorization(for: .readWrite) {[weak self] (status) in
if status == PHAuthorizationStatus.authorized {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key:"creationDate", ascending: false)]
let image_assetsFetchResults: PHFetchResult<PHAsset>! = PHAsset.fetchAssets(with: .image, options: fetchOptions)
let video_assetsFetchResults: PHFetchResult<PHAsset>! = PHAsset.fetchAssets(with: .video, options: fetchOptions)
let imgAsset = image_assetsFetchResults.firstObject
let videoAsset = video_assetsFetchResults.firstObject
var defaultAsset:PHAsset?
if let imgAsset {
defaultAsset = imgAsset
}
if let videoAsset{
if let temp = defaultAsset {
if (videoAsset.creationDate ?? Date.now > imgAsset?.creationDate ?? Date.now) {
defaultAsset = videoAsset
}
}
else {
defaultAsset = videoAsset
}
}
if let defaultAsset {
self?.getImageFromAsset(asset: defaultAsset)
}
}
}
}
func getImageFromAsset(asset:PHAsset){
//
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = false//
requestOptions.deliveryMode = .highQualityFormat
PHImageManager.default().requestImageDataAndOrientation(for: asset, options: requestOptions) {[weak self] data, dataUTI, imagePropertyOrientation, info in
if let hasData = data {
DispatchQueue.main.async {
self?.albumButton.setBackgroundImage(UIImage(data: hasData), for: .normal)
}
}
}
}
func enableShutterBtn(_ value:Bool) {
shutterPhotoButton.isEnabled = value
shutterVideoButton.isEnabled = value
}
}

View File

@ -0,0 +1,295 @@
//
// CCSpatialShootController+Generate.swift
// SwiftProject
//
// Created by aaa on 2024/5/20.
//
import Foundation
import AVFoundation
import Photos
import AVKit
import VideoToolbox
import SVProgressHUD
import Firebase
import CoreMotion
extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate,AVCaptureVideoDataOutputSampleBufferDelegate {
//
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
if shootingMode == .CCShootingMode_Camera && self.isTakePhoto{
takePhotoSemaphore.wait()
print("xxsddd:\(Thread.current)")
if output == wideAngleCameraVideoDataOutput && self.isTakePhoto_wideCamera {
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer) {
imgs.add(firstFrame)
self.isTakePhoto_wideCamera = false
}
else {
print("wide Angle firstframe is lost....")
}
} else if output == ultraWideCameraVideoDataOutput && self.isTakePhoto_ultraCamera{
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer) {
imgs.add(firstFrame)
self.isTakePhoto_ultraCamera = false
}
else{
print("ultra Wide firstFrame is lost....")
}
}
if(imgs.count == 2){
compositeSpatialPhoto()
imgs.removeAllObjects()
self.isTakePhoto = false
print("2张照片满足合成....")
}
else {
print("images 少于2张....")
}
takePhotoSemaphore.signal()
}
else if shootingMode == .CCShootingMode_Video {
if output == wideAngleCameraVideoDataOutput {//广
// leftEyeVideoURL = outputFileURL
}
else if output == ultraWideCameraVideoDataOutput {//广
// print("ultra Wide video recorded: \(outputFileURL)")
// rightEyeVideoURL = outputFileURL
}
else if output == wuCameraAudioDataOutput {//
}
// if let leftEyeVideoURL,
// let rightEyeVideoURL {
// createSpVideo()
// }
}
}
//
func captureOutput(_ output: AVCaptureOutput, didDrop sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
}
//samplebufferuiimage
func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
//
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
// CoreImage
let ciImage = CIImage(cvImageBuffer: imageBuffer)
// CIImageCGImage
if let cgImage = CIContext(options: nil).createCGImage(ciImage, from: ciImage.extent) {
// UIImage
let image = UIImage(cgImage: cgImage)
return image
}
return nil
}
//MARK:
func createSpVideo(){
//
// if(rightEyeVideoURL != nil && leftEyeVideoURL != nil){
//
// Task {
// spatialVideoWriter.writeSpatialVideo(leftEyeVideoURL: leftEyeVideoURL!, rightEyeVideoURL: rightEyeVideoURL!, outputVideoURL: outputVideoURL!) {[weak self] success, error in
// DispatchQueue.main.async {
// SVProgressHUD.dismiss()
// print("SVProgressHUD.dismiss..2222.....")
// }
// if success {
// print("")
// if let ovrul = self?.outputVideoURL{
// self?.saveVideoToLibrary(videoURL:ovrul)
// }
//
// } else if let error = error {
// print("......error\(error)")
//
// DispatchQueue.main.async {
// SVProgressHUD.showInfo(withStatus: "\(NSLocalizedString("", comment: "")):\(error.localizedDescription)")
// }
// }
// else {
// print("not success......")
// }
// }
// }
// }
}
private func saveVideoToLibrary(videoURL: URL) {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: videoURL)
}) {[weak self] success, error in
if success {
print("保存成功")
self?.getAlbumFirstPhoto()
} else if let error = error {
print("保存失败")
}
}
}
//
func compositeSpatialPhoto(){
let img1:UIImage = imgs[0] as! UIImage
let img2:UIImage = imgs[1] as! UIImage
let url = URL.documentsDirectory.appending(path:"aaa12.HEIC")
let destination = CGImageDestinationCreateWithURL(url as CFURL, UTType.heic.identifier as CFString, 2, nil)!
var oo = imageCGImagePropertyOrientation.rawValue
let orientation_cf = CFNumberCreate(nil, CFNumberType.intType, &oo)
let properties1 = [
kCGImagePropertyGroups: [
kCGImagePropertyGroupIndex: 0,
kCGImagePropertyGroupType: kCGImagePropertyGroupTypeStereoPair,
kCGImagePropertyGroupImageIndexLeft: 0,
kCGImagePropertyGroupImageIndexRight: 1,
],
kCGImagePropertyTIFFDictionary:[
kCGImagePropertyOrientation:orientation_cf,
],
kCGImagePropertyOrientation:orientation_cf as Any,
kCGImagePropertyHEIFDictionary: [
kIIOMetadata_CameraExtrinsicsKey: [
kIIOCameraExtrinsics_CoordinateSystemID: 0,
kIIOCameraExtrinsics_Position: [
0,
0,
0
],
kIIOCameraExtrinsics_Rotation: [
1, 0, 0,
0, 1, 0,
0, 0, 1
]
]
]
] as [CFString : Any]
let properties2 = [
kCGImagePropertyGroups: [
kCGImagePropertyGroupIndex: 0,
kCGImagePropertyGroupType: kCGImagePropertyGroupTypeStereoPair,
kCGImagePropertyGroupImageIndexLeft: 0,
kCGImagePropertyGroupImageIndexRight: 1,
],
kCGImagePropertyTIFFDictionary:[
kCGImagePropertyOrientation:orientation_cf,
],
kCGImagePropertyOrientation:orientation_cf as Any,
kCGImagePropertyHEIFDictionary: [
kIIOMetadata_CameraExtrinsicsKey: [
kIIOCameraExtrinsics_CoordinateSystemID: 0,
kIIOCameraExtrinsics_Position: [
-0.019238,
0,
0
],
kIIOCameraExtrinsics_Rotation: [
1, 0, 0,
0, 1, 0,
0, 0, 1
]
]
]
] as [CFString : Any]
let leftImg = img1//fixOrientation(img1)
let rightImg = img2//fixOrientation(img2)
let p_dic1:CFDictionary = properties1 as CFDictionary
CGImageDestinationAddImage(destination, leftImg.cgImage!,p_dic1)
let p_dic2:CFDictionary = properties2 as CFDictionary
CGImageDestinationAddImage(destination, rightImg.cgImage!, p_dic2)
let rr = CGImageDestinationFinalize(destination)
if rr == false {
print("ee..")
}
savePhoto(url)
}
//
func savePhoto(_ fileURL: URL) {
// PHAssetCreationRequest
PHPhotoLibrary.shared().performChanges({
let creationRequest = PHAssetCreationRequest.forAsset()
creationRequest.addResource(with: .photoProxy, fileURL: fileURL, options: nil)
}) {[weak self] success, error in
DispatchQueue.main.async {
SVProgressHUD.dismiss()
print("SVProgressHUD.dismiss..1111.....")
}
if let error = error {
print("Error saving photo to library: \(error.localizedDescription)")
DispatchQueue.main.async {
SVProgressHUD.showInfo(withStatus: "\(NSLocalizedString("空间图片保存失败", comment: "")): \(error.localizedDescription)")
}
} else {
print("Photo saved to library successfully.")
DispatchQueue.main.async {
self?.getAlbumFirstPhoto()
}
}
}
}
}

View File

@ -0,0 +1,162 @@
//
// CCSpatialShootController+SessionConfigure.swift
// SwiftProject
//
// Created by aaa on 2024/5/20.
//
import Foundation
import AVFoundation
import Photos
import AVKit
import VideoToolbox
import SVProgressHUD
import Firebase
import CoreMotion
extension CCSpatialShootController {
func configureSession() {
session.beginConfiguration()
defer {
session.commitConfiguration()
}
// .builtInWideAngleCamera 广( --- 28mm) .back
guard let backCamera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else {
print("Could not find the back camera")
return
}
wideAngleCameraDevice = backCamera
do {
wideAngleCameraDeviceInput = try AVCaptureDeviceInput(device: backCamera)
guard let wideAngleCameraDeviceInput = wideAngleCameraDeviceInput,
session.canAddInput(wideAngleCameraDeviceInput) else {
print("Could not add back camera input")
return
}
session.addInput(wideAngleCameraDeviceInput)
} catch {
print("Could not create back camera device input: \(error)")
return
}
// .builtInUltraWideCamera 广(0.5x使AVCaptureDeviceDiscoverySession) .back
guard let frontCamera = AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back) else {
print("Could not find the front camera")
return
}
do {
print("builtInUltraWideCamera:\(frontCamera.videoZoomFactor)")
//
// frontCamera.focusMode = .autoFocus
ultraWideCameraDeviceInput = try AVCaptureDeviceInput(device: frontCamera)
guard let ultraWideCameraDeviceInput = ultraWideCameraDeviceInput,
session.canAddInput(ultraWideCameraDeviceInput) else {
print("Could not add front camera input")
return
}
session.addInput(ultraWideCameraDeviceInput)
} catch {
print("Could not create front camera device input: \(error)")
return
}
//
guard let audioDevice = AVCaptureDevice.default(for: .audio) else {
print("Could not find audio device")
return
}
do {
let audioDeviceInput = try AVCaptureDeviceInput(device: audioDevice)
guard session.canAddInput(audioDeviceInput) else {
print("Could not add audio input")
return
}
session.addInput(audioDeviceInput)
} catch {
print("Could not create audio device input: \(error)")
return
}
// 广
// wideAngleCameraMovieOutput = AVCaptureMovieFileOutput()
// guard let wideAngleCameraMovieOutput = wideAngleCameraMovieOutput,
// session.canAddOutput(wideAngleCameraMovieOutput) else {
// print("Could not add the back camera movie output")
// return
// }
// session.addOutput(wideAngleCameraMovieOutput)
wideAngleCameraVideoDataOutput = AVCaptureVideoDataOutput()
guard let wideAngleCameraVideoDataOutput, session.canAddOutput(wideAngleCameraVideoDataOutput) else {
print("wideAngleCameraVideoDataOutput....")
return
}
wideAngleCameraVideoDataOutput.setSampleBufferDelegate(self, queue: DispatchQueue.global())
// wideAngleCameraVideoDataOutput.videoSettings =
// [NSDictionary dictionaryWithObject:
// [NSNumber numberWithInt:kCVPixelFormatType_32BGRA]
// forKey:(id)kCVPixelBufferPixelFormatTypeKey];
// wideAngleCameraVideoDataOutput.minFrameDuration = CMTimeMake(1, 15);
session.addOutput(wideAngleCameraVideoDataOutput)
// 广
// ultraWideCameraMovieOutput = AVCaptureMovieFileOutput()
// guard let ultraWideCameraMovieOutput = ultraWideCameraMovieOutput,
// session.canAddOutput(ultraWideCameraMovieOutput) else {
// print("Could not add the front camera movie output")
// return
// }
// session.addOutput(ultraWideCameraMovieOutput)
ultraWideCameraVideoDataOutput = AVCaptureVideoDataOutput()
guard let ultraWideCameraVideoDataOutput,
session.canAddOutput(ultraWideCameraVideoDataOutput) else {
print("ultraWideCameraVideoDataOutput....")
return
}
ultraWideCameraVideoDataOutput.setSampleBufferDelegate(self, queue: DispatchQueue.global())
session.addOutput(ultraWideCameraVideoDataOutput)
//
wuCameraAudioDataOutput = AVCaptureAudioDataOutput()
guard let wuCameraAudioDataOutput,
session.canAddOutput(wuCameraAudioDataOutput) else {
print("wuCameraAudioDataOutput....")
return
}
wuCameraAudioDataOutput.setSampleBufferDelegate(self, queue: DispatchQueue.global())
session.addOutput(wuCameraAudioDataOutput)
//
// ---
wideAngleCameraVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: session)
wideAngleCameraVideoPreviewLayer?.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height)
if let wideAngleCameraVideoPreviewLayer = wideAngleCameraVideoPreviewLayer {
wideAngleCameraVideoPreviewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
self.view.layer.insertSublayer(wideAngleCameraVideoPreviewLayer, at: 0)
}
DispatchQueue.global().async {
self.session.startRunning()
//AVCaptureMultiCamSession statrunning
try! frontCamera.lockForConfiguration()
frontCamera.videoZoomFactor = 1.75//
frontCamera.unlockForConfiguration()
}
}
}

View File

@ -0,0 +1,554 @@
//
// CCSpatialShootController.swift
// SwiftProject
//
// Created by Zhang, Joyce on 2024/2/29.
//
import UIKit
import AVFoundation
import Photos
import AVKit
import VideoToolbox
import SVProgressHUD
import Firebase
import CoreMotion
class CCSpatialShootController: BaseController {
let kNowTimeToUserDefaultKey_SpatialShootController:String = "kNowTimeToUserDefaultKey_SpatialShootController"
var wideAngleCameraDevice:AVCaptureDevice?//使
var isTakePhoto = false//
var isTakePhoto_ultraCamera = false
var isTakePhoto_wideCamera = false
let takePhotoSemaphore = DispatchSemaphore(value: 1)
//AVCaptureSession ---
var session = AVCaptureMultiCamSession()//
var wideAngleCameraDeviceInput: AVCaptureDeviceInput?//广 .builtInWideAngleCamera
var ultraWideCameraDeviceInput: AVCaptureDeviceInput?//广 .builtInUltraWideCamera
var wideAngleCameraVideoPreviewLayer: AVCaptureVideoPreviewLayer?//广
var ultraWideCameraVideoPreviewLayer: AVCaptureVideoPreviewLayer?//广
// var wideAngleCameraMovieOutput: AVCaptureMovieFileOutput?
// var ultraWideCameraMovieOutput: AVCaptureMovieFileOutput?
var wideAngleCameraVideoDataOutput:AVCaptureVideoDataOutput?
var ultraWideCameraVideoDataOutput:AVCaptureVideoDataOutput?
var wuCameraAudioDataOutput:AVCaptureAudioDataOutput?
var isRecording = false
var imageCGImagePropertyOrientation:CGImagePropertyOrientation = CGImagePropertyOrientation.left//cgimage
var deviceOrientation = 1// 1,2
var leftEyeVideoURL:URL?
var rightEyeVideoURL:URL?
var outputVideoURL: URL?
let motionManager = CMMotionManager()
var imgs:NSMutableArray = NSMutableArray() //广
let spatialVideoWriter = SpatialVideoWriter()
//================================
//
var shootingMode:CCShootingMode = .CCShootingMode_Camera
//
var timer: Timer?
lazy var spaceAlbumPopView: CCSpaceAlbumFilterPopView2 = {
let view = CCSpaceAlbumFilterPopView2.init(frame: CGRectMake(0, 0, KScreenWidth, KScreenHeight))
return view
}()
lazy var tipsLabel: UILabel = {
let label = UILabel.init(frame: CGRectMake((KScreenWidth - 320)/2, KNavigationBarHeight+KStatusBarHeight + 20, 320, 36))
label.backgroundColor = UIColor.darkGray
label.font = KFont_Medium(12)
label.textColor = KTextColor_White
label.text = ""//"
label.textAlignment = .center
label.alpha = 1.0
label.layer.cornerRadius = 8
label.clipsToBounds = true
label.isHidden = true
return label
}()
lazy var horizontalImageView: UIImageView = {
let imageView = UIImageView()
imageView.image = UIImage.init(named: "horizontal_rotate_img")
imageView.alpha = 0.0
imageView.isHidden = true
return imageView
}()
lazy var effectView: UIVisualEffectView = {
let effect = UIBlurEffect(style: .light)
let view = UIVisualEffectView.init(effect: effect)
view.backgroundColor = .clear
view.alpha = 0.0
view.isHidden = true
return view
}()
lazy var horizontalLabel: UILabel = {
let label = UILabel()
label.backgroundColor = UIColor.clear
label.font = KFont_Medium(14)
label.textColor = KTextColor_White
label.text = NSLocalizedString("将iPhone旋转为横向", comment: "")
label.alpha = 0.0
label.isHidden = true
return label
}()
lazy var shutterRingView: UIView = {
let view = UIView()
view.frame = CGRect(x:0,y:0,width:66,height:66)
view.backgroundColor = .clear
view.layer.cornerRadius = 33
view.layer.masksToBounds = true
view.layer.borderWidth = 3
view.layer.borderColor = UIColor.white.cgColor
view.center = CGPointMake(KScreenWidth/2, KScreenHeight - KTabbarSafeBottomMargin - 50 - 33)
return view
}()
lazy var shutterPhotoButton: UIButton = {
let botton = UIButton()
botton.frame = CGRect(x:0,y:0,width:56,height:56)
botton.backgroundColor = .white
botton.layer.cornerRadius = 28
botton.layer.masksToBounds = true
botton.center = CGPointMake(33, 33)
botton.addTarget(self, action: #selector(shutterPhotoButtonAction), for: .touchUpInside)
return botton
}()
lazy var shutterVideoButton: UIButton = {
let botton = UIButton()
botton.frame = CGRect(x:0,y:0,width:56,height:56)
botton.backgroundColor = UIColor(hexString: "#FF3B2F")
botton.layer.cornerRadius = 28
botton.layer.masksToBounds = true
botton.center = CGPointMake(33, 33)
botton.addTarget(self, action: #selector(shutterVideoButtonAction(_:)), for: .touchUpInside)
botton.isHidden = true
return botton
}()
lazy var albumButton: UIButton = {
let botton = UIButton()
botton.frame = CGRect(x:0,y:0,width:48,height:48)
botton.layer.cornerRadius = 8
botton.layer.masksToBounds = true
botton.center = CGPointMake(shutterRingView.center.x - 92 - 24, shutterRingView.center.y)
botton.addTarget(self, action: #selector(albumButtonAction), for: .touchUpInside)
botton.contentMode = .scaleAspectFill
return botton
}()
lazy var lightButton: UIButton = {
let botton = UIButton()
botton.frame = CGRect(x:0,y:0,width:40,height:40)
botton.setImage(UIImage.init(named: "light_button_normal"), for: .normal)
botton.center = CGPointMake( shutterRingView.center.x + 103 + 20, shutterRingView.center.y)
botton.addTarget(self, action: #selector(lightButtonAction), for: .touchUpInside)
return botton
}()
lazy var switchBackView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#ffffff", alpha: 0.6)
view.layer.cornerRadius = 20
view.layer.masksToBounds = true
return view
}()
lazy var vipLogoView:UIImageView = {
let imgView = UIImageView()
imgView.image = UIImage(named: "camera_vip")
return imgView
}()
lazy var cameraButton: UIButton = {
let botton = UIButton()
botton.tag = 1001
botton.backgroundColor = UIColor(hexString: "#000000", alpha: 0.3)
botton.setImage(UIImage(named: "camera_button_selected"), for: .normal)
botton.layer.cornerRadius = 16
botton.layer.masksToBounds = true
botton.addTarget(self, action: #selector(switchButtonAction(_:)), for: .touchUpInside)
return botton
}()
lazy var videoButton: UIButton = {
let botton = UIButton()
botton.tag = 1002
botton.backgroundColor = .clear
botton.setImage(UIImage(named: "video_button_normal"), for: .normal)
botton.layer.cornerRadius = 16
botton.layer.masksToBounds = true
botton.addTarget(self, action: #selector(switchButtonAction(_:)), for: .touchUpInside)
return botton
}()
lazy var cameraLabel: UILabel = {
let label = UILabel()
label.backgroundColor = UIColor.clear
label.font = KFont_Medium(12)
label.textColor = UIColor(hexString: "#ffffff", alpha: 0.6)
label.text = NSLocalizedString("拍照", comment: "")
label.isHidden = false
return label
}()
lazy var videoLabel: UILabel = {
let label = UILabel()
label.backgroundColor = UIColor.clear
label.font = KFont_Medium(12)
label.textColor = UIColor(hexString: "#ffffff", alpha: 0.6)
label.text = NSLocalizedString("摄像", comment: "")
label.isHidden = true
return label
}()
//=================================
//MARK: - viewWillAppear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setNavgationBarColor(color: UIColor.clear)
self.setNavgationBarLine(color: .clear)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_SpatialShootController)
Analytics.logEvent("capture_pv", parameters: ["refer_page":"相机拍摄页面","duration":sec])
}
override func viewDidLoad() {
super.viewDidLoad()
ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_SpatialShootController)
outputVideoURL = URL.documentsDirectory.appendingPathComponent("output.MOV")
configureSession() //
setUI()
self.view.bringSubviewToFront(navtionImgView!)
//
let isLandscape = UIDevice.current.orientation.isLandscape
if !isLandscape {
showHorizontalScreenTips()
}
if motionManager.isDeviceMotionAvailable {
motionManager.startDeviceMotionUpdates(to: OperationQueue.main) {[weak self] motion, error in
if let motion = motion {
//
self?.dealDeviceScreenOrientationByMotaion(motion)
}
}
}
//
getAlbumFirstPhoto()
enableShutterBtn(false)
//
switchButtonAction(videoButton)
}
private func setUI() {
self.view.addSubview(effectView)
self.view.addSubview(horizontalImageView)
self.view.addSubview(horizontalLabel)
self.view.bringSubviewToFront(horizontalImageView)
self.view.bringSubviewToFront(horizontalLabel)
//
self.view.addSubview(shutterRingView)
shutterRingView.addSubview(shutterPhotoButton)
shutterRingView.addSubview(shutterVideoButton)
self.view.addSubview(albumButton)
self.view.addSubview(lightButton)
self.view.addSubview(switchBackView)
switchBackView.addSubview(cameraButton)
switchBackView.addSubview(videoButton)
if !UserInfo.sharedInstance.isMemberShip {
self.view.addSubview(vipLogoView)
}
self.view.addSubview(cameraLabel)
self.view.addSubview(videoLabel)
self.setRightOneBtnTitle(string: "4K·3D")
effectView.snp.makeConstraints { (make) in
make.top.leading.bottom.trailing.equalTo(self.view)
}
horizontalImageView.snp.makeConstraints { (make) in
make.centerY.equalTo(self.view.snp.centerY)
make.centerX.equalTo(self.view.snp.centerX)
make.width.equalTo(28)
make.height.equalTo(28)
}
horizontalLabel.snp.makeConstraints { (make) in
make.top.equalTo(self.horizontalImageView.snp.bottom).offset(16)
make.centerX.equalTo(self.view.snp.centerX)
}
switchBackView.snp.makeConstraints { (make) in
make.bottom.equalTo(shutterRingView.snp.top).offset(-32)
make.centerX.equalTo(self.view.snp.centerX)
make.width.equalTo(128)
make.height.equalTo(40)
}
if !UserInfo.sharedInstance.isMemberShip {
vipLogoView.snp.makeConstraints { make in
make.width.equalTo(25)
make.height.equalTo(12)
make.left.equalTo(switchBackView.snp.right).offset(-22)
make.bottom.equalTo(switchBackView.snp.top).offset(12)
}
}
cameraButton.snp.makeConstraints { (make) in
make.centerY.equalTo(switchBackView.snp.centerY)
make.trailing.equalTo(switchBackView.snp.trailing).offset(-4)
make.width.equalTo(56)
make.height.equalTo(32)
}
videoButton.snp.makeConstraints { (make) in
make.centerY.equalTo(switchBackView.snp.centerY)
make.leading.equalTo(switchBackView.snp.leading).offset(4)
make.width.equalTo(56)
make.height.equalTo(32)
}
cameraLabel.snp.makeConstraints { (make) in
make.bottom.equalTo(switchBackView.snp.top).offset(-8)
make.centerX.equalTo(switchBackView.snp.trailing).offset(-32)
}
videoLabel.snp.makeConstraints { (make) in
make.bottom.equalTo(switchBackView.snp.top).offset(-8)
make.centerX.equalTo(switchBackView.snp.leading).offset(32)
}
}
func showHorizontalScreenTips() {
self.horizontalImageView.isHidden = false
self.horizontalLabel.isHidden = false
//
self.effectView.isHidden = false
UIView.animate(withDuration: 0.5) {
self.horizontalImageView.alpha = 1.0
self.horizontalLabel.alpha = 1.0
//
self.effectView.alpha = 1.0
}
}
func hidenHorizontalScreenTips() {
UIView.animate(withDuration: 0.5) {
self.horizontalImageView.alpha = 0.0
self.horizontalLabel.alpha = 0.0
//
self.effectView.alpha = 0.0
}completion: { finished in
self.horizontalImageView.isHidden = true
self.horizontalLabel.isHidden = true
//
self.effectView.isHidden = true
}
}
//MARK: - action
@objc func albumButtonAction() {
// let vc:CCSpaceAlbumController = CCSpaceAlbumController()
// self.present(vc, animated: true, completion: nil)
self.view.addSubview(spaceAlbumPopView)
spaceAlbumPopView.show()
//
spaceAlbumPopView.selectedImageHandler = { [self] data,asset in
print("回调")
let vc = CCSpatialPhotoDisplayController()
vc.photoOriginalData = data
vc.imageAsset = asset
self.navigationController?.pushViewController(vc, animated: true)
}
//
spaceAlbumPopView.selectedVideoHandler = { url,asset in
if (asset.duration > 60 ) {
if !UserInfo.sharedInstance.isMemberShip {
let vc:MembershipVC = MembershipVC()
let nav = UINavigationController(rootViewController: vc)
nav.modalTransitionStyle = UIModalTransitionStyle.coverVertical
nav.modalPresentationStyle = .fullScreen
self.present(nav, animated: true)
return
}
}
let vc = CCSpatialVideoDisplayController()
vc.sourceVideoURL = url
vc.videoOriginalPHAsset = asset
self.navigationController?.pushViewController(vc, animated: true)
}
}
@objc func lightButtonAction() {
guard let device = AVCaptureDevice.default(for: .video) else {
print("无法获取到您的设备")
return
}
if device.hasTorch && device.isTorchAvailable{
try? device.lockForConfiguration()
device.torchMode = device.torchMode == .off ? .on : .off
device.unlockForConfiguration()
}
}
@objc func switchButtonAction(_ sender: UIButton){
if sender.tag == 1001 {
if UserInfo.sharedInstance.isMemberShip {
//
shootingMode = .CCShootingMode_Camera
shutterPhotoButton.isHidden = false
shutterVideoButton.isHidden = true
changeSwitchstatus()
}
else {//
let vc:MembershipVC = MembershipVC()
let nav = UINavigationController(rootViewController: vc)
nav.modalTransitionStyle = UIModalTransitionStyle.coverVertical
nav.modalPresentationStyle = .fullScreen
self.present(nav, animated: true)
//
Analytics.logEvent("capture_unvip_pv", parameters: nil)
}
}else if sender.tag == 1002 {
//
shootingMode = .CCShootingMode_Video
shutterPhotoButton.isHidden = true
shutterVideoButton.isHidden = false
changeSwitchstatus()
}
}
//MARK: -
func dealDeviceScreenOrientationByMotaion(_ motion:CMDeviceMotion){
let x = motion.gravity.x
let y = motion.gravity.y
if (fabs(y) >= fabs(x)){
if deviceOrientation != 1 {
enableShutterBtn(false)
deviceOrientation = 1
print("竖屏");
autoStopRecordVideo()
showHorizontalScreenTips()
}
}
else{
if deviceOrientation != 2 {
enableShutterBtn(true)
deviceOrientation = 2
hidenHorizontalScreenTips()
print("横屏");
}
if x >= 0{//
imageCGImagePropertyOrientation = .right
}
else{//
imageCGImagePropertyOrientation = .left
}
}
}
//
func autoStopRecordVideo(){
if self.isRecording {
stopRVideo()
}
}
deinit {
//
// //
print("shootcontroller deinit....")
if let timer = self.timer {
//
timer.invalidate()
}
}
}