【问题标题】:How to animate size of custom drawn text?如何为自定义绘制文本的大小设置动画?
【发布时间】:2012-09-16 04:59:49
【问题描述】:

我正在开发一个涉及复杂脚本的教育应用程序,我在其中绘制不同“字母”不同颜色的部分。 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 的边界变化以不同的比例绘制它?

【问题讨论】:

  • 尝试推送上下文来解析invalid context 0x0 这样UIGraphicsPushContext(context);
  • @Scar...谢谢,已解决的问题 #(1)。至于#(2) 我将使用缓存的 CGLayer 与 UIImage 进行比较...

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多