目前我正在为iPhone和iPad的朋友制作一个流媒体广播应用程序。
在将我的设计实现到代码中时,我发现了一个有趣的错误(?)。我希望在背景上显示专辑封面并使用此示例tutorial屏蔽它。
它适用于低分辨率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];
答案 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密集度。