2009-11-13 75 views
8

我一直在试图找出一个体面的方式来平滑地动画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]; 

我得到一个流畅的动画与标签,但是它确实是,它需要重绘图像层为目标大小的方式的标签,并将内容传递给适合当前的动画,然后将其转换为目标矩形。这最终在文本显示中出现了非常奇怪的跳跃。这里有两个图像,显示预动画一下,然后就在动画开始后:

预动画

后期动画

我曾尝试只使用图层动画,但我仍然遇到同样的问题。

所以问题是,我该如何避免这种情况?

感谢您的帮助,
斯科特

+0

这是一个老问题,但我要斗争与完全相同的问题。不知何故,这是不合逻辑的。据我了解的动画方法,你应该能够动画UIView类的大部分属性。但是为什么UILabel的框架属性在动画时比正常的UIView子类有不同的表现。它看起来像UILabel类是忽略大小的动画,只动画了位置变化。这创造了一个看起来很奇怪的动画。如果有人能帮助我,我将不胜感激。 – Chris

回答

0

动画帧没有动画改变字体大小。如果我了解您所看到的行为,我认为您将标签的adjustsFontSizeToFitWidth设置为“True”,以便您看到框架的大小随着字体大小的瞬时重新调整而变化。

您可能会尝试缩放标签的变换,以便同时对框架和字体进行缩放。

+0

其实并非如此。 adjustFontSizeToFitWidth没有在这里设置,我实际上*不*试图改变字体大小,只是框架 - 这是黄色的。然而,发生的情况是,目标帧(在这种情况下)“适合”文本,因此它首先重绘该层将其拉伸以适应原始帧,然后将其缩小。这就是为什么它看起来很奇怪。 –

+0

然后不确定。它是一个有趣的问题。我会看看我今天晚些时候是否能重现它。我很好奇自己。 – TechZen

30

Hooray回答了一个为期两年的问题,但我找到了答案。在Interface Builder或代码中,更改标签的contentMode属性。你的似乎是在scaleToFill;请尝试leftright

+1

如果可以的话,我会用100来解答这个问题! (它有时会跳,但没关系) – Ariel

+0

这不起作用! –

+0

根据您需要的确切动画,TopLeft/Right或BottomLeft/Right可能是您需要的正确contentMode。 – CedricSoubrie

7

为了扩大对@ cliclcly的回答是:从UILabel的文档的概述:UILabel类的

默认内容模式是 UIViewContentModeRedraw。每当边界矩形更改时,此模式将导致视图重绘其 内容。您可以通过修改 类的继承的contentMode属性来更改 此模式。

从UIView的的contentMode属性的文档:

此属性的默认值是UIViewContentModeScaleToFill。

默认情况下,UILabel的行为与其他UIViews行为不同,因为它们的contentMode属性默认是不同的。

-3

只需关闭标签的自动布局即可。

在Xcode中,单击标签,然后在属性窗格中,取消选中自动布局选项

5

我发现的UILabel帧动画怪异 - 他们的大小立刻设置为最终大小和文本将呈现该尺寸。之后,只有位置改变是动画的,这意味着如果目标尺寸是(0,0),则标签立即消失。 为了避免这种限制,我将标签放置在剪辑子视图的相同大小的视图内,禁用了标签的自动调整大小,并且我为标签的超级视图制作动画,而不是标签本身。 最终的结果是,标签框架始终是完全动画的,但包含的文本不会以例如不同的字体大小重新呈现,也不会进行文本截断更改。 它仍然不完美,但它适合我的目的。

初步框架:

initial frame

在动画:

During animation

动画结束:

Animation ended

+0

我不敢相信我从来不知道这个UILabels。但是你帮我解决了一个让我完全陷入困境的问题 - 谢谢! – Echelon