4

ビューで色付けする次のコードがあります。

UITouch *touch = [touches anyObject];   
    CGPoint currentPoint = [touch locationInView:drawImage];

    UIGraphicsBeginImageContext(drawImage.frame.size);
    [drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), size);

      CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), r, g, b, a);

    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

私の問題は、ポイントではなく色を付けたいのですが、繰り返される特定の画像を(png画像として)使用したいということです。それは可能ですか?

4

2 に答える 2

8

単一の UIImage を読み込んで描画するのは簡単です:

UIImage *brushImage = [UIImage imageNamed:@"brush.png"];
[brushImage drawAtPoint:CGPointMake(currentPoint.x-brushImage.size.width/2, currentPoint.y-brushImage.size.height/2)];

これにより、連続した線ではなく、サイクルごとに 1 回だけ画像が描画されます。ブラシ画像の実線が必要な場合は、目的 C: ストロークに UIImage を使用する を参照してください。

これにより、このメソッドが呼び出されるたびに画像ファイルが読み込まれ、処理が遅くなる可能性があります。の結果[UIImage imageNamed:]はしばしばキャッシュされますが、上記のコードは、後で再利用するためにブラシを保存することで改善できます。

パフォーマンスについて言えば、これを古いデバイスでテストしてください。書かれているように、私の第 2 世代の iPod touch では動作しましたが、何らかの追加を行うと、第 2 世代および第 3 世代のデバイスでは動作が不安定になる可能性があります。@Armaan が推奨するApple のGLPaintの例では、高速描画のために OpenGL を使用していますが、さらに多くのコードが含まれています。

また、インタラクション ( touchesBegan:touchesMoved:touchesEnded:) をビューで行っているようで、そのコンテンツをdrawImage、おそらくに描画しUIImageViewます。ペインティング イメージを保存して、このビューのレイヤー コンテンツをそのイメージに設定することができます。これによりパフォーマンスが変わることはありませんが、コードはよりクリーンになります。を引き続き使用する場合は、ivar を使用drawImageする代わりに を介してアクセスしてください。property

于 2012-04-13T10:46:09.523 に答える
2

APPLE のサンプル コードから始めることができます:サンプル コード:GLPaint

于 2012-04-13T10:31:13.343 に答える