2011-07-10 15 views
6

Do tej pory szukałem przy użyciu CGContextDrawLinearGradient() i CGContextDrawRadialGradient(), jednak z pierwszym nie mogę dowiedzieć się, jak sprawić, aby gradient wyglądał jak kula, a przy tym ostatnim, nie mogę zrozumieć, jak aby gradient zmienił się w kształt kuli, ponieważ za każdym razem, gdy próbuję, okazuje się on w kształcie pełnego cylindra zamiast tylko kuli.W programie iOS Development, używając Core Graphics i/lub Quartz 2D, jak narysować koło wypełnione gradientem w taki sposób, że wygląda jak kula?

Kod używany do bieżącego narysowania okręgu 2D pokazano poniżej. Chciałbym użyć gradientu lub innej możliwej metody, używając tylko Core Graphics i/lub Quartz 2D do wypełnienia okręgu w sposób, który sprawia, że ​​wygląda jak kula.

Aktualny kod do rysowania okręgu:

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

PS: - Powyższy kod działa tak, jak powinien, więc w przypadku wystąpienia błędów, są one po prostu z moich błędów podczas wpisywania pytania, a nie podczas wpisywania kodu do rzeczywistego pliku.

+0

Czy możesz podać przykładowy obraz, który Twoim zdaniem "wygląda jak kula"? – jtbandes

Odpowiedz

8

Wierzę, że to jest efekt szukasz:

enter image description here

ten jest tworzony przy użyciu gradientu radialnego. Gradient rozpoczyna się od promienia równego 0 i kończy się promieniem wielkości okręgu. Punkt środkowy początku musi znajdować się w okręgu utworzonym przez koniec, lub zamiast tego pojawi się kształt stożka. Oto kod, z którego zrobiłem ten obraz (kilka części należy przetłumaczyć na iOS przed użyciem):

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); 
Powiązane problemy