我正在开发一个涉及复杂脚本的教育应用程序,我在其中绘制不同“字母”不同颜色的部分。 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
的边界会发生变化?
答案 0 :(得分:0)
好的,这比我想象的容易得多。只需在UIView内的一个CALayer的drawInContext中绘制文本。然后使用transform属性为视图设置动画,文本将根据需要缩小或展开。
注意缩放以使文本不会变得块状。最简单的方法是确保变换比例因子不超过1.换句话说,将UIView的“默认”1:1大小设置为您想要显示它的最大尺寸。