我在macOS上使用Swift 3/Xcode 8。使用Swift将文本添加到CGContext
我重写draw
在的NSView和,使用当前上下文,我能够得出简单的形状(见代码):
类样品:NSImageView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let context = NSGraphicsContext.current()?.cgContext;
let length = CGPoint(x: 100, y: 100)
let p1 = CGPoint(x: 200, y: 200)
let shape = "square"
context!.beginPath()
context!.move(to: p1)
if shape == "line" {
let pointEnd = CGPoint(x: p1.x + length.x, y: p1.y + length.y)
context!.addLine(to: pointEnd)
} else if shape == "square" {
let p2 = CGPoint(x: p1.x + length.x, y: p1.y)
let p3 = CGPoint(x: p1.x + length.x, y: p1.y + length.y)
let p4 = CGPoint(x: p1.x, y: p1.y + length.y)
context!.addLine(to: p2)
context!.addLine(to: p3)
context!.addLine(to: p4)
context!.addLine(to: p1)
}
context!.setStrokeColor(red: 1, green: 1, blue: 1, alpha: 1.0)
context!.setFillColor(red: 0, green: 1, blue: 0, alpha: 1)
context!.setLineWidth(2.0)
context!.strokePath()
let textColor = NSColor(calibratedRed: 1, green: 1, blue: 1, alpha: 1.0)
let textColorB = NSColor(calibratedRed: 1, green: 1, blue: 1, alpha: 0.0)
let rect = CGRect(x: 200, y: 200, width: 30, height: 130)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
let attr = [NSParagraphStyleAttributeName: paragraphStyle, NSForegroundColorAttributeName: textColor, NSBackgroundColorAttributeName: textColorB, NSFontAttributeName:NSFont.init(name: "HelveticaNeue-Thin", size: 14)]
let q: NSString = "hello, world"
let center = CGPoint(x: 0, y: 0)
q.draw(at: center, withAttributes: attr)
}
上述被校正展示整个方法。
除了文本绘制以外,它的工作方式与预期相同。最后两行显示了我尝试过的两次抽奖。第一个是如下建议的,它崩溃了(请参阅该行注释中的消息)。第二个是关闭的,但它需要一个NSDrawingContext,而不是一个CGContext。
我也想绘制一些文字(比如在该行下面)。我做了很多搜索,并没有发现任何可行的东西。 CGContexts似乎有与绘制文本相关的方法,但似乎没有人真正绘制它。清楚的是,我没有发现任何可以编译的东西,更不用说运行了。
注意:我是macOS开发新手(尽管做了一些iOS)。所以我可能会错过一些非常明显的东西。
问题在于属性中的颜色分配。 用现在有效的代码进行编辑。
“我什么也没找到,将编制” - 请**显示代码**如果你有麻烦的东西进行编译。我们无法帮助您处理不可用的代码。 (此外,“似乎没有人真正绘制它”似乎意味着你已经设法运行代码,但在屏幕上看不到任何东西。) – jtbandes
请检查以下这些方法:https://developer.apple.com/library/ content/documentation/Cocoa/Conceptual/AttributedStrings/Tasks/DrawingAttrStrings.html – jtbandes
你现在的图形代码真的没有'stroke' /'fill'调用吗? – jtbandes