UIImage Shadow Trouble

Я пытаюсь добавить к изображению небольшую тень, очень похожую на тени значков в 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» относится к другому методу, который явно скругляет углы.


person Brandon Schlenker    schedule 07.06.2009    source источник


Ответы (1)


Во-первых, вот ссылка на документацию:

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 и восстановить его, когда вы хотите прекратить рисование с тенью.

person Jon Hess    schedule 07.06.2009