我目前正在开发一个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。
答案 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)
只需缩放标签,而不是更改字体大小。