3
我試圖通過文本使背景可見。這是一個例子。iOS:通過文本顯示背景的透明文本
我做了工作,使用下面的代碼。
- (UIImage *)maskImage:(UIImage *)image withMask:(CGImageRef)maskRef {
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
// returns new image with mask applied
return maskedImage;
}
- (void)setImageForView:(UIImageView *)imageView withText:(NSString *)text {
NSDictionary *attributes = @{ NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Neue" size:45], NSForegroundColorAttributeName: [UIColor whiteColor], NSBackgroundColorAttributeName: [UIColor blackColor] };
CGSize size = [text sizeWithAttributes:attributes];
CGPoint center = imageView.center;
imageView.frame = CGRectMake(0, 0, size.width + 10, 41);
imageView.center = center;
UIGraphicsBeginImageContext(imageView.bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
// Draw a dark gray background
CGRect rect = imageView.bounds;
CGContextFillRect(context, rect);
// Draw the text upside-down
CGContextSaveGState(context);
CGContextSetInterpolationQuality(context , kCGInterpolationHigh);
[text drawInRect:CGRectMake((rect.size.width - size.width)/2, (rect.size.height - size.height)/2, size.width, size.height) withAttributes:attributes];
CGContextRestoreGState(context);
// Create an image mask from what we've drawn so far
CGImageRef alphaMask = CGBitmapContextCreateImage(context);
UIGraphicsEndImageContext();
imageView.image = [self maskImage:[UIImage imageNamed:@"white"] withMask:alphaMask];
}
它幾乎工作,但因爲它使用呈現的文本作爲掩模,它似乎失去了抗鋸齒效果在這個例子中。
我不知道是否有一種方式來獲得像第一個圖像的結果。任何幫助,將不勝感激。
謝謝,但改變文本的Alpha值不給,我需要同樣的效果。我想通過背景清楚地顯示背景。我認爲我的解決方案完全不同於這種方法。我將用我很快找到的解決方案進行更新。 – Todd 2014-08-31 04:39:17