0

可能重复:
绘制形状 iOS
CGContextRef、CGPoint 和 CGSize

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

CGPoint p1 = {10, 10};

CGSize size;

CGContextRef context = UIGraphicsGetCurrentContext();

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

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

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

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

4

1 回答 1

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];
于 2013-01-21T20:48:14.660 回答