2010-02-17 10 views

Antwort

8

Gehen Sie wie von Cirrostratus beschrieben vor, behalten Sie eine zwischengespeicherte Kopie und wenden Sie eine Transformation an, um die Größe und/oder Position des Bildes beim Ziehen zu ändern.

(Warnung, dies ist nicht funktionsfähig/getesteten Code, sollte aber loszulegen)

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

in Ihrer Methode Dann, während Skalierung Sie möchten etwas tun:

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

Auf jeden Fall ein nehmen Schau dir die Apple Docs an. Ein guter Startplatz ist die Quartz 2D Programming Guide.

+0

In Ordnung, nicht genau das, was ich wollte, aber ich werde akzeptieren, ich wollte ein Fade. – Jaba

+1

Sie können die Eigenschaft shadow auch als Glühen verwenden, wenn Sie die Farbe ändern. Simpel und einfach. – zekel

+1

Dieser Code ist in vielerlei Hinsicht falsch ... –

2

Als Leistungsaspekt unterstützt iPhone OS die Eigenschaften shadowColor, shadowOffset, shadowOpacity und shadowRadius nicht, die Sie normalerweise in Cocoa verwenden können. Die meisten Menschen duplizieren die Form, die sie mehrmals glühen möchten, indem sie die Deckkraft verringern und die Form um jeweils ein Pixel verschieben, um das Aussehen eines Glow zu simulieren. Wenn Ihr Leuchten nicht sehr groß sein muss, können Sie den Unterschied nicht erkennen.

+0

Dies wird eine Menge nehmen der Leistung, wenn die Ansicht mehrmals pro Sekunde aktualisiert wird. Ich ändere die Größe mit dem 'touchesMoved' Event. – Jaba

4

du, einfach und schnell nutzen können, diese uiview, unbutton arbeitet mit, 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; 

wenn Sie Radios verwenden können, fügen Sie diese:

shadowView.layer.shadowRadius = 10.0f;