Как добавить внешнее свечение в UIImage или UIImageView или UIView - PullRequest
9 голосов
/ 17 февраля 2010

Я хочу добавить ТЕНЕВНОЕ / внешнее свечение к UIImage / UIImageView / UIView, но я не знаю Core Graphics.

Edit: Пожалуйста, помогите !!

Ответы [ 3 ]

8 голосов
/ 27 февраля 2010

Выберите подход, описанный Cirrostratus, сохраните его в кэшированной копии и примените преобразование, чтобы изменить размер и / или положение изображения при перетаскивании.

(предупреждение, это не функциональный / проверенный код, но вам следует начать)

-(UIImage*)addGlowToImage:(UIImage*)imageInput;
{
    CGRect newSize = imageInput.bounds;
    CGImageRef theImage = imageInput.CGImage;

    // expand the size to handle the "glow"
    newSize.size.width += 6.0;
    newSize.size.height += 6.0;
    UIGraphicsBeginImageContext(newSize);
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    CGContextBeginTransparencyLayerWithRect(ctx, newSize, NULL);
    CGContextClearRect(ctx, newSize);

    // you can repeat this process to build glow.
    CGContextDrawImage(ctx, newSize, theImage); 
    CGContextSetAlpha(ctx, 0.2);  

    CGContextEndTransparencyLayer(ctx);

    // draw the original image into the context, offset to be centered;
    CGRect centerRect = inputImage.bounds;
    centerRect.origin.x += 3.0;
    centerRect.origin.y += 3.0;
    CGContextDrawImage(ctx, centerRect, theImage);

    result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return result;
}

Тогда в вашем методе при масштабировании вы сделаете что-то вроде:

// assumes UIImage *cachedImage = [self addGlowToImage:origImage]; has been called already.
// assumes ivars for scale exists

    CGRect newRect = cachedImage.bounds;
    newRect.size.width += scale;
    newRect.size.height += scale;

    [cachedImage drawInRect:newRect];  // image will be scaled to fill destination rectangle.

Определенно посмотрите на документы по яблокам. Хорошее место для начала - руководство по программированию Quartz 2D .

4 голосов
/ 14 ноября 2014

Вы можете использовать это, просто и быстро, это работает с использованием uiview, unbutton и т. Д .:

UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(100, 66, 112, 112)];
shadowView.layer.shadowColor = [[UIColor blackColor] CGColor];
shadowView.layer.shadowOpacity = .4;
shadowView.layer.shadowOffset = CGSizeZero;
shadowView.layer.masksToBounds = NO;

Если вы можете использовать радио, добавьте:

shadowView.layer.shadowRadius = 10.0f;
2 голосов
/ 23 февраля 2010

С точки зрения производительности, iPhone OS не поддерживает свойства shadowColor, shadowOffset, shadowOpacity и shadowRadius, которые обычно можно использовать в Какао. Большинство людей дублируют форму, которую они хотят светить, несколько раз, каждый раз уменьшая непрозрачность и смещая форму на один пиксель за раз, чтобы имитировать вид свечения. Если ваше свечение не должно быть очень большим, вы не сможете определить разницу.

...