浏览代码

【综合】新手引导处理UI

tangchao 3 月之前
父节点
当前提交
8c876e12e7
共有 14 个文件被更改,包括 262 次插入28 次删除
  1. 6 0
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/Contents.json
  2. 21 0
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideConvert.imageset/Contents.json
  3. 二进制
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideConvert.imageset/bg-10.png
  4. 21 0
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideFillForms.imageset/Contents.json
  5. 二进制
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideFillForms.imageset/bg-14.png
  6. 21 0
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideOCR.imageset/Contents.json
  7. 二进制
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideOCR.imageset/bg-12.png
  8. 21 0
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuidePageEdit.imageset/Contents.json
  9. 二进制
      PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuidePageEdit.imageset/bg-8.png
  10. 21 2
      PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/View/KMNewUserGuideCellView.swift
  11. 55 0
      PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/View/KMNewUserGuideDisplayView.swift
  12. 73 11
      PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/Window/KMNewUserGuideWindowController.swift
  13. 15 15
      PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/Window/KMNewUserGuideWindowController.xib
  14. 8 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

+ 6 - 0
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 21 - 0
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideConvert.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "bg-10.png",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

二进制
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideConvert.imageset/bg-10.png


+ 21 - 0
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideFillForms.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "bg-14.png",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

二进制
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideFillForms.imageset/bg-14.png


+ 21 - 0
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideOCR.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "bg-12.png",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

二进制
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuideOCR.imageset/bg-12.png


+ 21 - 0
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuidePageEdit.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "bg-8.png",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

二进制
PDF Office/PDF Master/Class/GuideInfo/GuideInfoImages.xcassets/New Folder/KMImageNameNewUserGuidePageEdit.imageset/bg-8.png


+ 21 - 2
PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/View/KMNewUserGuideCellView.swift

@@ -35,6 +35,7 @@ class KMNewUserGuideCellView: NSTableCellView {
     
     private lazy var leftLine_: NSView = {
         let view = NSView()
+        view.wantsLayer = true
         return view
     }()
     
@@ -68,6 +69,20 @@ class KMNewUserGuideCellView: NSTableCellView {
         }
     }
     
