2

円弧を使用してコンテキストへのパスを描画し、それをクリップとして設定して、そのクリップに画像を描画しました。

CGContextBeginPath(context);
CGContextMoveToPoint(context, lineStartPoint.x, lineStartPoint.y);
CGContextAddArc(context, lineStartPoint.x, lineStartPoint.y, 105, toAngle*M_PI,fromAngle*M_PI , 1);
CGContextMoveToPoint(context, toLinePoint.x, toLinePoint.y);
CGContextClip(context);
[[UIImage imageNamed:@"gradientfill.png"] drawInRect:[self bounds]];

この画像に示すように、これは完全に機能します

コンテキストクリッピング

私の問題は、そのグラデーションの下部に、クリップの外側に存在させたい円を描いたということです。これは次のようになります。

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

クリップの外側にその円を配置できるように、コンテキストでクリッピングを停止するにはどうすればよいですか?

円を描くための私のコードは

CGMutablePathRef path = CGPathCreateMutable();
CGRect toHandleRect = CGRectMake(toLinePoint.x-5, toLinePoint.y-5, 10, 10);    
CGPathAddEllipseInRect(path, NULL, toHandleRect);
CGContextAddPath(context, path);
CGPathRelease(path);

ユーザーが小さな円をそのビューの任意の場所にドラッグできるようにしたいと思います。

4

1 に答える 1

5

次の例のように、CGContextSaveGState+CGContextRestoreGStateのペアを発行できます。

// Saves the context including the current clipping region.
CGContextSaveGState(context);

// Build you clip region and do some drawing
CGContextBeginPath(context);
CGContextMoveToPoint(context, lineStartPoint.x, lineStartPoint.y);
CGContextAddArc(context, lineStartPoint.x, lineStartPoint.y, 105, toAngle*M_PI,fromAngle*M_PI , 1);
CGContextMoveToPoint(context, toLinePoint.x, toLinePoint.y);
CGContextClip(context);

[[UIImage imageNamed:@"gradientfill.png"] drawInRect:[self bounds]];

CGMutablePathRef path = CGPathCreateMutable();
CGRect toHandleRect = CGRectMake(toLinePoint.x-5, toLinePoint.y-5, 10, 10);    
CGPathAddEllipseInRect(path, NULL, toHandleRect);
CGContextAddPath(context, path);
CGPathRelease(path);

// Restore the original state
CGContextRestoreGState(context);
于 2012-09-23T06:47:01.487 に答える