尝试发布答案后 here返回的图像在视网膜显示器上的质量很差。我的 mask 图像有白色背景和黑色内容。
代码:
CGRect rect = CGRectMake(0.0f, 0.0f, 61.0f, 53.0f);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 2);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
CGContextFillRect(context, rect);
UIImage *imageGradient = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle.png"];
UIImage *inputImage = imageGradient;
CGImageRef maskRef = toggleImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imageGradient.CGImage, mask);
CGImageRelease(mask);
UIImage *maskedImage = [UIImage imageWithCGImage:masked scale:inputImage.scale orientation:0];
CGImageRelease(masked);
最佳答案
我不完全确定,但尝试更改此行:
UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle.png"];
为此:
UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle"];
或者天真的这样:
UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle@2x.png"];
问题是:我认为您通过以这种方式分配它来强制它使用低质量图像。跳过扩展时,Xcode 会自动查找 Retina 图像并在存在时分配它。
虽然我可能是错的,如果是这样的话抱歉。
关于objective-c - 以 Retina 质量屏蔽 2 个 UIImages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115459/