实现和 CurrencyX 一样的 Window

2,301 阅读1分钟

关键字:Cocoa、Mac app、NSWindow

CurrencyX window 的特点:

  • 无 title bar
  • full size content
  • 只有纵向可以拉伸
  • 毛玻璃效果

无 title bar

期望效果

Storyboard 里可以设置 window 的 appearance,其中有一个选项是 Title Bar,如果你反选了 Title Bar,效果是下面这样的。

可以看到,右侧的 window 没有了默认的圆角,左上角的 traffic lights 也不见了,这个时候窗口也无法拖动,所以不是我们想要的效果

NoTitleBarWindowController

我们继承 NSWindowController 就能轻松搞定。

import Cocoa  
class NoTitleBarWindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        if let window = self.window {
            window.titleVisibility = .Hidden
            window.titlebarAppearsTransparent = true
        }
    }
}

在 storyboard 中把 window controller 的 class 改为 NoTitleBarWindowController 就好。里面做了两件小事:

  • 隐藏 title
  • 把 title bar 设成透明的

Full Size Content

full size content 很简单,只要在 storyboard 勾选 Full Size Content View 就好了,勾选前后效果如下图。

只有纵向可以拉伸

CurrencyX 是限制窗口宽度,但是允许用户拉伸高度,这样可以看到更多的汇率,我们通过限制 window 的 maxmin content size 的 width 一样来实现。这样只有鼠标放在 window 上下边缘才会出现调整 size 的标志。

在 storyboard 里设置 window 的三个 content size

Content Size  
    Width: 370 Height: 500
Max Content Size  
    Width: 370 Height: 9999
Min Content Size  
    Width: 370 Height: 200

毛玻璃效果

毛玻璃效果和 iOS 上类似,拖一个 NSVisualEffectView 到 Window Controller 包含的 View Controller 的 View 里就好,不多赘述。

最终效果

和 CurrencyX 对比

完整代码

SeedLabIO/CurrencyXLikeWindow · GitHub

广告

CurrencyX 是我们开发的 Mac 上小而美的汇率 app,售价¥6,如果你觉得文章有用,可以买一个支持我们,前往 App Store