我正在尝试在图像上实现徒手画,但我不想将结果保存为图像。我已经改编了代码from this article,但我没有看到任何绘图(虽然我知道正在调用drawRect方法)。我已经验证我正在迭代for循环中的有效CGPoints。因此,一切似乎都符合要求,但实际上没有任何东西被绘制出来。
我错过了什么吗?
另外,请注意,我已经剥离了形状绘图部分,但这是有效的(绘制椭圆,矩形和线条)。
以下是代码:
- (void)drawRect:(CGRect)rect
{
if( self.shapeType == DrawShapeTypeCustom )
{
if( !self.myDrawings )
{
self.myDrawings = [[NSMutableArray alloc] initWithCapacity:0];
}
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
[[UIColor redColor] getRed:&red green:&green blue:&blue alpha:&alpha];
CGContextSetRGBFillColor( ctx , red , green , blue , 0.0 );
CGContextSetRGBStrokeColor( ctx , red , green , blue , 0.9 );
CGContextSetLineWidth( ctx , (CGFloat) 5 );
if( [self.myDrawings count] > 0 )
{
CGContextSetLineWidth(ctx , 5);
for( int i = 0 ; i < [self.myDrawings count] ; i++ )
{
NSArray * array = [self.myDrawings objectAtIndex:i];
if( [array count] > 2 )
{
CGFloat x = [[array objectAtIndex:0] floatValue];
CGFloat y = [[array objectAtIndex:1] floatValue];
CGContextBeginPath( ctx );
CGContextMoveToPoint( ctx , x, y);
for( int j = 2 ; j < [array count] ; j+= 2 )
{
x = [[array objectAtIndex:0] floatValue];
y = [[array objectAtIndex:1] floatValue];
CGContextAddLineToPoint( ctx , x , y );
}
}
CGContextStrokePath( ctx );
}
}
}
else
{
// Draw shapes...
}
}
答案 0 :(得分:1)
for( int j = 2 ; j < [array count] ; j+= 2 )
{
x = [[array objectAtIndex:0] floatValue];
y = [[array objectAtIndex:1] floatValue];
CGContextAddLineToPoint( ctx , x , y );
}
看起来你一遍又一遍地向同一点画画。我猜你应该实际使用你循环的j的值。
for( int j = 2 ; j < [array count] ; j+= 2 )
{
x = [[array objectAtIndex:j + 0] floatValue];
y = [[array objectAtIndex:j + 1] floatValue];
CGContextAddLineToPoint( ctx , x , y );
}