2012-07-14 16 views
10

Planuję utworzyć czteropunktowy gradient, przedstawiony poniżej, poprzez narysowanie dwóch gradientów liniowych za pomocą grafiki głównej i maskowanie między nimi za pomocą trzeciego czarno-białego gradientu liniowego.Gradient czteropunktowy w iOS

Czy istnieje skuteczniejszy sposób narysowania gradientu czteropunktowego za pomocą grafiki głównej lub innej?

enter image description here

Odpowiedz

4

można zapisać gradient maski podczas korzystania z CGBlendMode. Po prostu trudniej jest kontrolować dokładne kolory. Ale jeśli to nie jest dla ciebie ważne, może być trochę bardziej wydajne pod względem linii kodu, a może również pod względem wydajności.

Oto przykład z niektórych przypadkowych kolorach i CGBlendModeExclusion (CGBlendModeDifference daje podobny efekt)

- (void) drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSetBlendMode(ctx, kCGBlendModeExclusion); 
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); 

    CGFloat col1[8] = { 
     1.0, 0.0, 0.0, 1.0, 
     0.0, 0.0, 1.0, 1.0 
    }; 
    CGGradientRef grad1 = CGGradientCreateWithColorComponents (space, col1, NULL, 2); 
    CGContextDrawLinearGradient(ctx, grad1, CGPointMake(0, 0), CGPointMake(0, 320), 0); 


    CGFloat col2[8] = { 
     1.0, 0.5, 0.0, 1.0, 
     0.0, 1.0, 0.0, 1.0 
    }; 
    CGGradientRef grad2 = CGGradientCreateWithColorComponents (space, col2, NULL, 2); 
    CGContextDrawLinearGradient(ctx, grad2, CGPointMake(0, 0), CGPointMake(320, 0), 0); 

    CGGradientRelease(grad1); 
    CGGradientRelease(grad2); 
    CGColorSpaceRelease(space); 
} 
+0

To wydaje się być dobrym rozwiązaniem! – Mrwolfy

+0

Niesamowite, to dokładnie to, czego potrzebowałem, dobra robota! –

9

Draw cztery koła:

Circles

Zastosuj Radial przezroczysty gradient:

Gradient

Wynik:

Result

Uwagi:

  • Szare linie reprezentują wielkość bitmapy.
  • Średnica okręgów jest dwa razy większa niż średnica bitmapy.
  • Każde koło jest wyśrodkowane w jednym z rogów bitmapy.
  • Efektywnie rysowana jest tylko środkowa część.
  • Pozostałe części znajdują się poza bitmapą.
+0

sprytny, dziękuję. – Mrwolfy