2013-04-14 62 views
0

我想爲可伸縮的UIImage着色,但無法使其工作。 在這篇文章的幫助下:How to change the color of an UIImage我已經成功地爲我的UIImage着色,但是當我將它拉伸時,顏色未設置在'新'框架上。如何爲可伸縮的UIImage着色

這是我如何使用類別設置我的顏色:

+ (UIImage *)imageNamed:(NSString *)name withColor:(UIColor *)color 
{ 
    UIImage *image = [UIImage imageNamed:name]; 
    if (color == nil) 
     return image; 
    CGRect rect = CGRectMake(0.f, 0.f, image.size.width, image.size.height); 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextClipToMask(context, rect, image.CGImage); 
    CGContextSetFillColorWithColor(context, [color CGColor]); 
    CGContextFillRect(context, rect); 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return [UIImage imageWithCGImage:img.CGImage 
           scale:1.0 
         orientation:UIImageOrientationDownMirrored]; 
} 

任何建議表示讚賞...

+0

你可以粘貼你如何創建彩色圖像,然後使其可拉伸? – Gabriel

回答

1

此代碼應工作:

+ (UIImage *)imageNamed:(NSString *)name withColor:(UIColor *)theColor 
{ 
    UIImage *baseImage = [UIImage imageNamed:name]; 
    UIGraphicsBeginImageContext(baseImage.size); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGRect area = CGRectMake(0, 0, baseImage.size.width, baseImage.size.height); 
    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -area.size.height); 
    CGContextSaveGState(ctx); 
    CGContextClipToMask(ctx, area, baseImage.CGImage); 
    [theColor set]; 
    CGContextFillRect(ctx, area); 
    CGContextRestoreGState(ctx); 
    CGContextSetBlendMode(ctx, kCGBlendModeMultiply); 
    CGContextDrawImage(ctx, area, baseImage.CGImage); 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
+0

工程就像一個魅力。謝謝 – klefevre

0

你有一個圖像你的包,並使用上面的顏色,它不會修改原始圖像,但返回一個新的圖像。這個新圖像是一個正常的圖像,這意味着你看到的顏色是圖像中的實際位。如果您現在從新創建的圖像創建新的可伸縮圖像,而不是原始圖像,則應該是正確的顏色。

如果不是創建一個小的演示項目並將其發佈到DropBox上,讓我們來看看它。