Я использую Swift 3/Xcode 8 на macOS.Добавление текста в CGContext с помощью Swift
Я переопределять 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