iOS中的徒手绘图 - 需要使用积分

时间:2013-06-18 17:43:59

标签: ios drawing quartz-graphics cgcontext

我正在尝试在图像上实现徒手画,但我不想将结果保存为图像。我已经改编了代码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...
    }
}

1 个答案:

答案 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 );
}