2014-04-27 6 views
0

은 그냥 NSView의에 부정적인 공간을 제공하는 방법에 대해 궁금해했고 나는 단어에 제대로 설명 할 수 없기 때문에 나는 당신에게 원하는 효과의 사진이 표시됩니다 :NSView의 /의 CALayer는 빼서 마스크

http://s16.postimg.org/lci7s2s8l/stackoverflow_problem.jpg

추가 질문을 두려워하지 마십시오.

미리 감사드립니다. 당신이 채택 할 수 위치 텍스트 더 많은 유연성을 가지고 :

// Setup layer-hosting view. 
NSView *view = [[NSView alloc] initWithFrame:viewFrame]; 
view.wantsLayer = YES; 
view.layer = [CALayer layer]; 
view.layerUsesCoreImageFilters = YES; 

CATextLayer *textLayer = [CATextLayer layer]; 
textLayer.string = @"Masked Text"; 
textLayer.frame = NSRectToCGRect(viewFrame); 
[view.layer addSublayer:textLayer]; 

CALayer *colorLayer = [CALayer layer]; 
colorLayer.backgroundColor = [[NSColor greenColor] CGColor]; 
colorLayer.frame = NSRectToCGRect(viewFrame); 
[textLayer addSublayer:colorLayer]; 

CIFilter *filter = [CIFilter filterWithName:@"CISourceOutCompositing"]; 
[filter setDefaults]; 
colorLayer.compositingFilter = filter; 

업데이트가 같은

CATextLayer 
`-CALayer with desired backgroundColor and CISourceOutCompositing compositingFilter 

대응하는 코드는 같습니다 옵션의

답변

3

하나는 설정에 다음 층 '계층 구조 다음 계층 구조 :

CALayer - this layer should stay empty (let's call it emptyLayer) 
|- CATextLayer 
`- CALayer with CISourceOutCompositing compositingFilter 

이 경우 textLayeremptyLayer보다 작을 수 있으며 원하는 방식으로 배치 할 수 있습니다.

+0

위대한 답변입니다. 마스크를 움직이지 않고 CATextLayer의 텍스트를 아래쪽으로 몇 픽셀 아래로 이동하여 텍스트를 세로로 가운데에 맞출 수있는 솔루션이 있습니까? – wottpal

+0

'textLayer'를 아래로 이동할 수있는 새로운 계층 구조로 답변을 업데이트했습니다. –