2014-03-13 10 views
2

AVComposition을 사용하여 동영상 생성 응용 프로그램을 만들고 제목 프레임을 만드는 데 문제가 있습니다. 각 프레임은 실제로 calayer이고 타이틀 레이어는 다른 프레임 위에 있습니다.CALayer - 단색 배경과 투명한 텍스트로 이미지를 만들려면 어떻게해야합니까?

제목 (텍스트)은 제목 텍스트 문자 아래 첫 번째 내용 프레임의 일부를 볼 수 있도록 검정색 배경으로 투명해야합니다.

나는 선수 마스크에 관한 기사를 대부분 찾았지만 아무런 도움이되지 않았습니다. 이 기사 (How to make only the part covered by text/title transparent in a UIView in IOS)는 Dave의 방식처럼 도움이되고 코딩되었지만 흰색 화면 만있는 것으로 알고 있습니다.

// create UILabel from the title text 
CGRect rectFrame = CGRectMake(0, 0, videoSize.width, videoSize.height); 
UILabel *lbTitle = [[UILabel alloc] initWithFrame:rectFrame]; 
lbTitle.text = self.titleText; 
lbTitle.font = [UIFont fontWithName:@"Helvetica" size:60]; 
lbTitle.textColor = [UIColor blackColor]; 
lbTitle.backgroundColor = [UIColor whiteColor]; 

// get title image and create mask layer 
UIGraphicsBeginImageContextWithOptions(lbTitle.bounds.size, TRUE, [[UIScreen mainScreen] scale]); 
[lbTitle.layer renderInContext:UIGraphicsGetCurrentContext()]; 
CGImageRef viewImage = [UIGraphicsGetImageFromCurrentImageContext() CGImage]; 
UIGraphicsEndImageContext(); 

CALayer *maskLayer = [CALayer layer]; 
maskLayer.contents = (__bridge id)viewImage; 
maskLayer.frame = rectFrame; 

// create title background layer and set mastLayer as mast layer of this layer 
// this layer corresponds to "UIView's layer" in Dave's method 
CALayer *animatedTitleLayer = [CALayer layer]; 
animatedTitleLayer.backgroundColor = [UIColor whiteColor].CGColor; 
animatedTitleLayer.mask = maskLayer; 
animatedTitleLayer.frame = rectFrame; 

... 
[view.layer addSubLayer:animatedTitleLayer]; 

가 여기에 내가 제목 배경 (검은 색)으로 animatedTitleLayer을 사용하지만, 내가 볼은 흰색 화면입니다 : 여기

내가 한 일이다.

누구든지 나를 도와 줄 수 있습니까? 미리 감사드립니다.

+0

마스크 레이어를 추가하지 않으셨습니까? '[self.view.layer addSublayer : animatedTitleLayer]' – Mani

+0

죄송합니다. 그 줄을 쓰지 못했습니다. 그것은 이미 거기에 있으며 편집했습니다. – Alex

답변

1

마스크는 알파 채널을 사용하여 마스크 할 부분과 유지할 부분을 결정합니다. 그러나 이미지에 렌더링하는 레이블은 흰색 배경에 검은 색 텍스트로 렌더링되므로 이미지에 투명도가 없습니다.

이미지를 렌더링하는 데 사용하는 그래픽 컨텍스트가 불투명하도록 지정 했으므로 레이블의 배경색이 선명하더라도 불투명 한 이미지를 얻을 수 있습니다.

그래야 그래픽 컨텍스트를 만들 때 레이블에 배경색을 명확하게 설정하고 NO을 두 번째 인수로 전달해야합니다.

+0

귀하의 방법을 시도했지만 반대의 결과 - 예 : 검은 색 제목 및 배경이 보이지 않습니다. 하지만 내가 필요한 것은 투명한 제목과 검은 배경입니다. – Alex

+0

그래서 질문은 실제로 "CALayer 마스크가 다른 CALayer에서 작동하지 않습니다". "단색 배경과 투명한 텍스트로 이미지를 크리에이트하려면 어떻게해야합니까?", 맞습니까? –

+0

아마도 당신이 옳습니다. 나는 내 질문에 잘못된 제목을 주었다. – Alex