我正在尝试为图像添加一个小阴影,就像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”指的是另一种明显围绕角落的方法。
答案 0 :(得分:6)
首先,这是文档的链接:
接下来,在调用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之前保存图形上下文,并在想要停止使用阴影绘制时恢复它。