如何使用 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
。
我只是 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
。