Browse Source

【页面编辑】优化集合视图id的设置相关

tangchao 1 year ago
parent
commit
553b945b5d

+ 16 - 0
PDF Office/PDF Master.xcodeproj/project.pbxproj

@@ -2505,6 +2505,9 @@
 		BB1CA5CB298E5F540059E31C /* KMMergeTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1CA5CA298E5F540059E31C /* KMMergeTools.swift */; };
 		BB1CA5CC298E5F540059E31C /* KMMergeTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1CA5CA298E5F540059E31C /* KMMergeTools.swift */; };
 		BB1CA5CD298E5F540059E31C /* KMMergeTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1CA5CA298E5F540059E31C /* KMMergeTools.swift */; };
+		BB1D41D32B26D9BD00994EDC /* KMReusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1D41D22B26D9BD00994EDC /* KMReusable.swift */; };
+		BB1D41D42B26D9BD00994EDC /* KMReusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1D41D22B26D9BD00994EDC /* KMReusable.swift */; };
+		BB1D41D52B26D9BD00994EDC /* KMReusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1D41D22B26D9BD00994EDC /* KMReusable.swift */; };
 		BB1EC7FE2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */; };
 		BB1EC7FF2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */; };
 		BB1EC8002967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */; };
@@ -5181,6 +5184,7 @@
 		BB1BFF912AEA6352003EB179 /* KMImageToPDFMethod.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMImageToPDFMethod.swift; sourceTree = "<group>"; };
 		BB1CA5C5298E20820059E31C /* KMPreferenceAligementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPreferenceAligementView.swift; sourceTree = "<group>"; };
 		BB1CA5CA298E5F540059E31C /* KMMergeTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMergeTools.swift; sourceTree = "<group>"; };
+		BB1D41D22B26D9BD00994EDC /* KMReusable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMReusable.swift; sourceTree = "<group>"; };
 		BB1EC7FC2967B26700EC0BC3 /* KMPDFEditViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFEditViewController.swift; sourceTree = "<group>"; };
 		BB1EC7FD2967B26700EC0BC3 /* KMPDFEditViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPDFEditViewController.xib; sourceTree = "<group>"; };
 		BB24D4A52977BE6700041659 /* KMRedactConfirmWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMRedactConfirmWindowController.swift; sourceTree = "<group>"; };
@@ -8597,6 +8601,7 @@
 		BB135C2629B6CD4500FD5965 /* Common */ = {
 			isa = PBXGroup;
 			children = (
+				BB1D41D12B26D99D00994EDC /* Reusable */,
 				BB10FAEC2AFE232300F18D65 /* LineInspector */,
 				BB0A551B2A3078EB00B6E84B /* Designs */,
 				BB6B43642A04913200E02B54 /* Base */,
@@ -8866,6 +8871,14 @@
 			path = Tools;
 			sourceTree = "<group>";
 		};
+		BB1D41D12B26D99D00994EDC /* Reusable */ = {
+			isa = PBXGroup;
+			children = (
+				BB1D41D22B26D9BD00994EDC /* KMReusable.swift */,
+			);
+			path = Reusable;
+			sourceTree = "<group>";
+		};
 		BB1EC7FA2967B24100EC0BC3 /* PageEdit */ = {
 			isa = PBXGroup;
 			children = (
@@ -13001,6 +13014,7 @@
 				BBFBE6BE28DD7B97008B2335 /* AppDelegate.swift in Sources */,
 				BB14703E299DC0D200784A6A /* OIDEndSessionResponse.m in Sources */,
 				ADD1B6D72946BDFD00C3FFF7 /* KMPrintChoosePageSizeView.swift in Sources */,
+				BB1D41D32B26D9BD00994EDC /* KMReusable.swift in Sources */,
 				BBEC00E5295C4D3C00A26C98 /* KMBatesPageInfoView.swift in Sources */,
 				BB6DD814293486FA001F0544 /* KMSecureEncryptPasswordCellView.swift in Sources */,
 				BB146FF6299DC0D100784A6A /* OIDAuthorizationService+Mac.m in Sources */,
@@ -13788,6 +13802,7 @@
 				9FDD0F78294FEF64000C4DAD /* KMConvertPDFManager.swift in Sources */,
 				BBBB6CD72AD150D20035AA66 /* CPDFCircleAnnotation+PDFListView.swift in Sources */,
 				8942F80429262B2E00389627 /* KMSideViewController.swift in Sources */,
+				BB1D41D42B26D9BD00994EDC /* KMReusable.swift in Sources */,
 				9F0CB51E2986569B00007028 /* KMDesignToken+BorderRadiusBottomRight.swift in Sources */,
 				9FDD0F7D2952F2D8000C4DAD /* KMBaseParser.swift in Sources */,
 				ADD1B6C82942E83000C3FFF7 /* KMPrintBottomView.swift in Sources */,
@@ -14628,6 +14643,7 @@
 				9F1FE4BC29406E4700E952CA /* NSImage+CTAdditions.m in Sources */,
 				AD0FA50429A8E36200EDEB50 /* KMLightMemberAlertView.swift in Sources */,
 				9F0CB53F2986571A00007028 /* KMDesignToken+Typography.swift in Sources */,
+				BB1D41D52B26D9BD00994EDC /* KMReusable.swift in Sources */,
 				ADE787AC2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */,
 				BBF62C6A2B033B34007B7E86 /* KMPDFEditExtractWindow.swift in Sources */,
 				9F1FE49529406E4700E952CA /* common.m in Sources */,

+ 16 - 0
PDF Office/PDF Master.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -372,5 +372,21 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "2F5BFC0E-18E7-419F-819F-E01D159DB7F8"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/Common/Control/KMThumbnailView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "214"
+            endingLineNumber = "214"
+            landmarkName = "register(_:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 28 - 0
PDF Office/PDF Master/Class/Common/KMCommonDefine.swift

@@ -49,3 +49,31 @@ let KMSelectorCopy = NSSelectorFromString("copy:")
 
 typealias KMBatchActionBlock = (_ controller: NSWindowController, _ files: [KMFileAttribute]) -> Void
 
+// MARK: - KM & KMProtocol
+
+public struct KM<Base> {
+    public let base: Base
+    
+    init(_ base: Base) {
+        self.base = base
+    }
+}
+
+// 凡是遵守了 KMProtocol 协议的类型就都获取了 km 属性
+// km 的类型是 KM, KM的关联类型(泛型)就是他自己
+public protocol KMProtocol {}
+extension KMProtocol {
+    
+    public var km: KM<Self> {
+        return KM(self)
+    }
+    
+    public static var km: KM<Self>.Type {
+        return KM.self
+    }
+}
+
+// 所有 NSObject 的子类都默认遵循了 KMProtocol
+extension NSObject: KMProtocol {}
+
+

+ 37 - 0
PDF Office/PDF Master/Class/Common/Reusable/KMReusable.swift

@@ -0,0 +1,37 @@
+//
+//  KMReusable.swift
+//  PDF Master
+//
+//  Created by tangchao on 2023/12/11.
+//
+
+import Foundation
+
+public protocol KMReusable: AnyObject {
+    static var identifier: String { get }
+    
+    static var itemIdentifier: NSUserInterfaceItemIdentifier { get }
+}
+
+extension KMReusable {
+    public static var identifier: String {
+        return String(describing: Self.self)
+    }
+    
+    public static var itemIdentifier: NSUserInterfaceItemIdentifier {
+        return NSUserInterfaceItemIdentifier(rawValue: self.identifier)
+    }
+}
+
+extension KM where Base: NSCollectionView {
+    public func register<T: NSCollectionViewItem>(cell: T.Type) where T: KMReusable {
+        base.register(cell, forItemWithIdentifier: T.itemIdentifier)
+    }
+    
+    public func dequeueReusableCell<T: NSCollectionViewItem>(for indexPath: IndexPath) -> T where T: KMReusable {
+        guard let cell = base.makeItem(withIdentifier: T.itemIdentifier, for: indexPath) as? T else {
+            fatalError("Could not dequeue reusable cell with identifier: \(T.itemIdentifier)")
+        }
+        return cell
+    }
+}

+ 1 - 1
PDF Office/PDF Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift

@@ -1128,7 +1128,7 @@ extension KMPDFEditViewController: KMThumbnailViewDelegate {
     }
     
     func thumbnailView(thumbanView: KMThumbnailView, itemForRepresentedObjectAt indexpath: IndexPath) -> NSCollectionViewItem {
-        let cellView: KMPageEditThumbnailItem = thumbanView.collectionView.makeItem(withIdentifier: KMPageEditThumbnailItem.km_identifier, for: indexpath) as! KMPageEditThumbnailItem
+        let cellView: KMPageEditThumbnailItem = thumbanView.collectionView.km.dequeueReusableCell(for: indexpath)
         cellView.isShowPageSize = self.thumbnailView.isShowPageSize
         cellView.setPage(page: (self.pdfDocument?.page(at: UInt(indexpath.item)))!)
         

+ 2 - 0
PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPageEditThumbnailItem.swift

@@ -261,3 +261,5 @@ class KMPageEditThumbnailItem: NSCollectionViewItem {
          self.pageView.frame = NSMakeRect(pageX, pageY, size.width, size.height)
      }
 }
+
+extension KMPageEditThumbnailItem: KMReusable {}

+ 1 - 1
PDF Office/PDF Master/Class/PDFTools/PageEdit/View/KMPageEditThumbnailView.swift

@@ -36,7 +36,7 @@ class KMPageEditThumbnailView: KMPDFThumbnailView {
         self.defaultThumbnailSzie = self.thumbnailSzie
         self.isShowPageSize = true
         
-        self.register(KMPageEditThumbnailItem.self)
+        self.collectionView.km.register(cell: KMPageEditThumbnailItem.self)
         self.collectionView.allowsMultipleSelection = true
     }
     

+ 2 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMPDFThumbnailItem.swift

@@ -299,3 +299,5 @@ class KMPDFThumbnailItem: NSCollectionViewItem {
         callBack(self, event)
     }
 }
+
+extension KMPDFThumbnailItem: KMReusable {}

+ 2 - 2
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/KMPDFThumbnailView.swift

@@ -42,7 +42,7 @@ class KMPDFThumbnailView: KMThumbnailView {
         
         self.thumbnailSzie = CGSize(width: 120, height: 155)
         self.minimumLineSpacing = 8
-        self.register(KMPDFThumbnailItem.self)
+        self.collectionView.km.register(cell: KMPDFThumbnailItem.self)
         
         self.collectionView.registerForDraggedTypes(NSFilePromiseReceiver.readableDraggedTypes.map { NSPasteboard.PasteboardType($0) })
         self.collectionView.setDraggingSourceOperationMask([.copy, .delete], forLocal: true)
@@ -84,7 +84,7 @@ extension KMPDFThumbnailView {
             return item
         }
 
-        let cellView: KMPDFThumbnailItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: NSStringFromClass(KMPDFThumbnailItem.self)), for: indexPath) as! KMPDFThumbnailItem
+        let cellView: KMPDFThumbnailItem = collectionView.km.dequeueReusableCell(for: indexPath)
         cellView.thumbnailView = self
         if let page_ = self.document?.page(at: UInt(indexPath.item)) {
             cellView.page = page_