2011-02-16 60 views
0

我需要的是有點難以解釋。讓我們嘗試...可可不同的文字顏色在同一個字母

我需要在我的應用程序中編寫文本,並且文本會從左向右逐漸更改顏色。 我想我可以說這和你在卡拉OK屏幕上看到的效果類似。

例如,我用藍色繪製文本行,然後逐漸使用計時器,從左至右的顏色變爲紅色。但我不希望它逐字逐句地改變,而是逐漸改變。這需要在某個時刻,同一封信可以有一部分用紅色表示,一部分用藍色表示。

我一直在閱讀關於核心繪圖,也許這是解決方案,但我真的不知道如何開始。我正在考慮使用背景圖層,並在它的頂部繪製一個透明的文字(只有邊框),但我不知道如何去做。

任何想法,將不勝感激。

回答

3

你或許可以用CGLayer來完成這項工作。

最重要的是,您應該能夠使用您現有的代碼將字符(或其他任何東西)繪製到CGLayer中。

下面是一些粗糙的代碼:

// first, make a CGLayer... 

CGLayerRef yourDrawingPad = 
    CGLayerCreateWithContext(UIGraphicsGetCurrentContext(),etc.. 
CGContextRef yourRef = CGLayerGetContext(yourDrawingPad); 

// now, draw to yourRef .. draw your various typography (or anything) 
// use your current drawing code. 

// all done drawing, now make an image mask... 

UIGraphicsBeginImageContext(CGLayerGetSize(yourDrawingPad)); 
    CGContextRef temp = UIGraphicsGetCurrentContext(); 
    CGContextDrawLayerAtPoint(temp, CGPointZero, yourDrawingPad); 
    CGImageRef anAlphaMask = CGBitmapContextCreateImage(temp); 
UIGraphicsEndImageContext(); 

你現在有一個很好的面膜,你可以使用:

CGContextSaveGState(UIGraphicsGetCurrentContext()) ... 
CGContextClipToMask(UIGraphicsGetCurrentContext(), self.frame, anAlphaMask); 

所以只是掩蓋它在一個梯度的圖像,或任何作品。

(可以想象:也許你將不得不建立一個位圖圖像屏幕外,然後用其作爲面罩)

腳註:不要忘了,很可能你將不得不倒掛畫了!幸運的是,這很容易處理。它說:「現在,提請yourRef」繪圖保存你的狀態之前,並添加兩行代碼:

CGContextTranslateCTM(refForMask, 0, self.frame.size.height); 
CGContextScaleCTM(refForMask, 1.0, -1.0); 

希望它可以幫助

+0

很奇怪。我發佈了一條評論,但缺失。也許我沒有正確添加它。所以這裏再次。我會嘗試兩種方法。謝謝您的幫助。 – Ernesto 2011-02-20 15:02:16

2

我對如何做到這一點有一個想法,但它有點複雜。你可以創建一個NSBezierPath併爲每個字符添加字形。然後,將其設置爲剪輯並繪製NSGradient。然後你只需要改變NSGradient中顏色的偏移來移動顏色。

+0

我會嘗試。謝謝。 – Ernesto 2011-02-20 15:03:07

相關問題