2009-06-07 3 views
1

Ich versuche, einem Bild einen kleinen Schatten hinzuzufügen, ähnlich wie die Symbolschatten im App Store. Im Moment verwende ich den folgenden Code, um die Ecken meiner Bilder zu runden. Weiß jemand, wie ich es anpassen kann, um einen kleinen Schatten hinzuzufügen?UIImage Shadow Trouble

- (UIImage *)roundCornersOfImage:(UIImage *)source height:(int)height width:(int)width { 
int w = width; 
int h = height; 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef imageContext = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst); 

CGContextBeginPath(imageContext); 

CGRect rect = CGRectMake(0, 0, w, h); 
addRoundedRectToPath(imageContext, rect, 10, 10); 
CGContextClosePath(imageContext); 
CGContextClip(imageContext); 

CGContextDrawImage(imageContext, CGRectMake(0, 0, w, h), source.CGImage); 

CGImageRef imageMasked = CGBitmapContextCreateImage(imageContext); 
CGContextRelease(imageContext); 
CGColorSpaceRelease(colorSpace); 

return [UIImage imageWithCGImage:imageMasked];  
} 

"addRoundedRectToPath" bezieht sich auf eine andere Methode, die offensichtlich die Ecken rundet.

Antwort

6

Zuerst, hier ist ein Link auf die Dokumentation:

http://developer.apple.com/iPhone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_shadows/dq_shadows.html#//apple_ref/doc/uid/TP30001066-CH208-TPXREF101

Als nächstes versucht so etwas wie dieses Recht vor dem Aufruf von CGContextDrawImage Zugabe (...):

CGFloat components[4] = {0.0, 0.0, 0.0, 1.0}; 
CGColorRef shadowColor = CGColorCreate(colorSpace, components); 
CGContextSetShadowWithColor(imageContext, CGSizeMake(3, 3), 2, shadowColor); 
CGColorRelease(shadowColor); 

Nach, Beim Aufruf von CGContextSetShadowWithColor (.....) sollte alles mit einem Schatten gezeichnet werden, der um (3, 3) Punkte versetzt und mit einem Weichzeichner-Radius von 2.0 Punkten gezeichnet wird. Wahrscheinlich möchten Sie die Deckkraft der schwarzen Farbe (die vierte Komponente in Komponenten) optimieren und die Schattenparameter ändern.

Wenn Sie an einem bestimmten Punkt nicht mehr mit einem Schatten zeichnen möchten, müssen Sie den Grafikkontext vor dem Aufruf von CGContextSetShadowWithColor speichern und wiederherstellen, wenn Sie nicht mehr mit einem Schatten zeichnen möchten.

+2

Argument 2 von CGContextSetShadowWithColor ist CGSize. Daher sollte CGContextSetShadowWithColor (imageContext, CGSizeMake (3,3), 2, shadowColor); – samvermette

+0

Fest, danke Sam. –