Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift将文本添加到CGContext_Swift_Macos_Core Graphics_Cgcontext - Fatal编程技术网

使用Swift将文本添加到CGContext

使用Swift将文本添加到CGContext,swift,macos,core-graphics,cgcontext,Swift,Macos,Core Graphics,Cgcontext,我在macOS上使用Swift 3/Xcode 8 我在NSView中覆盖绘制,并且使用当前上下文,我能够绘制简单的形状(请参见代码): 类示例:NSImageView{ override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) let context = NSGraphicsContext.current()?.cgContext; let length = CGPoint(x: 100, y: 10

我在macOS上使用Swift 3/Xcode 8

我在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。


我还想画一些文本(比如线下)。我做了很多搜索,但没有找到任何有效的方法。CGContext似乎有与绘制文本相关的方法,但似乎没有任何方法能够真正绘制文本。更清楚的是,我没有找到任何可以编译的方法,更不用说运行了

注意:我是macOS开发新手(虽然做了一些iOS),所以我可能遗漏了一些非常明显的东西

问题在于属性中的颜色分配。
使用现在可用的代码进行编辑。

将文本绘制到当前图形上下文的简单方法是使用NSString

例如:

class MyView : NSView {
    override func draw(_ dirtyRect: NSRect) {
        let atts = [NSFontAttributeName:NSFont.init(name: "Georgia", size: 30)]
        ("Hello world" as NSString).draw(
             at: NSMakePoint(100,100), 
             withAttributes: atts)
    }
}
结果:


将文本绘制到当前图形上下文的简单方法是使用NSString

例如:

class MyView : NSView {
    override func draw(_ dirtyRect: NSRect) {
        let atts = [NSFontAttributeName:NSFont.init(name: "Georgia", size: 30)]
        ("Hello world" as NSString).draw(
             at: NSMakePoint(100,100), 
             withAttributes: atts)
    }
}
结果:



“我没有发现任何可以编译的东西”-如果您在编译某些东西时遇到问题,请显示代码。我们无法帮助您处理不可用的代码。(此外,“似乎没有人实际绘制它”似乎暗示您确实成功运行了代码,但在屏幕上什么也看不到。)同时检查一下这些方法:如果没有
笔划
/
填充
调用,您当前的绘图代码真的可以工作吗?没有一个能够绘制它意味着有像“setTextPosition”这样的方法建议连接,但没有实际绘制。显示的代码缺少笔划。对不起。“我没有找到可以编译的。”-如果您在编译时遇到问题,请显示代码。我们无法帮助您处理不可用的代码。(此外,“似乎没有人实际绘制代码”似乎暗示您确实成功运行了代码,但在屏幕上看不到任何内容。)同时检查一下这些方法:如果没有
笔划
/
填充
调用,您当前的绘图代码真的可以工作吗?没有人能够绘制它意味着存在类似“setTextPosition”的方法这表明存在连接,但没有实际绘制。显示的代码缺少笔划。抱歉。我确实尝试过,正如我所记得的,但坦白说,我不记得它如何对我不起作用。可能无法使它与cgContext一起工作。因此,我将再试一次,然后返回给您。好的,我再试了一次。它失败了“将无法识别的选择器发送到实例"我怀疑这个错误与未引用上下文有关。不过,谢谢你的建议。我真的不知道你说的所有这些是什么意思。它当然有效。我编辑了我的答案,以便在运行的应用程序中显示一些示例代码和可见的图形。是的,它确实有效,即使现在对我来说也是如此。我的问题是在分配文本颜色为CGColor.white。当我将其替换为:我如何声明这是我想要的答案?我记得曾经尝试过,但坦率地说,我不记得它如何对我不起作用。也许无法使它与CGColor.white一起工作。因此,我将再次尝试并返回给您。好的,我再次尝试了。它失败了“将无法识别的选择器发送到实例"我怀疑这个错误与未引用上下文有关。不过,谢谢你的建议。我真的不知道你说的所有这些是什么意思。它当然有效。我编辑了我的答案,以便在运行的应用程序中显示一些示例代码和可见的图形。是的,它确实有效,即使现在对我来说也是如此。我的问题是在分配文本颜色为CGColor.white。当我将其替换为:如何声明这是我想要的答案?