我一直在寻找如何在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
另外,这不允许我将圆圈添加到数组中,因为我不知道它是什么变量类型。
答案 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]
然后你需要描绘绘图程序中的路径。