2016-10-05 8 views
0

私は背景UIImageを持っています。カスタムシェイプを使ってバックグラウンドUIImageをトリミングしたいので、このバックグラウンドイメージはカスタムシェイプでしか表示されません。たとえば、私は月形のカスタムシェイプを持っています。そして、私は月の形をした部分だけに背景イメージが来るようにしたいと思います。他の回答に基づいてUIImageをカスタムシェイプでトリミングする

、私はそうのような画像にマスクを課すことをしようとしています:

- (UIImage *)createImageFromImage:(UIImage *)image 
        withMaskImage:(UIImage *)mask { 
    CGImageRef imageRef = image.CGImage; 
    CGImageRef maskRef = mask.CGImage; 

    CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
              CGImageGetHeight(maskRef), 
              CGImageGetBitsPerComponent(maskRef), 
              CGImageGetBitsPerPixel(maskRef), 
              CGImageGetBytesPerRow(maskRef), 
              CGImageGetDataProvider(maskRef), 
              NULL, 
              YES); 

    CGImageRef maskedReference = CGImageCreateWithMask(imageRef, imageMask); 
    CGImageRelease(imageMask); 

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference]; 
    CGImageRelease(maskedReference); 

    return maskedImage; 
} 

しかし、この結果はenter image description hereのように見え、それにはいくつかの問題があります。

は、
  1. 私が持っている月は100 * 100ですが、これは奇妙な割合を伸ばしています
  2. 私の目標は画像が月を通過することです - しかし、現時点では月が来る白い形です画像

作物の問題をどのように修正できるかについてのご意見は、大変ありがとうございます。ありがとう!

+0

このライブラリはカスタムシェイプに使用できます。あなたのパスを描くだけで、イメージが切り取られます。 https://www.cocoacontrols.com/controls/mdimagecroper –

答えて

2

背景画像にCALayerでカスタムマスクを追加する必要があります。 mask.png(月)の色をすべて表示すると、すべて透過は表示されません。

UIImage *moonImage = [UIImage imageNamed:@"mask.png"]; 
CALayer *maskLayer = [CALayer layer]; 
[maskLayer setContents:(id)moonImage.CGImage]; 
[maskLayer setFrame:CGRectMake(0.0f, 0.0f, moonImage.size.width, moonImage.size.height)]; 

UIImageView *yourBackgroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
// Keep your image view in tact here, just add: 
[yourBackgroundImageView.layer setMask:maskLayer]; 
+0

これは素晴らしく、正確に私が必要とした結果を達成しました。ありがとう! – daspianist

+0

@daspianist私は正確な行動が必要です。上記のコードはどこに書きますか? – Dalvik

関連する問題