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

时间:2010-03-23 01:40:55

标签: objective-c core-animation uilabel

我目前正在开发一个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];

此代码的问题在于它不会动态更改fontsize。

4 个答案:

答案 0 :(得分:3)

您需要做的就是将仿射变换应用于UILabel对象。

CGFloat scaleFactor = 2.0f;
label.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor); // Enlarge by a factor of 2.

答案 1 :(得分:1)

使用transform属性按其他人的建议缩放标签会很有效。要记住的一件事是,随着标签变大,字体不会增加,而只是渲染文本,这意味着随着变大,它会显得“模糊”。

答案 2 :(得分:0)

试试这个方法:

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

参数: 过渡 要应用于视图的转换。 UIViewAnimationTransition中描述了可能的值。

视图 将转换应用于。

的视图

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

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

讨论 如果要在转换期间更改视图的外观 - 例如,从一个视图翻转到另一个视图 - 然后使用容器视图,UIView的实例,如下所示:

开始动画块。 在容器视图上设置转换。 从容器视图中删除子视图。 将新子视图添加到容器视图中。 提交动画块。

答案 3 :(得分:0)

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