我正在尝试使用Core图形绘制一个Square的每个像素点。通过使笔触颜色为黑色,我正在绘制Square。请告诉我如何获得此正方形的所有像素点画了。
- (void)drawRect:(CGRect)rect
{
CGMutablePathRef path = CGPathCreateMutable();
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGPathMoveToPoint(path, NULL, 30.0f, 30.0f);
CGPathAddLineToPoint(path, NULL, 130.0f, 30.0f);
CGPathAddLineToPoint(path, NULL, 130.0f, 130.0f);
CGPathAddLineToPoint(path, NULL, 30.0f, 130.0f);
CGPathCloseSubpath(path);
CGPathRetain(path);
CGContextSetFillColorWithColor(ctx, [UIColor clearColor].CGColor);
CGContextSetStrokeColorWithColor(ctx,[UIColor blackColor].CGColor);
CGContextSetLineWidth(ctx, 2.0);
CGContextSaveGState(ctx);
CGContextAddPath(ctx, path);
CGContextRestoreGState(ctx);
CGContextStrokePath(ctx);
CGContextRestoreGState(ctx);
CGContextRestoreGState(ctx);
[self setNeedsDisplay];
CGPathRelease(path);
}
答案 0 :(得分:5)
为什么要完成所有这些工作而不是仅仅使用CGContextFillRect()
和CGContextStrokeRect()
?
您的上述代码可以简化为:
CGRect r = CGRectMake(30.0, 30.0, 100.0, 100.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, CGColorGetConstantColor(kCGColorClear));
CGContextFillRect(ctx, r);
CGContextSetLineWidth(ctx, 2.0);
CGContextSetStrokeColorWithColor(ctx, CGColorGetConstantColor(kCGColorBlack));
CGContextStrokeRect(ctx, r);
此外, 从不 在-setNeedsDisplay
方法中发送-drawRect:
。你会得到一个无限循环。
答案 1 :(得分:1)
我需要为我的iPhone应用程序做类似的事情,虽然我发现它有点晚了,但我决定回应。
首先,初始化一个可变数组(点)。
接下来,找到CGRect的最小X和Y坐标。 最大限度地做同样的事情。
找出最小值和最大值之间的差异。
现在,创建一个类似下面的for循环:
for(int x = minX; x<diffX+minX; x++){
for(int y = minY; y<diffY+minY; y++){
[points addObject:[NSValue valueWithCGPoint:CGPointMake(x,y)]];
}
}
您现在可以通过点阵列访问您的积分。