如何设置自定义绘制文本的大小?

时间:2012-09-16 04:59:49

标签: ios core-animation core-graphics core-text

我正在开发一个涉及复杂脚本的教育应用程序,我在其中绘制不同“字母”不同颜色的部分。 UILabel是不可能的,因此我深入研究了Core Text,并且在CALayers中创作了一个令人惊讶的成功绘画字形。

我没有设法做的是设置自定义绘制文本的大小。基本上我在'tiles'(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 个答案:

答案 0 :(得分:0)

好的,这比我想象的容易得多。只需在UIView内的一个CALayer的drawInContext中绘制文本。然后使用transform属性为视图设置动画,文本将根据需要缩小或展开。

注意缩放以使文本不会变得块状。最简单的方法是确保变换比例因子不超过1.换句话说,将UIView的“默认”1:1大小设置为您想要显示它的最大尺寸。