2011-12-08 3 views
0

이미지 (가능한 모든 모양)를 기반으로 마스크를 만들어야합니다. 내가 필요로 :CGPath 이미지

  1. 적절한 마스크
  2. 전화 [UIView.layer에 setMask : 위의 층]으로 CGPath와의 CALayer를 만들기

그래서 주요 큰 문제는 검은 색에 따라 CGPath을 설정하는 방법입니다 - 흰색 이미지? 아니면 마스크 에서 직접 가져올 수 있습니까?

감사합니다. 마스크의


예 이미지 : example mask

답변

5

당신은 알파 채널 이미지를 만들어야합니다. CALayer의 마스크 특성 문서에 따르면

알파 채널 층의 배경 및 여과 배경으로 레이어의 내용을 합성 한 결과와 을 선택 마스크로 사용되는 선택적 층.

그래서 마스크로 사용하려는 레이어에는 알파 채널이 필요합니다. 이미지를 사용하여 이러한 채널을 만들려면 이미지 자체에 알파 채널이 있어야합니다. 따라서 위에 게시 한 흑백 마스크를 이미지의 알파 채널에 복사해야합니다. 특정 이미지의 색상은 무시됩니다. 그런 다음 이미지를로드하고 레이어 내용을 설정 한 다음 해당 레이어를 다른 레이어 마스크로 사용합니다. 이 주변의 뭔가 :

UIImage* imageWithAlphaChannel = [UIImage imageNamed:@"alpha.png"]; // Won't work with jpg 
CGImageRef cgImageWithAlpha = [imageWithAlphaChannel CGImage]; 
CALayer* maskingLayer = [CALayer layer]; 
maskingLayer.contents = (id)cgImageWithAlpha; 

//Assume viewToBeMasked is the view, who's layer needs to be masked 
CALayer* layerToBeMasked = viewToBeMasked.layer; 
layerToBeMasked.mask = maskingLayer; 
maskingLayer.frame = layerToBeMasked.bounds; 
//Alternativly use: viewToBeMasked.layer.mask = maskingLayer; 

브라우저에서 인코딩 된 착오가 생겼다.

모든 마스크를 png 파일로 저장하면 앱 크기가 커질 수 있습니다. 마스크를 jpg로 저장하고 CoreGraphics 드로잉 기능을 사용하여 런타임에 적절한 알파 버전을 만들 수 있습니다. 그러나 그것은 또 다른 질문입니다 .....

+0

그건 멋지 네요! 나는 너에게 또 하나의 질문이있다. 마지막 단계를 만들고 UIView의 레이어를 layerToBeMasked로 설정하는 방법. [view.layer addSublayer : layerToBeMasked] 설정이 작동하지 않습니다. 난 layerToBeMasked = view.layer 할려고했지만 둘 다 작동하지 않습니다. 내가 작동하도록 여분의 것을해야합니까? 감사! – Piotr

+1

여기에 하위 계층을 설정할 필요가 없습니다. 레이어의 마스크 속성을 설정합니다. 위의 코드를 더 잘 반영하도록 업데이트했습니다. – tonklon

+0

어떻게 든 나에게 도움이되지 못했습니다. 가면을 설정해야했습니다. 레이어의 프레임과 이제 괜찮습니다. 다시 한 번 감사드립니다! – Piotr

3

매우 유사한 문제 나는 뭔가에 내가 다시 잠시했다 생각합니다. 기본적으로 Adobe Illustrator에서 파일을 내 보낸 다음 루틴을 실행하여 해당 파일을 CGPath로 변환해야합니다.

당신은이 질문에 대한 내 대답에 그것을 할 방법을 찾을 수 있습니다 :

How to detect/handle touch events on curved regions?

+0

감사합니다 ..하지만 uiview의 마스크로 이미지를 설정할 수 있습니까? – Piotr

+0

마스크를 말하면 "흑백 이미지 버전"을 의미합니까? –

+0

예. 나는 그 이미지를 어떤 방식 으로든 설명 될 수 있도록 나 자신으로 창조 할 것이다. 기본적으로 내가 뭘 하려는지 [view.layer setMask : 이미지가 포함 된 _CALayer 또는 이미지에서 빌드 된 CALayer_]입니다. 이해할 수 있니? – Piotr