+    var contentInset: NSEdgeInsets = .init(top: 0, left: 0, bottom: 0, right: 0) {
+        didSet {
+            leftConst_?.constant = contentInset.left
+            rightConst_?.constant = -contentInset.right
+            topConst_?.constant = contentInset.top
+            bottomConst_?.constant = -contentInset.bottom
+        }
+    }
+    
+    private var leftConst_: NSLayoutConstraint?
+    private var topConst_: NSLayoutConstraint?
+    private var rightConst_: NSLayoutConstraint?
+    private var bottomConst_: NSLayoutConstraint?
+    
     convenience init() {
         self.init(frame: .init(x: 0, y: 0, width: 200, height: 30))
         
@@ -82,7 +97,11 @@ class KMNewUserGuideCellView: NSTableCellView {
     
     func initSubviews() {
         addSubview(contentBox)
-        contentBox.km_add_inset_constraint()
+//        contentBox.km_add_inset_constraint()
+        leftConst_ = contentBox.km_add_leading_constraint_r()
+        topConst_ = contentBox.km_add_top_constraint_r()
+        rightConst_ = contentBox.km_add_trailing_constraint_r()
+        bottomConst_ = contentBox.km_add_bottom_constraint_r()
         
         contentBox_.contentView?.addSubview(backgroundView)
         backgroundView.km_add_inset_constraint()
@@ -99,7 +118,7 @@ class KMNewUserGuideCellView: NSTableCellView {
         subTitleLabel.km_add_top_constraint(equalTo: titleLabel, attribute: .bottom, constant: 8)
         subTitleLabel.km_add_trailing_constraint(constant: -4)
         
-        leftLine.km_leading_constraint()
+        leftLine.km_add_leading_constraint()
         leftLine.km_add_top_constraint()
         leftLine.km_add_bottom_constraint()
         leftLine.km_add_width_constraint(constant: 2)

+ 55 - 0
PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/View/KMNewUserGuideDisplayView.swift

@@ -0,0 +1,55 @@
+//
+//  KMNewUserGuideDisplayView.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/12/21.
+//
+
+import Cocoa
+
+class KMNewUserGuideDisplayView: NSView {
+    private lazy var iv_: NSImageView = {
+        let view = NSImageView()
+        return view
+    }()
+    
+    var imageView: NSImageView {
+        get {
+            return iv_
+        }
+    }
+    
+    var contentInset: NSEdgeInsets = .init(top: 0, left: 0, bottom: 0, right: 0) {
+        didSet {
+            leftConst_?.constant = contentInset.left
+            rightConst_?.constant = -contentInset.right
+            topConst_?.constant = contentInset.top
+            bottomConst_?.constant = -contentInset.bottom
+        }
+    }
+    
+    private var leftConst_: NSLayoutConstraint?
+    private var topConst_: NSLayoutConstraint?
+    private var rightConst_: NSLayoutConstraint?
+    private var bottomConst_: NSLayoutConstraint?
+    
+    convenience init() {
+        self.init(frame: .init(x: 0, y: 0, width: 200, height: 30))
+        
+        initSubViews()
+    }
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        initSubViews()
+    }
+    
+    func initSubViews() {
+        addSubview(imageView)
+        leftConst_ = imageView.km_add_leading_constraint_r()
+        topConst_ = imageView.km_add_top_constraint_r()
+        rightConst_ = imageView.km_add_trailing_constraint_r()
+        bottomConst_ = imageView.km_add_bottom_constraint_r()
+    }
+}

+ 73 - 11
PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/Window/KMNewUserGuideWindowController.swift

@@ -28,6 +28,8 @@ import Cocoa
     
     static let shared = KMNewUserGuideWindowController(windowNibName: "KMNewUserGuideWindowController")
     
+    private lazy var displayView_ = KMNewUserGuideDisplayView()
+    
     private var datas_: [KMNewUserGuideModel] = []
     
     var showType: KMNewUserGuideType = .ai {
@@ -41,15 +43,26 @@ import Cocoa
     
     override func windowDidLoad() {
         super.windowDidLoad()
+        
+        window?.title = ""
+        window?.standardWindowButton(.zoomButton)?.isHidden = true
+        window?.standardWindowButton(.miniaturizeButton)?.isHidden = true
 
         backgroundIv.image = NSImage(named: "KMImageNameNewUserGuideBg")
         backgroundIv.image?.size = window?.frame.size ?? .zero
+        titleLabel.font = .SFProTextRegularFont(20)
+        titleLabel.stringValue = NSLocalizedString("The Beginner's Guide", comment: "")
+        
         tableView.delegate = self
         tableView.dataSource = self
         tableView.enclosingScrollView?.borderType = .noBorder
         tableView.backgroundColor = .clear
         tableView.enclosingScrollView?.drawsBackground = false
         
+        rightBox.borderWidth = 0
+        rightBox.contentView = displayView_
+        displayView_.contentInset = .init(top: 0, left: 10, bottom: 34, right: 18)
+        
         interfaceThemeDidChanged(self.window?.appearance?.name ?? .vibrantLight)
         
         _initData()
@@ -71,8 +84,6 @@ import Cocoa
         model.type = type
         let maxWidth: CGFloat = 224
         if type == .ai {
-            let font = NSFont.SFProTextBoldFont(14)
-            let color = NSColor(hex: "#42464D")
             model.name = NSLocalizedString("AI Credits Giveaway", comment: "")
             let attri = NSAttributedString(string: NSLocalizedString("Free 40 AI Credits for 7-day VIP Free Trial Users", comment: ""), attributes: [
                 .font : NSFont.SFProTextRegularFont(11),
@@ -82,7 +93,7 @@ import Cocoa
             model.viewH = _calculateViewHeight(model: model, maxWidth: maxWidth)
         } else if type == .note {
             model.name = NSLocalizedString("Annotate PDF", comment: "")
-            let attri = NSAttributedString(string: NSLocalizedString("Free 40 AI Credits for 7-day VIP Free Trial Users", comment: ""), attributes: [
+            let attri = NSAttributedString(string: NSLocalizedString("Add Annotations, Images, and Stamps to PDFs", comment: ""), attributes: [
                 .font : NSFont.SFProTextRegularFont(11),
                 .foregroundColor : NSColor(hex: "#42464D")
             ])
@@ -90,7 +101,7 @@ import Cocoa
             model.viewH = _calculateViewHeight(model: model, maxWidth: maxWidth)
         } else if type == .editPDF {
             model.name = NSLocalizedString("Edit PDF", comment: "")
-            let attri = NSAttributedString(string: NSLocalizedString("Free 40 AI Credits for 7-day VIP Free Trial Users", comment: ""), attributes: [
+            let attri = NSAttributedString(string: NSLocalizedString("Edit PDF Text, Images, and Watermarks", comment: ""), attributes: [
                 .font : NSFont.SFProTextRegularFont(11),
                 .foregroundColor : NSColor(hex: "#42464D")
             ])
@@ -98,7 +109,8 @@ import Cocoa
             model.viewH = _calculateViewHeight(model: model, maxWidth: maxWidth)
         } else if type == .pageEdit {
             model.name = NSLocalizedString("Page Edit", comment: "")
-            let attri = NSAttributedString(string: NSLocalizedString("Free 40 AI Credits for 7-day VIP Free Trial Users", comment: ""), attributes: [
+            model.imageName = "KMImageNameNewUserGuidePageEdit"
+            let attri = NSAttributedString(string: NSLocalizedString("Insert, Delete, Rotate, and Extract the Pages in PDFs", comment: ""), attributes: [
                 .font : NSFont.SFProTextRegularFont(11),
                 .foregroundColor : NSColor(hex: "#42464D")
             ])
@@ -106,7 +118,8 @@ import Cocoa
             model.viewH = _calculateViewHeight(model: model, maxWidth: maxWidth)
         } else if type == .convert {
             model.name = NSLocalizedString("PDF Converter", comment: "")
-            let attri = NSAttributedString(string: NSLocalizedString("Free 40 AI Credits for 7-day VIP Free Trial Users", comment: ""), attributes: [
+            model.imageName = "KMImageNameNewUserGuideConvert"
+            let attri = NSAttributedString(string: NSLocalizedString("Convert to/from MS Office, Images, and More", comment: ""), attributes: [
                 .font : NSFont.SFProTextRegularFont(11),
                 .foregroundColor : NSColor(hex: "#42464D")
             ])
@@ -114,7 +127,8 @@ import Cocoa
             model.viewH = _calculateViewHeight(model: model, maxWidth: maxWidth)
         } else if type == .ocr {
             model.name = NSLocalizedString("OCR", comment: "")
-            let attri = NSAttributedString(string: NSLocalizedString("Free 40 AI Credits for 7-day VIP Free Trial Users", comment: ""), attributes: [
+            model.imageName = "KMImageNameNewUserGuideOCR"
+            let attri = NSAttributedString(string: NSLocalizedString("Scanned PDFs to Editable & Searchable PDFs in 90+ Languages", comment: ""), attributes: [
                 .font : NSFont.SFProTextRegularFont(11),
                 .foregroundColor : NSColor(hex: "#42464D")
             ])
@@ -122,7 +136,8 @@ import Cocoa
             model.viewH = _calculateViewHeight(model: model, maxWidth: maxWidth)
         } else if type == .fillForms {
             model.name = NSLocalizedString("Create & Fill Forms", comment: "")
-            let attri = NSAttributedString(string: NSLocalizedString("Free 40 AI Credits for 7-day VIP Free Trial Users", comment: ""), attributes: [
+            model.imageName = "KMImageNameNewUserGuideFillForms"
+            let attri = NSAttributedString(string: NSLocalizedString("Support to Create & Fill Interactive PDF Forms", comment: ""), attributes: [
                 .font : NSFont.SFProTextRegularFont(11),
                 .foregroundColor : NSColor(hex: "#42464D")
             ])
@@ -143,7 +158,15 @@ import Cocoa
     override func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
         super.interfaceThemeDidChanged(appearance)
         
-        
+        KMMainThreadExecute {
+            if KMAppearance.isDarkMode() {
+                
+            } else {
+                self.titleLabel.textColor = NSColor(hex: "#002143")
+            }
+            
+            self.tableView.reloadData()
+        }
     }
     
     // MARK: - public Methods
@@ -157,12 +180,22 @@ import Cocoa
     }
     
     public func selectType(_ type: KMNewUserGuideType) {
+        var selectedModel: KMNewUserGuideModel?
         for model in datas_ {
             model.isSelected = (model.type == type)
+            if model.isSelected {
+                selectedModel = model
+            }
         }
         
         KMMainThreadExecute {
-            self.tableView.reloadData()
+//            self.tableView.reloadData()
+            self.tableView.animator().reloadData()
+            
+            if let data = selectedModel?.imageName {
+                self.displayView_.imageView.image = NSImage(named: data)
+                self.displayView_.imageView.image?.size = NSMakeSize(480, 320)
+            }
         }
     }
     
@@ -194,32 +227,61 @@ extension KMNewUserGuideWindowController: NSTableViewDelegate, NSTableViewDataSo
         return model?.viewH ?? defaultViewH_
     }
     
+    func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
+        let rowView = KMTableRowView()
+        rowView.selectionBackgroundColorBlock = {
+            return .clear
+        }
+        return rowView
+    }
+    
     func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
         var cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "CellId"), owner: self) as? KMNewUserGuideCellView
         if cell == nil {
             cell = KMNewUserGuideCellView()
         }
         
+        cell?.contentInset = .init(top: 4, left: 0, bottom: 4, right: 0)
+        
         guard let model = datas_.safe_element(for: row) as? KMNewUserGuideModel else {
             return cell
         }
         
+        cell?.titleLabel.font = .SFProTextBoldFont(14)
+        
         cell?.titleLabel.stringValue = model.name
         if let data = model.despAttri {
             cell?.subTitleLabel.attributedStringValue = data
         }
         
         let isSelected = model.isSelected
+        cell?.subTitleLabel.isHidden = !isSelected
+        cell?.leftLine.isHidden = !isSelected
         if KMAppearance.isDarkMode() {
             
         } else {
+            cell?.titleLabel.textColor = NSColor(hex: "#42464D")
+            cell?.leftLine.layer?.backgroundColor = NSColor(hex: "#4982E6").cgColor
+            
+            cell?.backgroundView.layer?.cornerRadius = 4
             if isSelected {
+                cell?.backgroundView.layer?.backgroundColor = NSColor(hex: "#DCF4FF").withAlphaComponent(0.4).cgColor
             } else {
-                cell?.backgroundView.layer?.cornerRadius = 4
                 cell?.backgroundView.layer?.backgroundColor = .white
             }
         }
         
         return cell
     }
+    
+    func tableViewSelectionDidChange(_ notification: Notification) {
+        if tableView.isEqual(to: notification.object) {
+            let row = tableView.selectedRow
+            guard let model = datas_.safe_element(for: row) as? KMNewUserGuideModel else {
+                return
+            }
+            
+            selectType(model.type)
+        }
+    }
 }

+ 15 - 15
PDF Office/PDF Master/Class/GuideInfo/NewUserGuide/Window/KMNewUserGuideWindowController.xib

@@ -21,28 +21,28 @@
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
         <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" titlebarAppearsTransparent="YES" id="F0z-JX-Cv5">
             <windowStyleMask key="styleMask" titled="YES" closable="YES" fullSizeContentView="YES"/>
-            <rect key="contentRect" x="196" y="240" width="773" height="480"/>
+            <rect key="contentRect" x="196" y="240" width="773" height="456"/>
             <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
-            <value key="minSize" type="size" width="773" height="480"/>
-            <value key="maxSize" type="size" width="773" height="480"/>
-            <value key="minFullScreenContentSize" type="size" width="773" height="480"/>
-            <value key="maxFullScreenContentSize" type="size" width="773" height="480"/>
+            <value key="minSize" type="size" width="773" height="456"/>
+            <value key="maxSize" type="size" width="773" height="456"/>
+            <value key="minFullScreenContentSize" type="size" width="773" height="456"/>
+            <value key="maxFullScreenContentSize" type="size" width="773" height="456"/>
             <view key="contentView" id="se5-gp-TjO">
-                <rect key="frame" x="0.0" y="0.0" width="773" height="480"/>
+                <rect key="frame" x="0.0" y="0.0" width="773" height="456"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
                     <box boxType="custom" borderWidth="0.0" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="218-wq-gaX">
-                        <rect key="frame" x="0.0" y="0.0" width="773" height="480"/>
+                        <rect key="frame" x="0.0" y="0.0" width="773" height="456"/>
                         <view key="contentView" id="daP-1p-Ehj">
-                            <rect key="frame" x="0.0" y="0.0" width="773" height="480"/>
+                            <rect key="frame" x="0.0" y="0.0" width="773" height="456"/>
                             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                             <subviews>
                                 <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="U0T-He-deN">
-                                    <rect key="frame" x="0.0" y="0.0" width="773" height="480"/>
+                                    <rect key="frame" x="0.0" y="0.0" width="773" height="456"/>
                                     <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="Zcd-xp-NAj"/>
                                 </imageView>
                                 <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hwj-y0-XtL">
-                                    <rect key="frame" x="16" y="418" width="741" height="16"/>
+                                    <rect key="frame" x="16" y="394" width="741" height="16"/>
                                     <textFieldCell key="cell" selectable="YES" alignment="center" title="Multiline Label" id="etl-sx-b1l">
                                         <font key="font" metaFont="system"/>
                                         <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@@ -50,13 +50,13 @@
                                     </textFieldCell>
                                 </textField>
                                 <scrollView autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aOp-ob-A0D">
-                                    <rect key="frame" x="18" y="0.0" width="250" height="382"/>
+                                    <rect key="frame" x="18" y="0.0" width="250" height="358"/>
                                     <clipView key="contentView" id="Brp-Ha-diK">
-                                        <rect key="frame" x="1" y="1" width="248" height="380"/>
+                                        <rect key="frame" x="1" y="1" width="248" height="356"/>
                                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                         <subviews>
                                             <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="automatic" viewBased="YES" id="Er5-fq-6EI">
-                                                <rect key="frame" x="0.0" y="0.0" width="248" height="380"/>
+                                                <rect key="frame" x="0.0" y="0.0" width="248" height="356"/>
                                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                                 <size key="intercellSpacing" width="17" height="0.0"/>
                                                 <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -111,9 +111,9 @@
                                     </scroller>
                                 </scrollView>
                                 <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Znv-T2-LME">
-                                    <rect key="frame" x="268" y="0.0" width="505" height="382"/>
+                                    <rect key="frame" x="268" y="0.0" width="505" height="358"/>
                                     <view key="contentView" id="06y-Bm-ALg">
-                                        <rect key="frame" x="1" y="1" width="503" height="380"/>
+                                        <rect key="frame" x="1" y="1" width="503" height="356"/>
                                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                     </view>
                                 </box>

+ 8 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -88,6 +88,9 @@
 		6554450E2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		6554450F2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
 		655445102C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */; };
+		657345712D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 657345702D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift */; };
+		657345722D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 657345702D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift */; };
+		657345732D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 657345702D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift */; };
 		658FDBA92C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAA2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
 		658FDBAB2C9D4B3100EFA72E /* KMNoteReplyCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */; };
@@ -5830,6 +5833,7 @@
 		655445082C88483B00BD9010 /* KMDiscountToSaveWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMDiscountToSaveWindowController.xib; sourceTree = "<group>"; };
 		655445092C88483C00BD9010 /* KMDiscountToSaveWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDiscountToSaveWindowController.h; sourceTree = "<group>"; };
 		6554450A2C88483C00BD9010 /* KMDiscountToSaveWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDiscountToSaveWindowController.m; sourceTree = "<group>"; };
+		657345702D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNewUserGuideDisplayView.swift; sourceTree = "<group>"; };
 		658FDBA82C9D4B3100EFA72E /* KMNoteReplyCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteReplyCellView.swift; sourceTree = "<group>"; };
 		658FDBAC2C9D4B9600EFA72E /* KMNoteReplyCellView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMNoteReplyCellView.xib; sourceTree = "<group>"; };
 		658FDBB02C9D90CE00EFA72E /* KMNoteFilterStateCollevtionViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteFilterStateCollevtionViewItem.swift; sourceTree = "<group>"; };
@@ -8226,6 +8230,7 @@
 			isa = PBXGroup;
 			children = (
 				651169E62D13F68D0011E76B /* KMNewUserGuideCellView.swift */,
+				657345702D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -17230,6 +17235,7 @@
 				BB1CA5CB298E5F540059E31C /* KMMergeTools.swift in Sources */,
 				899700DF28F3A9F2009AF911 /* KMHomeWindowController.swift in Sources */,
 				BBF8A3FA2AE89B8500788BAC /* KMBatchHeader.swift in Sources */,
+				657345712D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift in Sources */,
 				BB146FDE299DC0D100784A6A /* GTLRDriveObjects.m in Sources */,
 				ADDF83382B391A5C00A81A4E /* CPDFSignatureAnnotation+PDFListView.m in Sources */,
 				BB853C8A2AF8BC7D009C20C1 /* KMBatchAddPasswordOperation.swift in Sources */,
@@ -18812,6 +18818,7 @@
 				AD867FA229DEB4B000F00440 /* KMBOTAAnnotationTool.swift in Sources */,
 				9F1FE4B829406E4700E952CA /* CTBrowserFrameView.m in Sources */,
 				9F0CB5062986561E00007028 /* KMDesignToken+BorderRight.swift in Sources */,
+				657345722D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift in Sources */,
 				BB69855A2C2A94BD007D307D /* KMGuideTargetView.swift in Sources */,
 				AD0FA50B29A9E74200EDEB50 /* KMLoginInputPasswordView.swift in Sources */,
 				AD1FE84D2BD920C300AA4A9B /* TextFieldFormatter.m in Sources */,
@@ -20571,6 +20578,7 @@
 				BB8F4584295B0F900037EA22 /* KMHeaderFooterMarginInfoView.swift in Sources */,
 				AD4C71732B9ADFE0003A6286 /* NSError_Extensions.swift in Sources */,
 				BB49ED17293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */,
+				657345732D1668DF002B63D5 /* KMNewUserGuideDisplayView.swift in Sources */,
 				899700EA28F3E4D3009AF911 /* MainWindowController.swift in Sources */,
 				BBD1F79A296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				BB8F4574295ACE380037EA22 /* KMHeaderFooterAdjectiveListCell.swift in Sources */,