如何在 Cocoa 中添加要查看的矩形来为图像加边框

问题描述 投票:0回答:1

我正在尝试在 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
添加到视图。然而,结果是宽度不足的不透明边框。关于如何向此边框添加描边颜色和宽度有什么建议吗?

swift macos cocoa
1个回答
0
投票

向视图添加边框的最简单方法是使用 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

© www.soinside.com 2019 - 2024. All rights reserved.