From 03e20db3b9218b62f857993383b54f7b9ea67dea Mon Sep 17 00:00:00 2001 From: bluesea <307723040@qq.com> Date: Tue, 30 Apr 2024 19:24:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=B5=8F=E8=A7=88=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E8=A7=A3=E5=86=B3=E5=BE=AA=E7=8E=AF=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftProject.xcodeproj/project.pbxproj | 4 ++++ .../CCSpatialPhotoDisplayController.swift | 3 ++- .../CCSpatialPhotoDisplayEx.swift | 8 +++---- .../Project/Util/DisplayLinkProxy.swift | 23 +++++++++++++++++++ 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 SwiftProject/SwiftProject/Project/Util/DisplayLinkProxy.swift diff --git a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj index 54f575f..f876ce5 100644 --- a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj +++ b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj @@ -35,6 +35,7 @@ 009DFB132BC8EA90007B56E8 /* MenuVCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009DFB122BC8EA90007B56E8 /* MenuVCCell.swift */; }; 00B946252B67B7DE00DA668F /* CCSpatialPlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */; }; 00BD87862BDE595F0014E8B3 /* CCSpatialPhotoDisplayEx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BD87852BDE595F0014E8B3 /* CCSpatialPhotoDisplayEx.swift */; }; + 00BD87972BE10B800014E8B3 /* DisplayLinkProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BD87962BE10B800014E8B3 /* DisplayLinkProxy.swift */; }; 00C665732BAA81F900C309C3 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 00C665722BAA81F900C309C3 /* GoogleService-Info.plist */; }; 00C665792BAA94EA00C309C3 /* CopyCrashHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */; }; 00D33BF42B998BF700604A44 /* SpatialImageConvertor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D33BF32B998BF700604A44 /* SpatialImageConvertor.swift */; }; @@ -149,6 +150,7 @@ 009DFB122BC8EA90007B56E8 /* MenuVCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuVCCell.swift; sourceTree = ""; }; 00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCSpatialPlayView.swift; sourceTree = ""; }; 00BD87852BDE595F0014E8B3 /* CCSpatialPhotoDisplayEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCSpatialPhotoDisplayEx.swift; sourceTree = ""; }; + 00BD87962BE10B800014E8B3 /* DisplayLinkProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayLinkProxy.swift; sourceTree = ""; }; 00C665722BAA81F900C309C3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyCrashHandler.swift; sourceTree = ""; }; 00D33BF32B998BF700604A44 /* SpatialImageConvertor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpatialImageConvertor.swift; sourceTree = ""; }; @@ -393,6 +395,7 @@ 005580772B9F1525004B9567 /* ZZHHelper.swift */, 00ED6B332BA04AC200915BDE /* PlayByTransferConvertor.swift */, 00374AE02BC92B7C00F1F20F /* ZNetUtil.swift */, + 00BD87962BE10B800014E8B3 /* DisplayLinkProxy.swift */, ); path = Util; sourceTree = ""; @@ -882,6 +885,7 @@ 006B61CD2BBA4E3D003FCB49 /* UserInfo.swift in Sources */, AF2120AF2B4E930400400B7F /* RootManager.swift in Sources */, 1E02C9322B8990C600DD3143 /* CCDeviceOperationListView.swift in Sources */, + 00BD87972BE10B800014E8B3 /* DisplayLinkProxy.swift in Sources */, AF2120DA2B4E9BD400400B7F /* CCAlert.swift in Sources */, 006B61D12BBA5DB4003FCB49 /* MembershipProductView.swift in Sources */, 1EFB8C702B88DA4800C72119 /* CCBottomMenuCell.swift in Sources */, diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift index a0877db..da960ff 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift @@ -196,6 +196,7 @@ class CCSpatialPhotoDisplayController: BaseController { NotificationCenter.default.removeObserver(self) // 停止监听设备方向变化 UIDevice.current.endGeneratingDeviceOrientationNotifications() + externalDispalylink?.invalidate() } @@ -434,7 +435,7 @@ class CCSpatialPhotoDisplayController: BaseController { let ws = us as! UIWindowScene if ws.session.role.rawValue == "UIWindowSceneSessionRoleExternalDisplayNonInteractive"{ externalVC = ws.windows.first?.rootViewController as? ZZHExternalViewController - externalDispalylink = ws.windows.first?.screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:))) + externalDispalylink = ws.windows.first?.screen.displayLink(withTarget: DisplayLinkProxy.with(target: self), selector: #selector(displayUpdate(caDisplayLink:))) externalDispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common) externalVC?.imageView?.isHidden = false externalVC?.playerLayer?.isHidden = true diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift index caa9112..5894853 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift @@ -66,7 +66,7 @@ extension CCSpatialPhotoDisplayController { //单眼2D func monocular2DImgWith(drawImg:UIImage,scale:CGFloat, callback:@escaping (_ image:UIImage)->Void) { if scale > 1 || scale < 1 { - DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async { +// DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async { let drawImageSize = drawImg.size let newImgSize = CGSizeMake(drawImageSize.width * scale, drawImageSize.height * scale) let newRect = CGRect(origin: CGPoint(x: (drawImageSize.width - newImgSize.width) * 0.5, y: (drawImageSize.height - newImgSize.height) * 0.5), size: newImgSize) @@ -74,10 +74,10 @@ extension CCSpatialPhotoDisplayController { drawImg.draw(in: newRect) let image = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext(); - DispatchQueue.main.async { +// DispatchQueue.main.async { callback(image) - } - } +// } +// } } else { callback(drawImg) diff --git a/SwiftProject/SwiftProject/Project/Util/DisplayLinkProxy.swift b/SwiftProject/SwiftProject/Project/Util/DisplayLinkProxy.swift new file mode 100644 index 0000000..7356159 --- /dev/null +++ b/SwiftProject/SwiftProject/Project/Util/DisplayLinkProxy.swift @@ -0,0 +1,23 @@ +// +// DisplayLinkProxy.swift +// SwiftProject +// +// Created by aaa on 2024/4/30. +// + +import Foundation +class DisplayLinkProxy: NSObject { + // 弱指针 + weak var target: NSObject? + + class func with(target: NSObject) -> DisplayLinkProxy { + let proxy = DisplayLinkProxy() + proxy.target = target + return proxy; + } + + /// 重点:消息转发机制 + override func forwardingTarget(for aSelector: Selector!) -> Any? { + return target + } +}