使用CGContextRef设置上下文

时间:2013-01-21 20:45:35

标签: ios

  

可能重复:
  Drawing shape iOS
  CGContextRef, CGPoint, and CGSize

我正在尝试使用当前的方法,我必须包含CGContextRef,CGPoint和CGSize:

CGPoint p1 = {10, 10};

CGSize size;

CGContextRef context = UIGraphicsGetCurrentContext();

[self drawArrowWithContext:context atPoint:p1 withSize:size lineWidth:400 arrowHeight:400];

当我运行应用程序时,我收到此错误:

Jan 21 21:41:56 Alexs-ipad Splash-it [1497]:CGContextDrawPath:无效的上下文0x0

问题必须在上下文中,但我无法在互联网上的任何地方找到问题的解决方案。整个代码应该调用绘制箭头的方法。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

为了返回有效的上下文,您必须位于适当的区域。

这基本上意味着此代码必须位于drawRect:中,或者您需要使用UIGraphicsBeginImageContext

创建图像上下文

更新:DrawRect:

drawRect:是为每个UIView调用的一种特殊方法,它为您提供了一个使用Core Graphics进行自定义绘图的访问点。最常见的用途是在您的案例中创建一个自定义UIView对象ArrowView。然后,您将使用您的代码覆盖drawRect:

- (void)drawRect:(CGRect)rect
{
    CGPoint p1 = {10, 10};

    CGSize size;

    CGContextRef context = UIGraphicsGetCurrentContext();

    [self drawArrowWithContext:context atPoint:p1 withSize:size lineWidth:400 arrowHeight:400];
}

更新:图片上下文

利用自定义Core Graphics绘图的第二种方法是创建imageContext然后收集其结果。

因此,您首先要创建一个图像上下文,运行您的绘图代码,然后将其转换为您可以添加到现有视图的UIImage。

UIGraphicsBeginImageContext(CGSizeMake(400.0, 400.0));

CGPoint p1 = {10, 10};

CGSize size;

CGContextRef context = UIGraphicsGetCurrentContext();

[self drawArrowWithContext:context atPoint:p1 withSize:size lineWidth:400 arrowHeight:400];

// converts your context into a UIImage
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

// Adds that image into an imageView and sticks it on the screen.
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.view addSubview:imageView];