2014-03-13 47 views
2

我試圖通過使用AVComposition來創建電影生成應用程序,並且在製作標題框時遇到了麻煩。 每一幀實際上是一個calayer和標題層是在其他幀的頂部。CALayer - 如何創建具有純色背景和透明文本的圖像?

標題(文本)需要在黑色背景下透明,以便他們可以在標題文本字母下看到第一個內容框架的某些部分。

我搜索了大部分關於calayer mask的文章,但沒有任何幫助。 我認爲這篇文章(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

該遮罩使用alpha通道來確定要遮罩哪些部分以及要保留哪些部分。但是,您渲染到圖像中的標籤在白色背景上呈現爲黑色文本,因此圖像中沒有透明度。

您還指定了用於渲染圖像的圖形上下文是不透明的,所以即使標籤的背景顏色清晰,也會得到不透明的圖像。

因此,您需要在標籤上設置清晰的背景色,並在創建圖形上下文時通過NO作爲第二個參數。

+0

我試過你的方法,但它顯示出相反的結果 - 即黑色標題和透明背景。但我需要的是透明的標題和黑色背景。 – Alex

+0

所以你的問題不是真正的「CALayer面具不適用於另一個CALayer」。這是「我如何克里斯特一個堅實的背景和透明的文字圖像?」,對嗎? –

+0

也許你是對的。我對我的問題給了錯誤的標題。 – Alex

相關問題