2012-09-16 51 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大小设置为您想要显示的最大大小。

相关问题