我正在尝试使用当前的方法,我必须包含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
问题必须在上下文中,但我无法在互联网上的任何地方找到问题的解决方案。整个代码应该调用绘制箭头的方法。 谢谢你的帮助。
答案 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];