5

ここに投稿された回答を試した後、返される画像は Retina ディスプレイでは非常に低品質です。私のマスク画像には、白い背景と黒い内容があります。

出力: https://dzwonsemrish7.cloudfront.net/items/22373o2Z260d3S051a05/Screenshot%202013.01.02%2000.04.57.png?v=34c4ab14

コード:

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);
4

1 に答える 1

-1

完全にはわかりませんが、次の行を変更してみてください。

UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle.png"];

これに:

UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle"];

またはこれを素朴に:

UIImage *toggleImage = [UIImage imageNamed:@"RotationToggle@2x.png"];

問題は、このように割り当てることで、低品質の画像を使用するように強制していると思います。拡張機能をスキップすると、Xcode は自動的に Retina イメージを探し、存在する場合はそれを割り当てます。

間違っているかもしれませんが、もしそうならごめんなさい。

于 2013-04-22T15:04:55.097 に答える