Objective c 如何动态放大UILabel(标签和字体大小)?
我现在正在做一个iPhone项目。我想动态放大Objective-C中的UILabel,如下所示: 这怎么可能?我想我必须用CoreAnimation来做,但我没有工作。以下是我尝试的代码:Objective c 如何动态放大UILabel(标签和字体大小)?,objective-c,core-animation,uilabel,Objective C,Core Animation,Uilabel,我现在正在做一个iPhone项目。我想动态放大Objective-C中的UILabel,如下所示: 这怎么可能?我想我必须用CoreAnimation来做,但我没有工作。以下是我尝试的代码: UILabel * fooL = //[…] fooL.frame = CGRectMake(fooL.frame.origin.x, fooL.frame.origin.y, fooL.frame.size.width, fooL.frame.size.height); fooL.font = [
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。请尝试以下方法:
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition
forView:(UIView *)view
cache:(BOOL)cache
参数:
过渡
要应用于视图的转换。UIViewAnimationTransition中描述了可能的值
看法
要将转换应用到的视图
缓存
如果是,视图的前后图像将渲染一次,并用于在动画中创建帧。缓存可以提高性能,但如果将此参数设置为“是”,则在转换期间不得更新视图或其子视图。更新视图及其子视图可能会干扰缓存行为,并导致在动画期间视图内容渲染不正确(或在错误的位置)。必须等到转换结束后才能更新视图
如果否,则必须为变换动画的每一帧更新视图及其内容,这可能会显著影响帧速率
讨论
例如,如果要在转换期间更改视图的外观,请从一个视图翻转到另一个视图,然后使用容器视图(UIView的实例),如下所示:
开始一个动画块。
在容器视图上设置转换。
从容器视图中删除子视图。
将新子视图添加到容器视图。
提交动画块。只需缩放标签,而不是更改字体大小。只需对
UILabel
对象应用仿射变换
CGFloat scaleFactor = 2.0f;
label.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor); // Enlarge by a factor of 2.
按照其他人的建议,使用
transform
属性缩放标签将非常有效。需要记住的一点是,随着标签变大,字体不会增加,而只是呈现的文本,这意味着随着标签变大,它会显得“更模糊”。我更喜欢手动更改框架和字体大小的MakeScale转换。