2010-02-17 13 views

risposta

8

Prendere l'approccio delineato da Cirrostratus, conservarne una copia memorizzata nella cache e quindi applicare una trasformazione per modificare le dimensioni e/o la posizione dell'immagine durante il trascinamento.

(attenzione, non si tratta di codice funzionale/testato, ma dovrebbe iniziare)

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

Poi nel metodo, mentre il ridimensionamento si dovrebbe fare qualcosa di simile:

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

Sicuramente prendere un guarda i documenti Apple. Un buon punto di partenza è lo Quartz 2D Programming Guide.

+0

Va bene, non esattamente quello che volevo ma, accetterò, volevo una dissolvenza. – Jaba

+1

Puoi anche usare la proprietà shadow come bagliore se cambi il colore. Semplice e facile. – zekel

+1

Questo codice è sbagliato in molti modi ... –

2

Per quanto riguarda le prestazioni, iPhone OS non supporta le proprietà shadowColor, shadowOffset, shadowOpacity e shadowRadius, che è possibile utilizzare normalmente in Cocoa. La maggior parte delle persone duplica la forma che desidera illuminare più volte abbassando ogni volta l'opacità e compensando la forma un pixel alla volta per simulare l'aspetto di una luce. Se il tuo bagliore non ha bisogno di essere molto grande, non puoi dire la differenza.

+0

Questo vi porterà fino alot delle prestazioni se la vista viene aggiornata più volte al secondo. Sto cambiando le dimensioni usando l'evento 'touchesMoved'. – Jaba

4

È possibile utilizzare questo, semplice e veloce, questo funziona utilizzando UIView, sbottonare, ecc:

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; 

se, è possibile utilizzare le radio, aggiungere questo:

shadowView.layer.shadowRadius = 10.0f; 
Problemi correlati