2017-10-21 3 views
1

내 UIView에 거꾸로 된 마스크를 적용하고 싶습니다. 투명 이미지가있는 마스크를 UIImageView에 설정했습니다. 그러나 출력은UIView 마스크 반전

view.mask = imageView 

으로 이루어지지 않습니다. 아래에 설명 된대로 원하는 결과를 얻으려면 어떻게해야합니까? 원하는 결과는 마스크 컷 아웃을 투명도로 사용합니다. 보기의 마스크를 검사 할 때 CAShapeLayer가 아니므로 그렇게 반전 할 수는 없습니다. 몇 일을 할 수 있었던 것처럼

An illustration of what happens vs what I want.

+0

[의 drawRect에서 아이폰 OS 반전 마스크]의 사용 가능한 복제 (https://stackoverflow.com/questions/14411765/ios-invert-mask-in-drawrect) – the4kman

답변

2

보인다. 가지고있는 이미지를 사용할 수 있지만 흰색보기를 가리고 그 뒤에 파란색보기를 배치하십시오. 또는 투명성을 취소하여 사용중인 이미지 애셋을 조정할 수 있습니다. 또는 코드에서 CoreImage을 사용하면됩니다. 예를 들면 :

func invertMask(_ image: UIImage) -> UIImage? 
{ 
    guard let inputMaskImage = CIImage(image: image), 
     let backgroundImageFilter = CIFilter(name: "CIConstantColorGenerator", withInputParameters: [kCIInputColorKey: CIColor.black]), 
     let inputColorFilter = CIFilter(name: "CIConstantColorGenerator", withInputParameters: [kCIInputColorKey: CIColor.clear]), 
     let inputImage = inputColorFilter.outputImage, 
     let backgroundImage = backgroundImageFilter.outputImage, 
     let filter = CIFilter(name: "CIBlendWithAlphaMask", withInputParameters: [kCIInputImageKey: inputImage, kCIInputBackgroundImageKey: backgroundImage, kCIInputMaskImageKey: inputMaskImage]), 
     let filterOutput = filter.outputImage, 
     let outputImage = CIContext().createCGImage(filterOutput, from: inputMaskImage.extent) else { return nil } 
    let finalOutputImage = UIImage(cgImage: outputImage) 
    return finalOutputImage 
} 
+0

놀라운! 내가 가진 유일한 문제는 imageView가 UIView보다 작아서 마스크가 컷 아웃이있는 거꾸로 된 이미지 만 표시한다는 것입니다. 어떻게 해결할 수 있습니까? –

+1

가장 쉬운 방법은'imageView'의'frame'을 여러분이 마스킹하는 뷰와 같은 크기로 설정하고'imageView'의'contentMode'를'.scaleAspectFill'로 설정하는 것입니다.하지만 어렵습니다 무엇을 해야할지 정확히 알기. 아마도 당신은 당신이하고 싶은 것을 당신의 질문을 업데이트 할 수 있습니다. – beyowulf