我想在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
答案 0 :(得分:1)
您需要将此代码放在drawRect:
对象的UIView
方法中,以确保当前context
存在。否则,您需要使用UIGraphicsPushContext
来获取当前context
。
来自UIGraphicsGetCurrentContext()
的{{3}}:
默认情况下,当前图形上下文为零。在致电之前 drawRect:方法,视图对象将有效的上下文推送到堆栈上, 使它成为现实。如果你没有使用UIView对象来做你的 但是,必须将有效的上下文推送到堆栈中 手动使用UIGraphicsPushContext函数。
您应该从应用程序的主线程中调用此函数 仅