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 に答える