1

ブラシの不透明度を制御できる描画アプリを作成しようとしていますが、不透明度を下げようとすると、次のようになります。コアグラフィックを使用しました。(画像を確認してください)。

ここに画像の説明を入力してください

この問題をどのように解決しますか?

これが私のコードの一部です。

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event//upon touches
{
    UITouch *touch = [touches anyObject];

    previousPoint1 = [touch locationInView:self.view];
    previousPoint2 = [touch locationInView:self.view];
    currentTouch = [touch locationInView:self.view];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event//upon moving
{
    UITouch *touch = [touches anyObject];

    previousPoint2 = previousPoint1;
    previousPoint1 = currentTouch;
    currentTouch = [touch locationInView:self.view];

    CGPoint mid1 = midPoint(previousPoint2, previousPoint1); 
    CGPoint mid2 = midPoint(currentTouch, previousPoint1);

    UIGraphicsBeginImageContext(CGSizeMake(1024, 768));
    [imgDraw.image drawInRect:CGRectMake(0, 0, 1024, 768)];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineCap(context,kCGLineCapRound);
    CGContextSetLineWidth(context, slider.value);
    CGContextSetBlendMode(context, blendMode);
    CGContextSetRGBStrokeColor(context,red, green, blue, 0.5);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, mid1.x, mid1.y);
    CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
    CGContextStrokePath(context);

    imgDraw.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsGetCurrentContext();
    endingPoint=currentTouch;
}
4

2 に答える 2

2

ごとに画像を更新するのではなく、毎回画像をtouchesMoved再保存するのではなくtouchesMoved、データポイントの配列にそれぞれを追加することをお勧めします。次に、描画ルーチンで(NSResponderが提案するように)元の画像をプルアップしてから、ポイントの配列によってマップされたパス全体を再描画します。ある時点でイメージを更新したい場合は、で更新しますtouchesEndedが、すべてではありませんtouchesMoved

于 2012-07-16T07:30:41.913 に答える
1

で描画しないでください-touchesMoved:withEvent:。いずれのイベントメソッドでも、描画する必要があるものを更新してから、-を送信する必要があります。setNeedsDisplay.

上記のコードで記述されているように、イベントメッセージから取得する場所の各ペア間にパスを作成しています。

でパスを作成し-touchesBegan:withEvent:、に追加する必要があり-touchesMoved:withEvent:ます。

于 2012-07-16T07:27:56.860 に答える