69 lines
1.9 KiB
Swift
69 lines
1.9 KiB
Swift
//
|
|
// WindowSizeManager.swift
|
|
// TeachMate
|
|
//
|
|
// Created by Hongli on 2025/3/13.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
#if os(macOS)
|
|
// 窗口尺寸管理器
|
|
struct WindowSizeManager {
|
|
enum WindowSizePreset {
|
|
case calendar // 教学历视图 - 竖长
|
|
case schedule // 课表视图 - 横长
|
|
|
|
var size: CGSize {
|
|
switch self {
|
|
case .calendar:
|
|
return CGSize(width: 500, height: 800) // 竖长窗口
|
|
case .schedule:
|
|
return CGSize(width: 1200, height: 680) // 横长窗口
|
|
}
|
|
}
|
|
}
|
|
|
|
// 调整窗口大小
|
|
static func resizeWindow(to preset: WindowSizePreset) {
|
|
guard let window = NSApplication.shared.windows.first else { return }
|
|
|
|
let newSize = preset.size
|
|
let currentFrame = window.frame
|
|
|
|
// 计算新的窗口位置,保持窗口中心点不变
|
|
let newOriginX = currentFrame.origin.x + (currentFrame.width - newSize.width) / 2
|
|
let newOriginY = currentFrame.origin.y + (currentFrame.height - newSize.height) / 2
|
|
|
|
let newFrame = NSRect(
|
|
x: newOriginX,
|
|
y: newOriginY,
|
|
width: newSize.width,
|
|
height: newSize.height
|
|
)
|
|
|
|
// 平滑动画调整窗口大小
|
|
window.animator().setFrame(newFrame, display: true, animate: true)
|
|
}
|
|
}
|
|
|
|
// 视图修饰符,用于调整窗口大小
|
|
struct WindowSizeModifier: ViewModifier {
|
|
let preset: WindowSizeManager.WindowSizePreset
|
|
|
|
func body(content: Content) -> some View {
|
|
content
|
|
.onAppear {
|
|
WindowSizeManager.resizeWindow(to: preset)
|
|
}
|
|
}
|
|
}
|
|
|
|
// 扩展View以便于使用
|
|
extension View {
|
|
func adjustWindowSize(to preset: WindowSizeManager.WindowSizePreset) -> some View {
|
|
modifier(WindowSizeModifier(preset: preset))
|
|
}
|
|
}
|
|
#endif
|