为什么使用Core Graphics绘制直线我得到了#34;虚线"行呢?

时间:2016-01-09 11:50:22

标签: ios swift drawing core-graphics

我试图使用以下快速代码绘制一个图标,但我得到了#34;虚线"线。我刚刚使用了moveToPointaddLineToPoint函数。我在下图中也可以看到与其他绘图相同的图形故障。我使用Xcode 7.2并在iOS 9.2.1上运行代码。

@IBDesignable class DeleteButton: UIButton {

    override func drawRect(rect: CGRect) {

        UIColor.blackColor().setStroke()
        let lineWidth = CGFloat(1)

        // Draw empty circle
        let frame = CGRect(x: rect.origin.x + lineWidth, y: rect.origin.y + lineWidth, width: rect.width - (lineWidth * 2), height: rect.height - (lineWidth * 2))
        let path = UIBezierPath(ovalInRect: frame)
        path.lineWidth = lineWidth

        path.stroke()

        // Draw X
        let radius = (rect.width / 2) * 0.5
        let center = CGPoint(x: rect.width / 2, y: rect.height / 2)

        let π = CGFloat(M_PI)
        let centerWidth = radius * cos(π/4)
        let centerHeight = radius * sin(π/4)

        path.lineWidth = lineWidth

        path.moveToPoint(CGPoint(x: CGFloat(center.x + centerWidth), y: CGFloat(center.y + centerHeight)))
        path.addLineToPoint(CGPoint(x: CGFloat(center.x - centerWidth), y: CGFloat(center.y - centerHeight)))
        path.stroke()

        path.lineWidth = lineWidth

        path.moveToPoint(CGPoint(x: center.x - centerWidth, y: center.y + centerHeight))
        path.addLineToPoint(CGPoint(x: center.x + centerWidth, y: center.y - centerHeight))
        path.stroke()
    }
}

结果如下:

我为我糟糕的英语道歉。

2 个答案:

答案 0 :(得分:4)

我相信你会看到按钮的标题文字绘制在图像上的结果。使用Playground中的代码查看以下演示:

enter image description here

答案 1 :(得分:0)

我们需要知道代码运行的上下文。你不能只是开始画画。

在视图中绘制的常用方法是覆盖drawRect方法。当你这样做时,系统正确设置了图形上下文,其中一个遮罩将你的绘图剪辑到视图的边界,坐标系设置为视图的坐标等。

如果您的绘图代码不在视图的drawRect方法中,那么这就是您的问题。