动画UILabel大小减少

时间:2010-07-21 11:36:48

标签: iphone animation

当增加标签的高度时,一切都很好而且光滑。减少时,标签会立即改变大小,然后用动画重新定位。

@interface
@property (nonatomic, retain) IBOutlet UILabel *explanationLabel;

@implementation
CGRect frmExpl = explanationLabel.frame;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.75];

frmExpl.size.height -= height;
explanationLabel.frame = frmExpl;

[UIView commitAnimations];  

我尝试用UIView替换UILabel,当然UIView没有这样的问题。

是否有任何特殊的方法来动画UILabel尺寸减小?

这是一个展示所述问题的最小项目。 Download

3 个答案:

答案 0 :(得分:15)

问题是UILabel会在其大小改变后重新绘制。 (它无法重绘动画的每一帧,因为文本渲染发生在CPU上,而不是运行UIView动画的GPU。)您可以通过将标签的contentMode属性更改为例如UIViewContentModeCenter来防止重绘。

答案 1 :(得分:2)

我认为你想要改变的是界限,而不是框架。来自文档:

  

“边界矩形在其框架矩形内确定视图坐标系中的原点和比例,并以磅为单位进行测量。设置此属性会相应地更改框架属性的值。” - UIView类;边界属性

尝试类似:

- (void)animate:(id)sender
{
    ...
    CGRect newBounds = testLabel.bounds;
    newBounds.size.height += 50;
    testLabel.bounds = newBounds;
    ...
}

答案 2 :(得分:2)

使用CGAffineTransform执行此操作。

[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);
    }];
}];