123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- //
- // KMBatchOperateCompressSettingViewController.swift
- // PDF Reader Pro
- //
- // Created by lizhe on 2024/11/15.
- //
- import Cocoa
- typealias KMBatchOperateCompressSettingViewCancelAction = (_ controller: KMBatchOperateCompressSettingViewController ) -> Void
- typealias KMBatchOperateCompressSettingViewDoneAction = (_ controller: KMBatchOperateCompressSettingViewController ) -> Void
- class KMBatchOperateCompressSettingViewController: KMBaseViewController {
- @IBOutlet weak var doneButton: KMButton!
- @IBOutlet weak var cancelButton: KMButton!
- @IBOutlet weak var settingView: KMCompressSettingTableView!
-
- private var toastViews: [NSView] = [] // 用于管理多个 alertView
-
- var cancelAction: KMBatchOperateCompressSettingViewCancelAction?
- var doneAction: KMBatchOperateCompressSettingViewDoneAction?
-
- var model: KMCompressSettingModel = KMCompressSettingModel(modelsType: .standard) {
- didSet {
- self.reloadData()
- }
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- // 将按钮设置为第一响应者
- if let window = view.window {
-
- window.makeFirstResponder(doneButton.nextResponder)
- window.defaultButtonCell = doneButton.cell as? NSButtonCell
-
- window.contentMinSize = CGSizeMake(624, 513)
- window.contentMaxSize = CGSizeMake(624, 513)
- }
-
- // self.showAlert("Unembed any font may result in incomplete display of text")
- //
- // // 自动移除视图
- // DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
- // self.showAlert("Less than 7 items selected; compression quality may be affected")
- // }
- }
-
- func reloadData() {
- self.settingView.model = model
- }
- func showAlert(_ string: String) {
- // 创建 alertView
- let alertView = KMBatchOperateCompressSettingAlertView()
- alertView.titleString = string
- alertView.translatesAutoresizingMaskIntoConstraints = false
- self.view.addSubview(alertView)
- // 添加到管理数组
- toastViews.append(alertView)
- // 设置约束
- let centerYOffset = CGFloat((46 + 12) * (toastViews.count - 1) + 68) // 每个 Toast 间隔 30px
- NSLayoutConstraint.activate([
- alertView.widthAnchor.constraint(lessThanOrEqualTo: self.view.widthAnchor, multiplier: 0.8),
- alertView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
- alertView.centerYAnchor.constraint(equalTo: self.view.topAnchor, constant: centerYOffset),
- ])
- // 自动移除视图
- DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
- self.removeAlert(alertView)
- }
- }
- private func removeAlert(_ alertView: NSView) {
- // 淡出动画
- NSAnimationContext.runAnimationGroup({ context in
- context.duration = 0.3
- alertView.animator().alphaValue = 0
- }, completionHandler: {
- // 从视图和数组中移除
- alertView.removeFromSuperview()
- if let index = self.toastViews.firstIndex(of: alertView) {
- self.toastViews.remove(at: index)
- }
- // 重新布局其他 Toast
- self.rearrangeToasts()
- })
- }
- private func rearrangeToasts() {
- for (index, toastView) in toastViews.enumerated() {
- let newYOffset = CGFloat(-46 * index)
- if let constraint = toastView.constraints.first(where: { $0.firstAttribute == .centerY }) {
- constraint.constant = newYOffset
- }
- }
- }
- }
- extension KMBatchOperateCompressSettingViewController {
- @IBAction func cancelButtonAction(_ sender: Any) {
- guard let callBack = cancelAction else { return }
-
- callBack(self)
- }
-
- @IBAction func doneButtonAction(_ sender: Any) {
- guard let callBack = doneAction else { return }
-
- callBack(self)
- }
- }
|