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

最佳答案

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

UIGraphicsGetCurrentContext()documentation中:


  默认情况下,当前图形上下文为nil。在调用它之前
  drawRect:方法,视图对象将有效上下文推入堆栈,
  使其流行。如果您不使用UIView对象来做
  绘图,但是,您必须将有效上下文压入堆栈
  手动使用UIGraphicsPushContext函数。
  
  您应该从应用程序的主线程调用此函数
  只要。

关于ios - 如何为水平线定义起点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11941532/

10-11 14:27