如何使用 NSRect 或 NSView 绘制 NSImage

How to draw NSImage using NSRect or NSView

我只是 Appkit 和 macOS 编程的新手,我想在应用程序运行时更改 StatusBar 图标。 (是的,我正在制作菜单栏应用)

问题是我可以制作超过 3600 张图像... 不可能!那是不可能的...

所以,我想做的就是让计算机生成每张图片并每秒更改应用程序的 StatusBar 图标。

一开始需要用到NSImage,所以把状态栏图标改一下。

以下代码为初始代码。

statusBar = NSStatusBar.init()
    statusItem = statusBar.statusItem(withLength: 70.0)
    statusBarButton = statusItem.button!

    statusBarButton.image = NSImage(named: NSImage.Name("AppIcon"))
    statusBarButton.image?.size = NSSize(width: 18.0, height: 18.0)
    statusBarButton.imagePosition = .imageRight
    statusBarButton.title = "Menu Bar App"

好的,NSImage(named: NSImage.Name("AppIcon"))是我之前准备的初始应用程序图标图像,然后我可以将其转换为NSImage

我搜索了很多关于我可以绘制图像的东西,但似乎没有什么合适或合适的:(

所以这就是为什么我要 post 这个问题。

有什么方法可以秒生成图吗?

请帮帮我

  • 使用 NSImage 属性 创建自定义 NSView 并实施 drawRect,简单示例

    class MyView: NSView {
    
        var image : NSImage? {
            didSet {
               needsDisplay = true
            }
        }
    
        init(frame frameRect: NSRect, image : NSImage?) {
            self.image = image
            super.init(frame: frameRect)
        }
    
        required init?(coder: NSCoder) {
            super.init(coder: coder)
        }
    
        override func draw(_ dirtyRect: NSRect) {
            image?.draw(at: .zero, from: bounds, operation: .sourceOver, fraction: 1.0)
        }
    }
    
  • MyView 的实例添加到 statusBarButton 的子视图。

  • 当图像分配给视图的 image 属性 时,它将被绘制。
  • 要定期更改图像,请使用 Timer