代码之家  ›  专栏  ›  技术社区  ›  kbanman

iOS-在uilabel或uitextview中设置文本大小更改的动画?

  •  8
  • kbanman  · 技术社区  · 14 年前

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

    我在某个地方读到,把这个零钱 UIView 动画块不起作用,因为字体属性不可设置动画,所以我的选项是什么?

    对于我的具体实现,我不是简单地扩展 UILabel / UITextView 原样,框的边界比字体大小增加更多(成比例地),因此文本中会重新流动。我没意见。

    编辑:我可以简单地缩放 UITExtVIEW .

    另外,我正在考虑手动“设置动画”:我有一个方法,可以设置视图的布局并根据字体大小进行调整。如果我知道旋转将在何时开始,以及动画的持续时间,我就可以给它计时,使它在动画中间呈现一个或两个中等大小的字体。如果能帮上忙,我们将不胜感激。

    4 回复  |  直到 10 年前
        1
  •  6
  •   Daniel T.    14 年前

    如果我知道旋转的时间 开始,以及 动画。。。

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

        2
  •  6
  •   Caleb    14 年前

    一个选项是淡出旧文本,更改字体大小,然后淡入。字体属性可能不可设置动画,但alpha为。因为alpha是uiview的一个属性,所以您可以用同样的方式处理所有带文本的视图:uilabel、uiextview等。它看起来也不错。

        3
  •  4
  •   William Niu    13 年前

    一种方法是:

    1. 创建cakeyframeAnimation
    2. 使用一组CatTransform3D对象定义要在动画期间实现的缩放和旋转
    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"];
    

    例如,这通常是一个围绕文本跳动的动画。

    你可以在设备开始旋转时启动它,在完成旋转后检索动画,这样你就可以用适当的比例/位置更新标签。

    你需要调整以找到合适的时间和旋转。

        4
  •  1
  •   Benjamin Deming    14 年前

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