2010-02-17 10 views

Odpowiedz

8

Take podejścia przedstawionego przez cirrostratus, zachować w pamięci podręcznej kopię, a następnie zastosować transformację, aby zmienić rozmiar i/lub położenie obrazu podczas przeciągania.

(uwaga, to nie jest funkcjonalny/code testowane, ale powinno Ci zacząć)

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

Następnie w metodzie podczas skalowania byś zrobił coś takiego:

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

Zdecydowanie wziąć spójrz na docs jabłkowy. Dobrym miejscem początkowym jest Quartz 2D Programming Guide.

+0

W porządku, nie dokładnie to, co chciałem, ale zaakceptuję, chciałem zniknąć. – Jaba

+1

Możesz także użyć właściwości shadow jako blasku, jeśli zmienisz kolor. Proste i łatwe. – zekel

+1

Ten kod jest błędny na tak wiele sposobów ... –

2

Pod względem wydajności iPhone OS nie obsługuje właściwości shadowColor, shadowOffset, shadowOpacity i shadowRadius, których można normalnie używać w Cocoa. Większość ludzi powtarza kształt, który chcą kilkakrotnie poświecić, za każdym razem obniżając krycie i przesuwając kształt o jeden piksel na raz, aby zasymulować wygląd blasku. Jeśli Twój blask nie musi być bardzo duży, nie możesz odróżnić.

+0

To zajmie dużo wydajności, jeśli widok jest aktualizowany wiele razy na sekundę. Zmieniam rozmiar za pomocą zdarzenia 'touchesMoved'. – Jaba

4

Można to wykorzystać, prosty i szybki, to działa przy użyciu UIView, rozpiąć, 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; 

jeśli można użyć radia, dodać to:

shadowView.layer.shadowRadius = 10.0f; 
Powiązane problemy