如何为水平线定义startPoint endPoint

时间:2012-08-13 20:09:45

标签: ios

我想在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

1 个答案:

答案 0 :(得分:1)

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

来自UIGraphicsGetCurrentContext()的{​​{3}}:

  

默认情况下,当前图形上下文为零。在致电之前   drawRect:方法,视图对象将有效的上下文推送到堆栈上,   使它成为现实。如果你没有使用UIView对象来做你的   但是,必须将有效的上下文推送到堆栈中   手动使用UIGraphicsPushContext函数。

     

您应该从应用程序的主线程中调用此函数   仅