これを達成するための多くの異なる方法があります。まず、NSBoxオブジェクトを使用して、適切な形状にします。次に、プログラムでさまざまな色を示す画像を作成し、それを別の画像でマスクしてすべてのエッジを切り取ります。次に、ボックス内にNSImageViewを作成し、そこにマスクされた画像を表示します。必要に応じてコードを追加できます。
編集:
いくつかのコード。
2色と透明なレストで構成されたシンプルな静止画を使って試してみました。私はそれを次のようにアウトレットに追加します:
-(void) awakeFromNib{
NSImage* img = [self maskImage:[NSImage imageNamed:@"Static image from Bundle"] withMask:[NSImage imageNamed:@"Static image mask"]];
[imgView setImage:img];
}
そして、maskImage:withMask:メソッドは次のようになります。
- (NSImage*) maskImage:(NSImage *)image withMask:(NSImage *)maskImage {
CGImageSourceRef sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)[maskImage TIFFRepresentation], NULL);
CGImageRef maskRef = CGImageSourceCreateImageAtIndex(sourceRef, 0, NULL);
sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)[image TIFFRepresentation], NULL);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(sourceRef, 0, NULL);
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imageRef, mask);
return [[NSImage alloc] initWithCGImage:masked size:NSZeroSize];
}
マスク画像には、NSBoxオブジェクトのサイズのシンプルな白黒フォトショップ画像を使用し、透明になるはずのすべてを黒く塗りつぶしました。このメソッドの唯一の問題は、NSBoxのシャドウがレンダリングされないことです。これを実現するには、マスクにグラデーションを作成する必要があります。これは実際にはかなり簡単なはずです。
私はこれらの写真を使用しています:http://postimage.org/gallery/ertbeca/
ソース画像: http: //postimage.org/image/pdgs4abop/
マスク画像:http://postimage.org/image/54teikcdl/
そしてそれはこのようになってしまいました:http://postimage.org/image/s8tvb5fop/
お役に立てば幸いです。