0

現時点では、iPhone と iPad の友人のためのストリーミング ラジオ アプリに取り組んでいます。

設計をコードに実装しているときに、面白いバグ (?) に遭遇しました。このサンプルチュートリアルを使用して、背景とマスキングにアルバムアートを表示したいと思います。

低解像度の iPhone では正常に動作しますが、iPhone 4 および 5 (テスト デバイスとエミュレータ) でテストするとすぐに、画像が本来の 4 倍の大きさで表示されます。

ここに画像の説明を入力

次のように表示されます。ここに画像の説明を入力

通常の画像と、320x320 & 640x640 (@2x) の @2x の両方の画像を追加しました。しかし、マスクは機能すると思います(4倍に爆破されない場合)。おそらく、コードは画像を 1 回ではなく 2 回拡大しています。

私のコードを少し追加するには:

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

}

CAGradientLayer新しいイメージを作成しなくても済むように、おそらく で効果を得ることができます。これにより、CPU の負荷が少し軽減されます。

于 2013-06-12T13:40:19.913 に答える