如何在 Cocoa 中添加一个矩形以查看以边框图像

How to add a rectangle to view in Cocoa to border an image

提问人:Hercule 提问时间:10/21/2023 最后编辑:HangarRashHercule 更新时间:10/21/2023 访问量:31

问:

我正在尝试在 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)

我正在使用 这很容易添加到视图中,并且我无法弄清楚如何将视图添加到视图中。但是,结果是边框不透明,宽度不足。关于如何向此边框添加描边颜色和宽度的任何建议?NSTextFieldNSViewNSRect

Swift macOS

评论

0赞 Willeke 10/21/2023
如果您不想使用该图层,请尝试 ,它有一个边框。NSBox

答:

0赞 Duncan C 10/21/2023 #1

向视图添加边框的最简单方法是使用核心动画。

在 MacOS 上,将自定义视图设置为 true。wantsLayer

然后,可以设置为非零值。您还可以设置视图图层的 、 和视图支持的各种其他属性(有关详细信息,请参阅有关 CALayer 的文档。view.layer.boderwidthborderColorcornerRadiusCALayer

我使用 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

这将产生一个如下所示的窗口:

enter image description here

如果你想要一个框架,你可以直接对 ,无论你是在 Storyboard 还是在代码中创建 ,都可以直接执行我上面概述的所有操作。NSImageViewNSImageView NSImageView

评论

0赞 Hercule 10/21/2023
添加了以下内容,但没有边框?artworkView.wantsLayer = true guard let layer = artworkView.layer else { return } layer.borderWidth = 3 layer.borderColor = NSColor.blue.cgColor labelPageView.addSubview(artworkView)
0赞 Duncan C 10/21/2023
这应该有效。尝试将映像视图放在容器 NSView 中,并将层代码应用于容器视图。