Sco*_*tle 9 animation cocoa-touch uilabel
我一直试图想出一个很好的方法来平滑地动画UILabel上的帧大小变化,而不需要一个奇怪的起始跳转重绘.默认情况下,当我做这样的事情时:
// Assume myLabel frame starts as (0, 0, 100, 200)
[UIView beginAnimations:@"myAnim" context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:1.0];
myLabel.frame = CGRectMake(0.0, 0.0, 50, 100);
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
我得到了一个带有标签的平滑动画,但是它的方式是它将重绘的图像层用于标签的目标大小,并将内容拉伸以适应当前的动画然后动画到目标矩形.这最终会在文本显示中出现非常奇怪的跳跃.这里有两个图像显示动画前的外观,然后在动画开始后:
预动画

后期动画

我试图仅使用图层来设置动画,但我仍然遇到同样的问题.
所以问题是,我该如何避免这种情况?
谢谢你的帮助,
斯科特
小智 36
万岁回答了两年的死亡问题,但我找到了答案.在Interface Builder或代码中,更改contentMode标签的属性.你似乎已经开始了scaleToFill; 尝试left或right.
要扩展@ cliclcly的答案:来自UILabel文档概述:
UILabel类的默认内容模式是UIViewContentModeRedraw.此模式会导致视图在每次边界矩形更改时重绘其内容.您可以通过修改类的继承的contentMode属性来更改此模式.
从UIView的contentMode属性的文档:
此属性的默认值为UIViewContentModeScaleToFill.
UILabels默认情况下的行为与其他UIViews不同,因为默认情况下它们的contentMode属性不同.
我发现UIlabel框架动画很奇怪 - 它们的大小立即设置为最终大小,文本呈现为该大小.之后,只有位置更改是动画的,这意味着如果目标大小为(0,0),则标签会立即消失.为了避免这种限制,我将标签放在一个大小与视图子视图相同的视图中,禁用了标签的自动调整,我正在为标签的超视图而不是标签本身设置动画.最终结果是标签框架在整个过程中都是完全动画的,但是所包含的文本不会使用不同的字体大小重新渲染,也不会更改文本截断.它仍然不完美,但它适合我的目的.
初始框架:

动画期间:

动画结束:

| 归档时间: |
|
| 查看次数: |
7316 次 |
| 最近记录: |