2011-07-10 4 views
6

これまで私はCGContextDrawLinearGradient()とCGContextDrawRadialGradient()を使ってみましたが、前者では球体のようにグラデーションのように見える方法を理解することができませんでした。後者では、グラデーションを球の形にするのは、私が試行するたびに、球だけでなく円筒の形になっているからです。Core Graphicsおよび/またはQuartz 2Dを使用したiOS開発では、球のように見えるようにグラデーションで塗りつぶした円をどのように描画できますか?

現在、2Dサークルを描画するために使用しているコードを以下に示します。私は、球体のように見えるように円を塗りつぶすためにCore GraphicsやQuartz 2Dのみを使ってグラデーションや他の方法を使用したいと思います。

円を描くための現在のコード:

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
float x = 20.0; 
float y = 20.0; 
float radius = 12.5; 
CGContextFillEllipseInRect(ctx, CGRectMake(x, y, radius, radius); 

P.S. - 上記のコードは想定どおりに動作します。エラーがある場合は、実際のファイルにコードを入力するのではなく、質問を入力するときにエラーになります。

+0

あなたはたとえばあなたが「球のように見える」と思うイメージを与えることができますか? – jtbandes

答えて

8

私は、これはあなたが探している効果であると考えている:

enter image description here

これは、放射状のグラデーションを使用して作成されます。グラディエントは半径0で始まり、円のサイズの半径で終わります。始点の中心点は、終点で作成された円の範囲内になければなりません。そうしないと、代わりに円錐の形が得られます。ここで私はこのイメージを作るために使用されるコードは、(カップルの部品は、あなたがそれを使用する前に、iOS版に変換する必要があります)です:

CGContextRef ctxt = [[NSGraphicsContext currentContext] graphicsPort]; 
CGGradientRef gradient; 
CGColorSpaceRef colorSpace; 
CGFloat locations[] = {0.0,1.0}; 
CGFloat components[] = { 0.5,1.0,1.0,1.0, 0.25,0.5,0.5,1.0 }; 
colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); 
gradient = CGGradientCreateWithColorComponents(colorSpace,components,locations, 
               sizeof(locations)/sizeof(CGFloat)); 
CGPoint start = {70.0,130.0}, end = {100.0,100.0}; 
CGFloat startRadius = 0.0, endRadius = 90.0; 
CGContextDrawRadialGradient(ctxt,gradient,start,startRadius,end,endRadius,0); 
CGGradientRelease(gradient); 
CGColorSpaceRelease(colorSpace); 
関連する問題