Swift - 创建圆并添加到数组

时间:2014-08-11 20:38:41

标签: arrays swift geometry

我一直在寻找如何在Swift中创建一个圆圈,但它似乎相当复杂。我想在运行时创建一个圆,具有指定的x和y,以及宽度和高度。然后我想将这个圆圈添加到一个数组中,我可以在其中创建更多圆圈并添加到其中。

我该怎么做?

编辑:这是我到目前为止所尝试的:

var center : CGPoint = touchLocation

var myContext : CGContextRef = UIGraphicsGetCurrentContext()

let color : [CGFloat] = [0, 0, 1, 0.5]
CGContextSetStrokeColor (myContext, color);
CGContextStrokeEllipseInRect (myContext, CGRectMake(touchLocation.x, touchLocation.y, 20, 20));

touchLocation是用户手指的位置。这行在此行执行时崩溃:

var myContext : CGContextRef = UIGraphicsGetCurrentContext()

错误显示“在解开可选值时意外发现nil

另外,这不允许我将圆圈添加到数组中,因为我不知道它是什么变量类型。

2 个答案:

答案 0 :(得分:1)

绘制圆圈的方法有很多种,这是我一直在讨厌的片段:

func circleWithCenter(c:CGPoint, radius r:CGFloat,
    strokeColor sc: UIColor = UIColor.blackColor(),
    fillColor fc: UIColor = UIColor.clearColor()) -> CAShapeLayer {

        var circle = CAShapeLayer()
        circle.frame = CGRect(center:c, size:CGSize(width:2*r, height:2*r))
        circle.path = UIBezierPath(ovalInRect:circle.bounds).CGPath
        circle.fillColor = fc.CGColor
        circle.strokeColor = sc.CGColor
        circle.fillColor = fc == UIColor.clearColor() ? nil : fc.CGColor
        return circle
}

请注意,我扩展了CGRect(使用Swift特定功能)来添加一个占据中心的初始化程序,但这对您的问题并不重要。

答案 1 :(得分:0)

您的代码不是“创建”一个圆形作为对象,它试图在图形上下文中绘制一个圆形。您需要做的是创建一个bezier路径对象,绘制到该对象并保存数组中的路径。类似的东西:

    var circleArray = [CGMutablePathRef]()
    // ...
    let path: CGMutablePathRef = CGPathCreateMutable()
    CGPathAddArc(path, nil, touchLocation.x, touchLocation.y, radius, 0, M_PI * 2, true)
    circleArray  += [path]

然后你需要描绘绘图程序中的路径。