【问题标题】:How to draw NSImage using NSRect or NSView如何使用 NSRect 或 NSView 绘制 NSImage
【发布时间】:2019-12-26 08:23:32
【问题描述】:

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

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

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

首先需要 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

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

这就是我试图发布这个问题的原因。

有没有办法按秒生成图像?

请帮帮我

【问题讨论】:

    标签: swift xcode macos appkit


    【解决方案1】:
    • 使用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

    【讨论】:

    • 哦...!那么,我怎样才能画出一些东西......?我希望使用 NSBezierPath 因为很容易绘制一些东西。 (还是谢谢)
    • 你的问题是如何绘制 NSImage... 但你可以在drawRect 中绘制任何东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2011-03-20
    相关资源
    最近更新 更多