返回

无需起身:NSView 简易健康提醒应用程序

IOS

NSView 实践:健康提醒应用程序

作为信息技术行业的先锋,我们深知久坐的危害。在掌握了 NSView 的基本功能后,让我们踏上一个简易应用程序的开发之旅,定时提醒我们从办公桌旁起身,舒展筋骨。这款应用程序将弹出提醒,禁止执行其他操作,直到用户手动关闭它,让你专注于健康。

准备工作

如欲踏上此次开发之旅,请参考《开发环境与基础工程创建》一节,创建一个包含情节提要的工程。

打造提醒视图

我们的应用程序核心是一个 NSView 子类,名为 ReminderView。它负责创建提醒的视觉界面:

class ReminderView: NSView {
    // 初始化视图
    init() {
        super.init(frame: NSRect(x: 0, y: 0, width: 300, height: 200))

        // 设置背景色
        self.wantsLayer = true
        self.layer?.backgroundColor = NSColor.red.cgColor

        // 添加标题文本
        let title = NSTextField(labelWithString: "起身活动一下!")
        title.frame = NSRect(x: 20, y: 100, width: 260, height: 30)
        self.addSubview(title)

        // 添加关闭按钮
        let closeButton = NSButton(frame: NSRect(x: 260, y: 20, width: 20, height: 20))
        closeButton.title = "X"
        closeButton.bezelStyle = .rounded
        closeButton.target = self
        closeButton.action = #selector(close)
        self.addSubview(closeButton)
    }

    // 关闭提醒
    @objc func close() {
        self.window?.close()
    }
}

管理提醒

为了管理提醒,我们引入了一个 ReminderManager 类。它负责启动计时器,在指定时间间隔后弹出 ReminderView:

class ReminderManager {
    // 定时器
    private var timer: Timer?

    // 初始化管理器
    init() {
        self.timer = Timer.scheduledTimer(withTimeInterval: 600, repeats: true) { [weak self] _ in
            // 创建提醒视图
            let reminderView = ReminderView()

            // 创建窗口
            let window = NSWindow(contentRect: reminderView.frame, styleMask: .borderless, backing: .buffered, defer: false)
            window.contentView = reminderView

            // 显示窗口
            window.makeKeyAndOrderFront(nil)
            NSApp.activateIgnoringOtherApps(true)
        }
    }

    // 停止提醒
    func stop() {
        self.timer?.invalidate()
    }
}

AppDelegate 中的整合

为了将这一切整合在一起,我们在 AppDelegate 中添加了对 ReminderManager 的引用:

class AppDelegate: NSObject, NSApplicationDelegate {
    private let reminderManager = ReminderManager()

    // 启动应用程序
    func applicationDidFinishLaunching(_ aNotification: Notification) {
        reminderManager.start()
    }

    // 退出应用程序
    func applicationWillTerminate(_ aNotification: Notification) {
        reminderManager.stop()
    }
}

享受健康提醒

现在,你可以构建并运行应用程序,体验每隔 10 分钟(或自定义间隔)弹出的提醒。当提醒出现时,你必须手动关闭它,才能继续你的工作。这将帮助你养成定期起身活动的习惯,保持身体健康和精神敏锐。

结论

通过利用 NSView 的强大功能,我们成功开发了一个简易的应用程序,在需要活动时提醒我们。它消除了久坐的不良影响,让我们保持健康、专注和高效。随着你对 macOS 开发的深入探索,你将发现更多的可能性,创造出更复杂且有影响力的应用程序。