2013-01-10 72 views
0

我有一張圖像(帶有X & 2X變體),它在視網膜設備上看起來清晰乾淨。但我想要一個漸變效果。一旦我畫上漸變,圖像就會失去清晰度,我猜是因爲漸變沒有放在精確的圖像邊界上。任何建議如何解決這個問題。我附上的圖片(帶和不帶漸變效果),以​​及我的梯度代碼:圖像清晰度隨着圖像漸變效果消失

- (UIImage *)tintedWithLinearGradientColors:(NSArray *)colorsArray forImageNamed:(NSString *)iImageName { 
    // Load image 
    UIImage *myIconImage = [UIImage imageNamed:iImageName]; 
    // Create gradient 
    UIColor *colorOne = [colorsArray objectAtIndex:1]; // top color 
    UIColor *colorTwo = [colorsArray objectAtIndex:0]; // bottom color 

    NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, (id)colorTwo.CGColor, nil]; 
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColors(space, (__bridge CFArrayRef)colors, NULL); 

    UIGraphicsBeginImageContext(myIconImage.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextTranslateCTM(context, 0, myIconImage.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 

    CGRect rect = CGRectMake(0, 0, myIconImage.size.width, myIconImage.size.height); 

    // image drawing code 
    CGContextSetBlendMode(context, kCGBlendModeNormal); 
    CGContextDrawImage(context, rect, myIconImage.CGImage); 

    // draw tint color, preserving alpha values of original image 
    CGContextSetBlendMode(context, kCGBlendModeMultiply); 
    CGContextClipToMask(context, rect, myIconImage.CGImage); 
    CGContextDrawLinearGradient(context, gradient, CGPointMake(0,0), CGPointMake(0, myIconImage.size.height), 0); 

    UIImage *coloredImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return coloredImage; 
} 

enter image description here

enter image description here

回答

0

更換線

UIGraphicsBeginImageContext(myIconImage.size); 
with 
UIGraphicsBeginImageContextWithOptions(myIconImage.size, NO, myIconImage.scale); 

爲我工作。

0

您需要通過代碼來添加這個梯度?如果不這樣做,請在Photoshop或其他軟件上添加漸變,然後使用漸變將圖像添加到項目中。