2010-02-17 15 views

Respuesta

8

Tome el enfoque descrito por Cirrostratus, conserve una copia en caché del mismo y luego aplique una transformación para cambiar el tamaño y/o la posición de la imagen mientras la arrastra.

(advertencia, esto no es un código funcional/probado, pero debería empezar)

-(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; 
} 

Luego, en el método, mientras que la escala que haría algo como:

// 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. 

Sin duda tomar una mira los documentos de Apple. Un buen lugar para comenzar es el Quartz 2D Programming Guide.

+0

Muy bien, no es exactamente lo que quería pero, lo acepto, quería un fundido. – Jaba

+1

También puede usar la propiedad de sombra como brillo si cambia el color. Simple y fácil. – zekel

+1

Este código es incorrecto de muchas maneras ... –

2

Como una consideración de rendimiento, iPhone OS no admite las propiedades shadowColor, shadowOffset, shadowOpacity y shadowRadius, que normalmente podría usar en Cocoa. La mayoría de las personas duplican la forma que desean iluminar varias veces con cada vez que baja la opacidad y la compensación de la forma de un píxel a la vez para simular el aspecto de un resplandor. Si su brillo no necesita ser muy grande, no puede notar la diferencia.

+0

Esto tomará mucho de rendimiento si la vista se actualiza muchas veces por segundo. Estoy cambiando el tamaño usando el evento 'touchesMoved'. – Jaba

4

Se puede usar esta, simple y rápido, esto funciona usando UIView, desabrocharse, etc:

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; 

si, puede utilizar radios, añadir lo siguiente:

shadowView.layer.shadowRadius = 10.0f; 
Cuestiones relacionadas