如何动态扩大UILabel(标签和字体大小)?

7
我目前正在进行一个iPhone项目。我想在Objective-C中动态地扩大UILabel,就像这样:

alt text http://img268.imageshack.us/img268/9683/bildschirmfoto20100323u.png

如何做到这一点?我以为我必须使用CoreAnimation,但是它没有起作用。这是我尝试过的代码:
UILabel * fooL = //[…]
fooL.frame = CGRectMake(fooL.frame.origin.x, fooL.frame.origin.y, fooL.frame.size.width, fooL.frame.size.height);   
fooL.font = [UIFont fontWithName:@"Helvetica" size:80];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.5];
[UIView setAnimationBeginsFromCurrentState:YES];
fooL.font = [UIFont fontWithName:@"Helvetica" size:144]; //bigger size
fooL.frame = CGRectMake(20 , 44, 728, 167); //bigger frame
[UIView commitAnimations];

这段代码的问题在于它不能动态地改变字体大小。
4个回答

4
你只需要对 UILabel 对象应用仿射变换即可。
CGFloat scaleFactor = 2.0f;
label.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor); // Enlarge by a factor of 2.

我更喜欢使用MakeScale转换而不是手动更改框架和字体大小。 - Mugunth

1

根据其他人建议使用transform属性来缩放标签会很好地工作。需要记住的一件事是,随着标签变得越来越大,字体并没有增加,只有呈现的文本增加了,这意味着随着标签变得越来越大,它看起来会变得“模糊”。


0

尝试这个方法:

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition 
                       forView:(UIView *)view 
                         cache:(BOOL)cache

参数: transition 要应用于视图的过渡效果。可能的值在UIViewAnimationTransition中有描述。

view 要应用过渡效果的视图。

cache 如果为YES,则视图的前后图像将被渲染一次并用于创建动画中的帧。缓存可以提高性能,但如果将此参数设置为YES,则不能在过渡期间更新视图或其子视图。更新视图及其子视图可能会干扰缓存行为,并导致视图内容在动画期间呈现不正确(或在错误位置)。必须等到过渡结束后才能更新视图。

如果为NO,则必须为过渡动画的每个帧更新视图及其内容,这可能会明显影响帧速率。

讨论 如果要在过渡期间更改视图的外观,例如从一个视图翻转到另一个视图,则可以使用容器视图(UIView的实例)如下:

开始一个动画块。 在容器视图上设置过渡效果。 从容器视图中删除子视图。 将新的子视图添加到容器视图中。 提交动画块。


0

不要更改字体大小,而是缩放标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接