首先我绘制图形:
-(void)drawRect: (CGRect)rect{
//Circle
circle = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(circle, [UIColor darkGrayColor].CGColor);
CGContextFillRect(circle,CGRectMake(10,10, 50, 50));
//rectangle
rectangle = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(rectangle, [UIColor darkGrayColor].CGColor);
CGContextFillRect(rectangle, CGRectMake(10, 10, 50, 50));
//square
square = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(square, [UIColor darkGrayColor].CGColor);
CGContextFillRect(square, CGRectMake(100, 100, 25, 25));
//triangle
triangle = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(triangle, [UIColor darkGrayColor].CGColor);
CGPoint points[6] = { CGPointMake(100, 200), CGPointMake(150, 250),
CGPointMake(150, 250), CGPointMake(50, 250),
CGPointMake(50, 250), CGPointMake(100, 200) };
CGContextStrokeLineSegments(triangle, points, 6);
}
现在我想把图形放到一个数组中:
-(void)viewDidLoad {
grafics = [[NSMutableArray alloc]initWithObjects: circle,rectangle,square,triangle];
[self.navigationItem.title = @"Shape"];
[super viewDidLoad];
}
问题是,我必须进行转换,从而使对象适合此数组。另一个问题是UITableViewController没有将数组加载到行中。 tableview没有任何问题,但处理CGContext失败了。我做错了什么?
答案 0 :(得分:4)
drawRect:
是UIView
上用于绘制视图本身的方法,而不是预先创建图形对象。
由于您似乎想要创建形状来存储它们并稍后绘制,因此将形状创建为UIImage
并使用UIImageView
绘制它们似乎是合理的。 UIImage
可以直接存储在NSArray
。
要创建图像,请执行以下操作(在主队列中;而不是在drawRect:中):
1)创建位图上下文
UIGraphicsBeginImageContextWithOptions(size, opaque, scale);
2)获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
3)画出你需要的东西
4)将上下文导出为图像
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
5)破坏上下文
UIGraphicsEndImageContext();
6)存储对图像的引用
[yourArray addObject:image];
对要创建的每个形状重复。
有关详细信息,请参阅documentation以了解上述功能。为了更好地理解绘制drawRect:
和程序中任意位置之间的差异以及一般情况下的上下文,我建议您阅读Quartz2D Programming Guide,尤其是关于图形上下文的部分。
答案 1 :(得分:2)
首先,UIGraphicsGetCurrentContext
返回CGContextRef
,它不是一个对象,不能直接存储在一个集合中(编辑:这不是真的,请参阅注释) 。从技术上讲,您可以将上下文包装在NSValue
中或将其转换为UIImage
:
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *img = [UIImage imageWithCGImage:imageRef];
生成的UIImage
是一个对象,可以很好地存储在集合中。 但代码示例在大局中没有意义。 -drawRect:
方法用于绘制组件,而不是创建一些稍后要使用的图形。 -viewDidLoad
是UIViewController
方法,而不是UIView
方法。你可以编辑问题并描述你想要做什么吗?