Browse Source

【页面分割】单页模式功能调式

tangchao 1 year ago
parent
commit
42cc8db09a

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayPropertiesViewController.swift

@@ -597,7 +597,7 @@ class KMPageDisplayPropertiesButton: NSButton {
 //        reloadData()
 //    }
 
-    @objc func removeSecondaryPdfContentView(_ notification: Notification) {
+    @objc func removeSecondaryPdfContentView(_ notification: Notification?) {
         setSplitViewType(.singleScreen)
         replaceView.isHidden = true
         replaceViewTopConstraint.constant = replaceView.isHidden ? -replaceView.bounds.height : 10.0

+ 40 - 18
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -2804,6 +2804,14 @@ extension KMMainViewController {
         
     }
     
+    @objc func removeSecondaryPdfContentView(_ sender: Notification?) {
+        if let _ = sender {
+            NotificationCenter.default.removeObserver(self, name: KMSplitView.animationDidEndNotification, object: self.newPDFSplitView)
+        }
+        self.secondaryPdfContentView?.removeFromSuperview()
+        self.newPDFSplitView.adjustSubviews()
+    }
+    
     func singlePageScreen(isSinglePage: Bool, doublePagesScreen isHorizontal: Bool) -> Void {
         if !isSinglePage && isHorizontal {
             self.openSecondaryPdfView?.changeBenefit(ofContrastLabelWidth: 208)
@@ -2816,9 +2824,24 @@ extension KMMainViewController {
     
     func displaySinglePageScreen(isSinglePage: Bool, doublePageScreen isHorizontal: Bool) -> Void {
         if isSinglePage {
-            pdfSplitView.dividerStyle = .thin
-
-            pdfSplitView.setPosition(mianSplitView.maxPossiblePositionOfDivider(at: 1), ofDividerAt: 0, animate: false)
+//            pdfSplitView.dividerStyle = .thin
+//            pdfSplitView.setPosition(mianSplitView.maxPossiblePositionOfDivider(at: 1), ofDividerAt: 0, animate: false)
+            if self.newPDFSplitView.animating {
+                return
+            }
+            if self.secondaryPdfContentView?.window != nil {
+                self.lastSplitPDFHeight = self.lastSplitPDFHeightFloat(self.secondaryPdfContentView?.frame ?? .zero)
+                self.newPDFSplitView.setPosition(self.newPDFSplitView.maxPossiblePositionOfDivider(at: 0), ofDividerAt: 0, animate: true)
+                if self.newPDFSplitView.animating {
+                    NotificationCenter.default.addObserver(self, selector: #selector(removeSecondaryPdfContentView), name: KMSplitView.animationDidEndNotification, object: self.newPDFSplitView)
+                } else {
+                    self.removeSecondaryPdfContentView(nil)
+                }
+            }
+            self.view.window?.recalculateKeyViewLoop()
+            if self.interactionMode == .SKLegacyFullScreenMode {
+                self.view.window?.makeFirstResponder(self.listView)
+            }
         } else {
             if self.newPDFSplitView.animating {
                 return
@@ -2836,7 +2859,7 @@ extension KMMainViewController {
                 var position = self.lastSplitPDFHeightFloat(frame)-self.lastSplitPDFHeight-Float(self.newPDFSplitView.dividerThickness)
                 var point: NSPoint = .zero
                 var page: CPDFPage?
-                self.newPDFSplitView.setPosition(position.cgFloat, ofDividerAt: 0, animate: false)
+                self.newPDFSplitView.setPosition(position.cgFloat, ofDividerAt: 0, animate: true)
 
                 if (self.secondaryPdfContentView == nil) {
 //                    secondaryPdfContentView = [[SKGradientView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 200.0, 20.0)];
@@ -2848,7 +2871,7 @@ extension KMMainViewController {
                     self.newPDFSplitView.addSubview(self.secondaryPdfContentView!)
 //                    self.newPDFSplitView.addArrangedSubview(self.secondaryPdfContentView!)
 //                    // Because of a PDFView bug, display properties can not be changed before it is placed in a window
-//                    [secondaryPdfView setSynchronizedPDFView:pdfView];
+                    self.secondaryPdfView?.synchronizedPDFView = self.listView
                     self.secondaryPdfView?.backgroundColor = self.listView.backgroundColor
 //                    [secondaryPdfView applyDefaultPageBackgroundColor];
                     self.secondaryPdfView?.displaysPageBreaks = false
@@ -2896,7 +2919,7 @@ extension KMMainViewController {
                     self.newPDFSplitView.addSubview(self.secondaryPdfContentView!)
                 }
                 
-                self.newPDFSplitView.setPosition(self.secondaryPdfContentView?.bounds.size.width ?? 120, ofDividerAt: 1, animate: false)
+                self.newPDFSplitView.setPosition(self.secondaryPdfContentView?.bounds.size.width ?? 120, ofDividerAt: 1, animate: true)
 
                 if (page != nil) {
                     self.secondaryPdfView?.go(toPageIndex: Int(page!.pageIndex()), animated: false)
@@ -2905,21 +2928,20 @@ extension KMMainViewController {
                     let conP = self.secondaryPdfView?.convert(tmpP, from: page) ?? .zero
                     point = self.secondaryPdfView?.convert(conP, to: self.secondaryPdfView?.documentView()) ?? .zero
                     if let docView = self.secondaryPdfView?.documentView(), docView.contentView.isFlipped == false {
-//                        point.y -= docView.isFlipped ? NSHeight(docView.visibleRect) : nshei
-                        //                        point.y -= [[secondaryPdfView documentView] isFlipped] ? -NSHeight([[secondaryPdfView documentView] visibleRect]) : NSHeight([[secondaryPdfView documentView] visibleRect]);
-                        
+                        point.y -= docView.isFlipped ? -NSHeight(docView.visibleRect) : NSHeight(docView.visibleRect)
                     }
-//                    [[secondaryPdfView documentView] scrollPoint:point];
-//                    [secondaryPdfView layoutDocumentView];
+                    self.secondaryPdfView?.documentView()?.scroll(point)
+                    self.secondaryPdfView?.layoutDocumentView()
                 }
             }
-//            [[self window] recalculateKeyViewLoop];
-//            if ([self interactionMode] == SKLegacyFullScreenMode)
-//                [[self window] makeFirstResponder:pdfView];
-//
-//            if (![self.secondaryPdfView document]) {
-//                [openSecondaryPdfView viewHighlyAdaptive];
-//            }
+            self.view.window?.recalculateKeyViewLoop()
+            if self.interactionMode == .SKLegacyFullScreenMode {
+                self.view.window?.makeFirstResponder(self.listView)
+            }
+
+            if self.secondaryPdfView?.document == nil {
+                self.openSecondaryPdfView?.viewHighlyAdaptive()
+            }
         }
     }
     

+ 25 - 25
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift

@@ -412,31 +412,31 @@ extension KMMainViewController : NSSplitViewDelegate {
             }
             centerView.setFrameSize(mainSize)
         } else if splitView == self.newPDFSplitView {
-            let firstV = splitView.subviews.first
-            let lastV = splitView.subviews.last
-            if firstV == lastV{
-                splitView.adjustSubviews()
-                return
-            }
-            if self.newPDFSplitView.isVertical { // 横向
-                // 左边是否收起
-                let leftCollapsed = splitView.isSubviewCollapsed(firstV!)
-                // 右边是否收起
-                let rightCollapsed = splitView.isSubviewCollapsed(lastV!)
-                
-                var contentSize = splitView.frame.size
-                firstV?.setFrameSize(NSMakeSize(contentSize.width * 0.5, contentSize.height))
-                lastV?.setFrameSize(NSMakeSize(contentSize.width * 0.5, contentSize.height))
-            } else { // 纵向
-                // 左边是否收起
-                let leftCollapsed = splitView.isSubviewCollapsed(firstV!)
-                // 右边是否收起
-                let rightCollapsed = splitView.isSubviewCollapsed(lastV!)
-                
-                var contentSize = splitView.frame.size
-                firstV?.setFrameSize(NSMakeSize(contentSize.width, contentSize.height * 0.5))
-                lastV?.setFrameSize(NSMakeSize(contentSize.width, contentSize.height * 0.5))
-            }
+//            let firstV = splitView.subviews.first
+//            let lastV = splitView.subviews.last
+//            if firstV == lastV{
+//                splitView.adjustSubviews()
+//                return
+//            }
+//            if self.newPDFSplitView.isVertical { // 横向
+//                // 左边是否收起
+//                let leftCollapsed = splitView.isSubviewCollapsed(firstV!)
+//                // 右边是否收起
+//                let rightCollapsed = splitView.isSubviewCollapsed(lastV!)
+//                
+//                var contentSize = splitView.frame.size
+//                firstV?.setFrameSize(NSMakeSize(contentSize.width * 0.5, contentSize.height))
+//                lastV?.setFrameSize(NSMakeSize(contentSize.width * 0.5, contentSize.height))
+//            } else { // 纵向
+//                // 左边是否收起
+//                let leftCollapsed = splitView.isSubviewCollapsed(firstV!)
+//                // 右边是否收起
+//                let rightCollapsed = splitView.isSubviewCollapsed(lastV!)
+//                
+//                var contentSize = splitView.frame.size
+//                firstV?.setFrameSize(NSMakeSize(contentSize.width, contentSize.height * 0.5))
+//                lastV?.setFrameSize(NSMakeSize(contentSize.width, contentSize.height * 0.5))
+//            }
         }
         splitView.adjustSubviews()
     }

+ 4 - 2
PDF Office/PDF Master/Class/ToolsLibrary/NSView/KMSplitView.swift

@@ -7,10 +7,12 @@
 
 import Cocoa
 
-let CPDFOfficeSplitViewAnimationDidEndNotification = "CPDFOfficeSplitViewAnimationDidEndNotification"
+private let CPDFOfficeSplitViewAnimationDidEndNotification = NSNotification.Name(rawValue: "CPDFOfficeSplitViewAnimationDidEndNotification")
 let CPDFOfficeDisableAnimationsKey = "CPDFOfficeDisableAnimationsKey"
 
 class KMSplitView: NSSplitView {
+    
+    static let animationDidEndNotification = CPDFOfficeSplitViewAnimationDidEndNotification
 
     var animating: Bool = false
     
@@ -83,7 +85,7 @@ class KMSplitView: NSSplitView {
                 }
             } completionHandler: {
                 self.animating = false
-                NotificationCenter.default.post(name: NSNotification.Name(rawValue: CPDFOfficeSplitViewAnimationDidEndNotification) , object: self)
+                NotificationCenter.default.post(name: CPDFOfficeSplitViewAnimationDidEndNotification , object: self)
             }
         }
     }