UIImage暗影麻烦

时间:2009-06-07 21:07:43

标签: iphone uiimage

我正在尝试为图像添加一个小阴影,就像App Store中的图标阴影一样。现在我正在使用以下代码来围绕我的图像的角落。有谁知道我怎么能适应它来增加一个小阴影?

- (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”指的是另一种明显围绕角落的方法。

1 个答案:

答案 0 :(得分:6)

首先,这是文档的链接:

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

接下来,在调用CGContextDrawImage(...)之前尝试添加类似的内容:

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);

之后,对CGContextSetShadowWithColor(.....)的调用,一切都应绘制一个被(3,3)点偏移的阴影,并用2.0点模糊半径绘制。您可能想要调整黑色的不透明度(组件中的第四个组件),并更改阴影参数。

如果您想在某个时刻停止使用阴影绘图,则需要在调用CGContextSetShadowWithColor之前保存图形上下文,并在想要停止使用阴影绘制时恢复它。