0

我想在 loc 550 处绘制一条带有渐变的水平线。

CGFloat colors[6] = { 
    138.0f / 255.0f, 1.0f,
    162.0f / 255.0f, 1.0f,
    206.0f / 255.0f, 1.0f};
CGFloat locations[3] = { 0.05f, 0.45f, 0.95f };
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, 3);
CGColorSpaceRelease(colorSpace);

CGPoint startPoint = CGPointMake(0, 0);
CGPoint endPoint   = CGPointMake(0, 550);

 CGContextRef context = UIGraphicsGetCurrentContext(); 
 CGContextSaveGState(context);
 CGContextAddRect(context, CGRectMake(0, 550, self.view.bounds.size.width, 1));
 CGContextClip(context);

CGContextDrawLinearGradient (context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);           

这段代码中没有画线,Xcode 给了我这个错误:

            CGContextAddRect: invalid context 0x0
4

1 回答 1

1

您需要将此代码放在对象的drawRect:方法中UIView以确保context存在电流。否则你需要使用UIGraphicsPushContext来获取当前的context.

文档UIGraphicsGetCurrentContext()

当前图形上下文默认为 nil。在调用它的 drawRect: 方法之前,视图对象将一个有效的上下文压入堆栈,使其成为当前的。但是,如果您不使用 UIView 对象进行绘图,则必须使用 UIGraphicsPushContext 函数手动将有效上下文推送到堆栈上。

您应该只从应用程序的主线程调用此函数。

于 2012-08-13T20:38:30.857 回答