diff --git a/FlipClockSaver/FlipClockSaver.swift b/FlipClockSaver/FlipClockSaver.swift index 5b3cddd..bdc5581 100644 --- a/FlipClockSaver/FlipClockSaver.swift +++ b/FlipClockSaver/FlipClockSaver.swift @@ -336,7 +336,7 @@ final class FlipClockSaverView: ScreenSaverView { ctx.saveGState() ctx.setFillColor(textColor.cgColor) let cx = rect.midX - let r = min(rect.width, rect.height) * 0.06 + let r = min(rect.width, rect.height) * 0.12 for cy in [rect.minY + rect.height * 0.62, rect.minY + rect.height * 0.38] { ctx.fillEllipse(in: CGRect(x: cx - r, y: cy - r, width: r * 2, height: r * 2)) } @@ -410,15 +410,13 @@ final class FlipClockSaverView: ScreenSaverView { // MARK: 设置面板 override var hasConfigureSheet: Bool { true } - // 持久保留所有 controller:NSControl.target 是弱引用, - // controller 一旦释放,已显示窗口里的滑杆/按钮就会失去响应 - private var configControllers: [FlipClockConfigController] = [] + // 复用同一个 controller/window:每次点“选项”框架都会重新调用 configureSheet, + // 返回同一个已存在的 window 即可反复弹出。若每次都新建,框架缓存的仍是首个窗口, + // 关掉后再次点击会复用那个已 endSheet 隐藏的旧窗口而无反应(只能重启“系统设置”才能再开)。 + private lazy var configController: FlipClockConfigController = FlipClockConfigController() override var configureSheet: NSWindow? { - // 每次打开都新建窗口:避免窗口被关闭后无法再次弹出 - let controller = FlipClockConfigController() - controller.reloadValues() - configControllers.append(controller) - return controller.window + configController.reloadValues() + return configController.window } @objc private func handleSettingsChanged(_ note: Notification) {