【问题标题】:iOS - Animating text size change in UILabel or UITextView?iOS - 在 UILabel 或 UITextView 中动画文本大小变化?
【发布时间】:2011-03-23 13:04:15
【问题描述】:

在显示文本块的应用程序中,当设备转为横向时,我的字体大小会增加。我不喜欢它是如何完成整个动画然后突然跳到新尺寸的,所以我想在旋转过程中对尺寸变化进行动画处理。

我在某处读到,在 UIView 动画块中进行此更改不起作用,因为字体属性不可动画,那么我有什么选择呢?

对于我的具体实现,我不是简单地按原样缩放UILabel/UITextView;框的边界比字体大小增加更多(按比例),因此文本中将重新流动。那个我能接受。

编辑:我可以简单地缩放UITextView

另外,我正在考虑手动“动画化”它:我有一种方法可以布置我的视图并调整字体大小。如果我知道旋转何时开始以及动画的持续时间,我可以对其进行计时,以便在动画中间呈现一两个中间字体大小。任何有关获得这些的帮助将不胜感激。

【问题讨论】:

  • 你实现了你想做的事情吗?你能接受其中一个答案来结束这个问题吗?

标签: iphone ios animation text-size


【解决方案1】:

在调用didAnimateFirstHalfOfRotationToInterfaceOrientation: 时更改字体大小。 这样,一旦旋转完成,用户就不会看到更改。当旋转发生时,很难看到字体大小发生变化!

【讨论】:

  • 除非您启用两步动画,否则不会调用该方法,这需要我真的想避免进入的额外手动内容。不过好主意!
【解决方案2】:

一种选择是淡出旧文本,更改字体大小,然后将其淡入。字体属性可能不是可动画的,但 alpha 是。由于 alpha 是 UIView 的属性,因此您可以以相同的方式处理所有包含文本的视图:UILabel、UITextView 等。它看起来也不错。

【讨论】:

    【解决方案3】:

    一种方法可以是:

    1. 创建 CAKeyframeAnimation
    2. 使用一组 CATransform3D 对象定义您希望在该动画期间实现的缩放和旋转
    3. 将这些变换添加到您的关键帧动画中
    4. addAnimation 消息发送到您的标签层对象:[[label layer] addAnimation]

    这是一个代码示例,假设 yourLabel 是您想要缩放和旋转的 UILabel

    CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    
    CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y
    CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font
    
    [scale setValues:[NSArray arrayWithObjects:
    [NSValue valueWithCATransform3D:CATransform3DIdentity],
    [NSValue valueWithCATransform3D:rotationScaled],
    nil]];
    
    // set the duration
    [scale setDuration: 1.0];
    
    // animate your label layer
    [[yourLabel layer] addAnimation:scale forKey:@"scaleText"];
    

    例如,这通常是文本弹跳的动画方式。

    您可以在设备开始旋转时启动此操作,并在设备旋转完成后检索动画,以便您可以使用适当的比例/位置更新标签。

    您将需要调整以找到合适的时间和轮换。

    【讨论】:

    • @kelso。你有没有想过/尝试一下?
    • 要获得正确的时间和正确的旋转,您可以使用上述方法:willAnimateRotationToInterfaceOrientation:duration:
    • @kelso.b。你有没有设法做到你想要达到的目标?接受一个很好的答案怎么样,这样你的问题就可以结束了?干杯。米克尔
    【解决方案4】:

    如果我知道轮换的时间 开始,以及持续时间 动画...

    有趣的是,您应该提到这一点。就在动画开始之前,您的视图控制器将收到一条willAnimateRotationToInterfaceOrientation:duration: 消息,为您提供所需的确切信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多