lookAtMe
大约 1 分钟
为什么要做这个?
有的时候上班不太忙,晚上到点打卡就下班 正好路过女朋友的单位,想一块吃个饭再回家 但是她可能在努力coding,没及时看消息,导致错过了 于是乎,就想弄一个直接在桌面弹出来的消息通知小工具
哈哈,被老妹盗了,拿去参加什么创意大赛了
1. 整体介绍
灵感,源自于Lyrics,一款Mac的桌面歌词显示插件。 这个真是让我一整个大震惊,居然能在Mac上显示悬浮的内容!
整体的交互就比较简单了:
- 客户端(Mac):Swift写的,支持桌面悬浮
- 服务端:Golang写的,Redis维护倒计时的逻辑
- 交互:如果有急时的话,把倒计时请求推到服务端,服务端再发给客户端。客户端先在Menu倒计时,如果在倒计时结束之后还没有操作的话,就会弹出桌面提醒。
2. 效果
悬浮在所有的window之上,切换window、dock也可以展示


3. 核心代码
实际上Mac的悬浮代码,核心就这么点。
class AppDelegate: NSObject, NSApplicationDelegate {
var floatingWindow: NSWindow!
func applicationDidFinishLaunching(_ notification: Notification) {
// 隐藏Dock
NSApp.setActivationPolicy(.accessory)
// 创建悬浮窗口
createFloatingWindow()
// 启动轮询服务
PollingService.shared.startPolling()
}
func createFloatingWindow() {
// 固定窗口尺寸
floatingWindow = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 120, height: 120),
styleMask: [.borderless, .fullSizeContentView],
backing: .buffered,
defer: false
)
let hostingController = NSHostingController(
rootView: FloatingButton()
.environmentObject(CountdownManager.shared) // 添加环境对象注入
)
floatingWindow.contentViewController = hostingController
configureWindow()
}
private func configureWindow() {
floatingWindow.isOpaque = false
floatingWindow.backgroundColor = .clear
floatingWindow.level = .floating
floatingWindow.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
// 设置固定位置
if let screen = NSScreen.main {
floatingWindow.setFrameOrigin(NSPoint(
x: -10,
y: screen.visibleFrame.maxY - 700
))
}
// 显示在最前面
floatingWindow.orderFrontRegardless()
}
}