【问题标题】:How to do corners right with Cocoa Touch (iOS) Graphics Context Drawing?如何使用 Cocoa Touch (iOS) Graphics Context Drawing 做角?
【发布时间】:2019-10-18 01:21:16
【问题描述】:

我只是在尝试,习惯于在 iOS 上使用 Quartz 2D 进行绘图。我使用 Graphics Context move(to:) 和 addLine(_:CGPoint) 函数绘制了三个偏移正方形(仅限周界线)。考虑下图的结果:

我只显示顶部,但足以记录我的问题。您可以看到每个正方形的左上角是不完整的(锐角),而右上角看起来还不错。两个底角和右上角一样,完全符合我的预期。

所以,我添加这些线条的起始位置(宽度设置为 3.0)是使用图形上下文移动(到:CGPoiint)定位的左上角。只需调用 addLine(_:CGPoint) 方法即可到达每个后续角点。

那么,我做错了什么导致如图所示的“破碎”角落。如何让左上角看起来像所有其他的?

代码生成图

override func draw(_ rect: CGRect) {
    let colors: [(CGFloat,CGFloat,CGFloat)] = 
          [(1.0,0.0,0.0),(0.25,1.0,0.5),(0.5,0.5,1.0)]
    let c = UIGraphicsGetCurrentContext()!
    c.setLineWidth(3.0)
    var dx = 0
    var dy = 0
    for q in 1...3 {
        c.move(to:CGPoint(x:dx+50, y:dy+50))
        c.addLine(to:CGPoint(x: dx+200, y: dy+50))
        c.addLine(to:CGPoint(x: dx+200, y: dy+200))
        c.addLine(to:CGPoint(x: dx+50,y: dy+200))
        c.addLine(to:CGPoint(x: dx+50,y: dy+50))
        c.setStrokeColor(
             red:colors[q-1].0
            ,green:colors[q-1].1
            ,blue:colors[q-1].2,alpha:1.0)
        c.strokePath()
        dx += 20
        dy += 20
    }
}

【问题讨论】:

    标签: ios swift cocoa-touch core-graphics


    【解决方案1】:

    伪影是由较粗的线宽引起的。您给出的所有尺寸都是针对每条线的中心的。由于您给出的线宽为 3,因此每条线在中心线的每一侧填充 1.5 个点。

    您可以在第一个和最后一个坐标中考虑这一点,但这很容易出错并且取决于线宽。

    更好的解决方案是使用closePath(),而不是添加最后一行。

    c.move(to:CGPoint(x:dx+50, y:dy+50))
    c.addLine(to:CGPoint(x: dx+200, y: dy+50))
    c.addLine(to:CGPoint(x: dx+200, y: dy+200))
    c.addLine(to:CGPoint(x: dx+50,y: dy+200))
    //c.addLine(to:CGPoint(x: dx+50,y: dy+50)) // not needed any more
    c.closePath()
    

    closePath() 将从路径的最后一点到第一点画一条直线。这还涉及在第一个点的位置正确填充连接处的那个小工件。

    最简单的解决方案是使用UIBezierPath 来绘制矩形,但手动绘制是一种很好的学习方式。

    【讨论】:

    • 谢谢——正是我希望得到的那种答案:简单、明显(一旦你知道了),而不是杂乱无章。我实际上打算接下来玩 Bezier Paths。
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2010-10-03
    相关资源
    最近更新 更多