2012-09-16 48 views
0

我正在研究一個涉及複雜腳本的教育應用程序,其中我繪製了不同'字母'不同顏色的部分。 UILabel是不可能的,所以我深入研究了Core Text,並且在CALayers中獲得了非常成功的繪製字形。如何動畫自定義繪製文本的大小?

我沒有設法做的是動畫我的自定義繪製文本的大小。基本上我有'瓷磚'(CALayers)的文字在屏幕上移動。移動是可以的,但現在我想放大用戶按下的那些。

我的想法是嘗試緩存「全分辨率」圖塊,然後在圖像邊界動畫期間將其繪製成比例。到目前爲止,我已經嘗試繪製和緩存,然後重新繪製以下列方式這樣的瓷磚:

UIGraphicsBeginImageContext(CGSizeMake(50, 50)); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

//do some drawing... 

myTextImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

然後在[CALayer drawInContext:(CGContextRef)context], 我打電話[myTextImage drawAtPoint:CGPointZero]

當我運行該應用程序時,控制檯顯示<Error>: CGContextDrawImage: invalid context 0x0。同時,我可以完美地繼續使用相同的方法在context中繪製文本,即使在記錄錯誤之後。

所以我有兩個問題:(1)爲什麼這不工作?我應該用CGBitmap代替嗎? 更重要的是:(2)解決整體問題是否有更明智的方法?也許將我的文本存儲爲路徑,然後以某種方式讓CAAnimation以不同的比例繪製它,因爲封閉的CALayer的邊界發生了變化?

+1

嘗試按上下文來解決'無效上下文0x0'像這樣'UIGraphicsPushContext(context);' – Scar

+0

@Scar ...謝謝,這個固定的問題#(1)。至於#(2)我將使用緩存的CGLayer與UIImage進行比較...... – Merk

回答

0

好的,這比我想象的要容易得多。只需在UIView內的drawInContext:中繪製一個CALayer的文本即可。然後使用transform屬性爲視圖添加動畫,並且文本將隨意縮小或展開。

只要注意縮放,使文本不會塊。最簡單的方法是確保變換比例因子不超過1.換句話說,將UIView的「默認」1:1大小設置爲您想要顯示的最大大小。

相關問題