0

我正在尝试在图像上实现手绘,但我不想将结果保存为图像。我已经改编了这篇文章中的代码,但我没有看到任何绘图(尽管我知道正在调用 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...
    }
}
4

1 回答 1

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 );
}
于 2013-06-18T22:32:13.440 回答