Animating UILabel size decrease

后端 未结 3 1356
无人及你
无人及你 2020-12-19 04:01

When increasing the height of label, everything is fine and smooth. When decreaseing, the label is instantly changing the size then repositioning with animation.

<         


        
相关标签:
3条回答
  • 2020-12-19 04:36

    Use a CGAffineTransform to do this.

    [UIView animateWithDuration:1.0 animations:^{
        // Scale down 50%
        label.transform = CGAffineTransformScale(label.transform, 0.5, 0.5);
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:1.0 animations:^{
            // Scale up 50%
            label.transform = CGAffineTransformScale(label.transform, 2, 2);
        }];
    }];
    
    0 讨论(0)
  • 2020-12-19 04:37

    The issue is that the UILabel redraws itself as soon as its size changes. (It can't redraw every frame of the animation because text rendering happens on the CPU, not the GPU where UIView animations run.) You can keep it from redrawing by changing the label's contentMode property to, e.g., UIViewContentModeCenter.

    0 讨论(0)
  • 2020-12-19 04:43

    I think what you are wanting to change is the bounds, rather than the frame. From the docs:

    "The bounds rectangle determines the origin and scale in the view’s coordinate system within its frame rectangle and is measured in points. Setting this property changes the value of the frame property accordingly." - UIView Class; bounds property

    Try something like:

    - (void)animate:(id)sender
    {
        ...
        CGRect newBounds = testLabel.bounds;
        newBounds.size.height += 50;
        testLabel.bounds = newBounds;
        ...
    }
    
    0 讨论(0)
提交回复
热议问题