我正在尝试在 Swift 中向
NSView
添加一个矩形来为图像创建一个框架。边框需要是红色的并且稍微覆盖图像的边缘。
这是我到目前为止的代码:
let artworkView : NSImageView = NSImageView(frame: artworkRectangle)
artworkView.image = artwork
artworkView.rotate(byDegrees: 270)
myView.addSubview(artworkView)
let borderWidth : CGFloat = 3
let offset : CGFloat = borderWidth / 2
let artworkBorderRect : NSRect = NSRect(x: artworkRectangle.minX - offset, y: artworkRectangle.minY - offset, width: artworkRectangle.width + borderWidth, height: artworkRectangle.height + borderWidth)
let artworkBorderField = NSTextField(frame: artworkBorderRect)
artworkBorderField.drawsBackground = false
artworkBorderField.isBordered = true
artworkBorderField.textColor = NSColor.red
myView.addSubview(artworkBorderField)
我正在使用
NSTextField
,因为这很容易添加到 NSView
,但我不知道如何将 NSRect
添加到视图。然而,结果是宽度不足的不透明边框。关于如何向此边框添加描边颜色和宽度有什么建议吗?
向视图添加边框的最简单方法是使用 Core Animation。
在 MacOS 上,将自定义视图上的
wantsLayer
设置为 true。
然后您可以将
view.layer.boderwidth
设置为非零值。您还可以设置视图图层的 borderColor
、cornerRadius
以及视图背景的各种其他属性 CALayer
(有关更多信息,请参阅 CALayer 上的文档。)
我使用 Storybards 创建了一个简单的演示应用程序,将通用 NSView 添加到视图控制器的场景中,并为其提供了一个 IBOutlet“customView”。我还在视图中添加了一个标签,只是为了它。
然后我在视图控制器的viewDidLoad中添加了这段代码:
override func viewDidLoad() {
super.viewDidLoad()
customView.wantsLayer = true // You need this line.
guard let layer = customView.layer else { return }
layer.borderWidth = 2
layer.borderColor = NSColor.blue.cgColor
layer.cornerRadius = 10
这会产生一个如下所示的窗口:
如果您想要 NSImage 上的框架,您可以直接对
NSImage
执行我上面概述的所有操作,无论您是在 Storyboard 还是在代码中创建 NSImage
。