Retina图像在Xcode中爆炸了4次

时间:2013-06-12 13:28:31

标签: iphone image-resizing masking retina

目前我正在为iPhone和iPad的朋友制作一个流媒体广播应用程序。

在将我的设计实现到代码中时,我发现了一个有趣的错误(?)。我希望在背景上显示专辑封面并使用此示例tutorial屏蔽它。

它适用于低分辨率iPhone,但只要我在iPhone 4& 5(测试设备和仿真器)图片显示为应有的4倍。

enter image description here

它应该显示如下:enter image description here

我添加了两张普通照片,以及@ 2x的照片,它们都是320x320& 640x640(@ 2x) 我应该添加的最后一件事,如果我不屏蔽图像,它可以正常工作。但我相信面具有效(如果它不会被炸掉4倍)。所以,可能代码是将图片放大两倍,而不只是一次。

添加一些我的代码:

albumArt = [[UIImageView alloc] init];
[albumArt setFrame:CGRectMake(0, 0, 320, 320)];
UIImage *image = [UIImage imageNamed:@"testPopArt.png"];
UIImage *mask = [UIImage imageNamed:@"popArtMask.png"];
finalAlmbumArt = [self maskImage:image withMask:mask];
[albumArt setBackgroundColor:[UIColor colorWithPatternImage:finalAlmbumArt]];
[appBackground addSubview:albumArt];

1 个答案:

答案 0 :(得分:1)

您需要告诉UIImage规模:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage;

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                        CGImageGetHeight(maskRef),
                                        CGImageGetBitsPerComponent(maskRef),
                                        CGImageGetBitsPerPixel(maskRef),
                                        CGImageGetBytesPerRow(maskRef),
                                        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    CGFloat scale = [UIScreen mainScreen].scale;
    return [UIImage imageWithCGImage:masked scale:scale orientation:UIImageOrientationDown];

}

您可能也可以使用CAGradientLayer获得效果,这样您就不必制作新图像。它会减少CPU密集度。