2011-07-10 12 views
6

Şimdiye kadar ben CGContextDrawLinearGradient() ve CGContextDrawRadialGradient() kullanarak baktım, ancak, eski degrade bir küre gibi nasıl görüneceğini anlayamıyorum, ve ikincisi ile, nasıl olduğunu anlayamıyorum gradyanı bir küre şekline sokmak için, çünkü her denediğimde, sadece bir küre yerine tam silindirin şeklini alır.iOS Geliştirmede, Çekirdek Grafikleri ve/veya Kuvars 2B'yi kullanarak, bir küreye benzeyecek şekilde bir degrade ile dolu bir daireyi nasıl çizebilirim?

Geçerli bir 2B daire çizmek için kullandığınız kod aşağıda gösterilmiştir. Çemberi küre gibi gösteren bir şekilde doldurmak için yalnızca Çekirdek Grafik ve/veya Kuvars 2D kullanarak bir gradyanı veya başka bir yöntemi kullanmak istiyorum.

bir daire çizim

Mevcut kodu:

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

P.S. - Yukarıdaki kod, olması gerektiği gibi çalışır, bu yüzden herhangi bir hata olması durumunda, sadece gerçek dosyaya kod yazarken değil, soruyu yazarken hatalarımdan kaynaklanırlar.

+0

Eğer "bir küre gibi görünüyor" düşünmek bir örnek görüntü verebilir: İşte bu resim (kullanmadan önce birkaç parça iOS'a çevrilmesi gerekir) yapmak için kullanılan koddur? – jtbandes

cevap

8

Bunun aradığınız etkisi olduğuna inanıyorum:

enter image description here

Bu radyal gradyan kullanılarak oluşturulur. Degrade, 0 yarıçapı ile başlar ve dairenin boyutunun yarıçapı ile biter. Başlamanın merkez noktası, sonun oluşturduğu daire içinde olmalı ya da bunun yerine bir koni şeklini alacaksınız.

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); 
İlgili konular