图片浏览视图解决循环引用问题

This commit is contained in:
bluesea 2024-04-30 19:24:41 +08:00
parent 6d9cb4afd2
commit 03e20db3b9
4 changed files with 33 additions and 5 deletions

View File

@ -35,6 +35,7 @@
009DFB132BC8EA90007B56E8 /* MenuVCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009DFB122BC8EA90007B56E8 /* MenuVCCell.swift */; }; 009DFB132BC8EA90007B56E8 /* MenuVCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009DFB122BC8EA90007B56E8 /* MenuVCCell.swift */; };
00B946252B67B7DE00DA668F /* CCSpatialPlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */; }; 00B946252B67B7DE00DA668F /* CCSpatialPlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */; };
00BD87862BDE595F0014E8B3 /* CCSpatialPhotoDisplayEx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BD87852BDE595F0014E8B3 /* CCSpatialPhotoDisplayEx.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 */; }; 00C665732BAA81F900C309C3 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 00C665722BAA81F900C309C3 /* GoogleService-Info.plist */; };
00C665792BAA94EA00C309C3 /* CopyCrashHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */; }; 00C665792BAA94EA00C309C3 /* CopyCrashHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */; };
00D33BF42B998BF700604A44 /* SpatialImageConvertor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D33BF32B998BF700604A44 /* SpatialImageConvertor.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 = "<group>"; }; 009DFB122BC8EA90007B56E8 /* MenuVCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuVCCell.swift; sourceTree = "<group>"; };
00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCSpatialPlayView.swift; sourceTree = "<group>"; }; 00B946242B67B7DE00DA668F /* CCSpatialPlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCSpatialPlayView.swift; sourceTree = "<group>"; };
00BD87852BDE595F0014E8B3 /* CCSpatialPhotoDisplayEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCSpatialPhotoDisplayEx.swift; sourceTree = "<group>"; }; 00BD87852BDE595F0014E8B3 /* CCSpatialPhotoDisplayEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCSpatialPhotoDisplayEx.swift; sourceTree = "<group>"; };
00BD87962BE10B800014E8B3 /* DisplayLinkProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayLinkProxy.swift; sourceTree = "<group>"; };
00C665722BAA81F900C309C3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; }; 00C665722BAA81F900C309C3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyCrashHandler.swift; sourceTree = "<group>"; }; 00C665772BAA941E00C309C3 /* CopyCrashHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyCrashHandler.swift; sourceTree = "<group>"; };
00D33BF32B998BF700604A44 /* SpatialImageConvertor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpatialImageConvertor.swift; sourceTree = "<group>"; }; 00D33BF32B998BF700604A44 /* SpatialImageConvertor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpatialImageConvertor.swift; sourceTree = "<group>"; };
@ -393,6 +395,7 @@
005580772B9F1525004B9567 /* ZZHHelper.swift */, 005580772B9F1525004B9567 /* ZZHHelper.swift */,
00ED6B332BA04AC200915BDE /* PlayByTransferConvertor.swift */, 00ED6B332BA04AC200915BDE /* PlayByTransferConvertor.swift */,
00374AE02BC92B7C00F1F20F /* ZNetUtil.swift */, 00374AE02BC92B7C00F1F20F /* ZNetUtil.swift */,
00BD87962BE10B800014E8B3 /* DisplayLinkProxy.swift */,
); );
path = Util; path = Util;
sourceTree = "<group>"; sourceTree = "<group>";
@ -882,6 +885,7 @@
006B61CD2BBA4E3D003FCB49 /* UserInfo.swift in Sources */, 006B61CD2BBA4E3D003FCB49 /* UserInfo.swift in Sources */,
AF2120AF2B4E930400400B7F /* RootManager.swift in Sources */, AF2120AF2B4E930400400B7F /* RootManager.swift in Sources */,
1E02C9322B8990C600DD3143 /* CCDeviceOperationListView.swift in Sources */, 1E02C9322B8990C600DD3143 /* CCDeviceOperationListView.swift in Sources */,
00BD87972BE10B800014E8B3 /* DisplayLinkProxy.swift in Sources */,
AF2120DA2B4E9BD400400B7F /* CCAlert.swift in Sources */, AF2120DA2B4E9BD400400B7F /* CCAlert.swift in Sources */,
006B61D12BBA5DB4003FCB49 /* MembershipProductView.swift in Sources */, 006B61D12BBA5DB4003FCB49 /* MembershipProductView.swift in Sources */,
1EFB8C702B88DA4800C72119 /* CCBottomMenuCell.swift in Sources */, 1EFB8C702B88DA4800C72119 /* CCBottomMenuCell.swift in Sources */,

View File

@ -196,6 +196,7 @@ class CCSpatialPhotoDisplayController: BaseController {
NotificationCenter.default.removeObserver(self) NotificationCenter.default.removeObserver(self)
// //
UIDevice.current.endGeneratingDeviceOrientationNotifications() UIDevice.current.endGeneratingDeviceOrientationNotifications()
externalDispalylink?.invalidate()
} }
@ -434,7 +435,7 @@ class CCSpatialPhotoDisplayController: BaseController {
let ws = us as! UIWindowScene let ws = us as! UIWindowScene
if ws.session.role.rawValue == "UIWindowSceneSessionRoleExternalDisplayNonInteractive"{ if ws.session.role.rawValue == "UIWindowSceneSessionRoleExternalDisplayNonInteractive"{
externalVC = ws.windows.first?.rootViewController as? ZZHExternalViewController 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) externalDispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
externalVC?.imageView?.isHidden = false externalVC?.imageView?.isHidden = false
externalVC?.playerLayer?.isHidden = true externalVC?.playerLayer?.isHidden = true

View File

@ -66,7 +66,7 @@ extension CCSpatialPhotoDisplayController {
//2D //2D
func monocular2DImgWith(drawImg:UIImage,scale:CGFloat, callback:@escaping (_ image:UIImage)->Void) { func monocular2DImgWith(drawImg:UIImage,scale:CGFloat, callback:@escaping (_ image:UIImage)->Void) {
if scale > 1 || scale < 1 { if scale > 1 || scale < 1 {
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async { // DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
let drawImageSize = drawImg.size let drawImageSize = drawImg.size
let newImgSize = CGSizeMake(drawImageSize.width * scale, drawImageSize.height * scale) 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) 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) drawImg.draw(in: newRect)
let image = UIGraphicsGetImageFromCurrentImageContext()! let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext(); UIGraphicsEndImageContext();
DispatchQueue.main.async { // DispatchQueue.main.async {
callback(image) callback(image)
} // }
} // }
} }
else { else {
callback(drawImg) callback(drawImg)

View File

@ -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
}
}