0

目前,我正在为 iPhone 和 iPad 的朋友开发流媒体广播应用程序。

在将我的设计实现到代码中时,我遇到了一个有趣的错误(?)。我希望使用此示例教程在背景上显示专辑封面并对其进行遮罩。

它在低分辨率 iPhone 上运行良好,但一旦我在 iPhone 4 和 5(测试设备和模拟器)上测试它,图片就会显示为应有的 4 倍。

在此处输入图像描述

它应该显示如下:在此处输入图像描述

我已经添加了普通图片和@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];
4

1 回答 1

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];

}

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

于 2013-06-12T13:40:19.913 回答