2010-02-17 25 views

Trả lời

8

Thực hiện phương pháp được phác thảo bởi Cirrostratus, giữ một bản sao được lưu trong bộ nhớ cache của nó và sau đó áp dụng biến đổi để thay đổi kích thước và/hoặc vị trí của hình ảnh trong khi kéo.

(cảnh báo, đây không phải là chức năng kiểm tra mã /, nhưng bạn nên bắt đầu)

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

Sau đó, trong phương pháp của bạn trong khi mở rộng quy mô, bạn sẽ làm điều gì đó như:

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

Chắc chắn phải mất một nhìn vào tài liệu táo. Một nơi khởi đầu tốt là Quartz 2D Programming Guide.

+0

Alright, không chính xác những gì tôi muốn nhưng, tôi sẽ chấp nhận, tôi muốn một phai. – Jaba

+1

Bạn cũng có thể sử dụng thuộc tính shadow làm sáng nếu bạn thay đổi màu. Đơn giản và dễ dàng. – zekel

+1

Mã này sai theo nhiều cách ... –

2

Khi xem xét hiệu suất, hệ điều hành iPhone không hỗ trợ các thuộc tính shadowColor, shadowOffset, shadowOpacity và shadowRadius, mà bạn thường có thể sử dụng trong Cocoa. Hầu hết mọi người lặp lại hình dạng họ muốn phát sáng nhiều lần với mỗi lần hạ thấp độ mờ và bù đắp hình dạng một pixel tại một thời điểm để mô phỏng giao diện của ánh sáng. Nếu ánh sáng của bạn không cần phải rất lớn, bạn không thể nói sự khác biệt.

+0

này sẽ mất rất nhiều hiệu suất nếu lượt xem đang được cập nhật nhiều lần mỗi giây. Tôi đang thay đổi kích thước bằng cách sử dụng sự kiện 'touchesMoved'. – Jaba

4

Bạn có thể sử dụng, đơn giản và nhanh chóng, công trình này sử dụng UIView, mở nút, vv:

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; 

nếu, bạn có thể sử dụng radio, thêm này:

shadowView.layer.shadowRadius = 10.0f; 
Các vấn đề liên quan