动画UILabel大小减少

Pab*_*blo 9 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];  
Run Code Online (Sandbox Code Playgroud)

我试过用UIView代替UILabel,当然UIView没有这样的问题.

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

这是一个展示所述问题的最小项目.下载

dav*_*den 15

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


Mat*_*ler 2

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

\n\n
\n

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

\n
\n\n

尝试类似的方法:

\n\n
- (void)animate:(id)sender\n{\n    ...\n    CGRect newBounds = testLabel.bounds;\n    newBounds.size.height += 50;\n    testLabel.bounds = newBounds;\n    ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n