CGContext的奇怪错误

时间:2014-06-12 21:09:03

标签: ios swift cgcontext cgcontextref

我收到错误

fatal error: Can't unwrap Optional.None
(lldb)

使用此代码

    var context:CGContextRef = UIGraphicsGetCurrentContext()
    let radius:CGFloat = 5
    CGContextSetRGBStrokeColor(context, 1, 1, 1, 1)
    var tempRect:CGRect = CGRectMake(5, 5, 20, 20)
    let minX = tempRect.minX, midX = tempRect.midX, maxX = tempRect.maxX
    let minY = tempRect.minY, midY = tempRect.midY, maxY = tempRect.maxY
    CGContextMoveToPoint(context, minX, minY)
    CGContextAddArcToPoint(context, minX, minY, midX, midY, radius)
    CGContextAddArcToPoint(context, maxX, minY, maxX, midY, radius)
    CGContextAddArcToPoint(context, maxX, maxY, midX, maxY, radius)
    CGContextAddArcToPoint(context, minX, maxY, minX, midY, radius)
    CGContextClosePath(context)
    CGContextDrawPath(context, kCGPathFillStroke)

我不明白问题所在。我想要做的是在Swift中创建一个带圆角的矩形。为什么我会收到此错误并且有更简单的方法来执行此操作?

1 个答案:

答案 0 :(得分:0)

问题在于没有当前的背景。因此UIGraphicsGetCurrentContext()想要返回NULL(nil)。在继续之前,您应该在条件中测试context

此外,您应该将context键入CGContext!,因为这是UIGraphicsGetCurrentContext()返回的内容 - 上下文或nil,包含在Optional中,隐式展开。因此,当您获得上下文时,您将能够在不使用问号的情况下使用它。更好的是,根本不给它一个明确的类型; Swift比你UIGraphicsGetCurrentContext()返回的更好。