如何设置UILabel或UITextField文本的大小?

时间:2015-02-25 11:56:18

标签: ios objective-c uilabel core-animation

我在UIView中有一个包含一些默认文本的UITextfield。我想为此textField(以及父UIView)%300的缩放设置动画,然后返回到100%。

我该怎么做?似乎我发现的一切都涉及到hacky图像捕获和CGAffineTransformMakeScale。

我已经花了很多时间来搜索SO,要么是执行起来很困难和/或代价高昂,要么完全无法实现。如果是后者,我不会感到惊讶。 :)

3 个答案:

答案 0 :(得分:2)

您不必从视图中捕获图像,只需使用以下代码在标签上使用缩放变换

[UIView beginAnimations:nil context:nil];
label.transform = CGAffineTransformMakeScale(3.0, 3.0);
[UIView commitAnimations];

但这种方法的唯一问题是文本可能不会显得清晰。

如果您希望缩放UILabel比我建议您使用核心文本框架更清晰。这肯定会帮助您实现目标。

可以找到相同的教程here

答案 1 :(得分:0)

参考:Animations-Explained

ios/documentation/CoreAnimation_guide

CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
animation.keyPath = @"position.x";
animation.values = @[ @0, @10, @-10, @10, @0 ];
animation.keyTimes = @[ @0, @(1 / 6.0), @(3 / 6.0), @(5 / 6.0), @1 ];
animation.duration = 0.4;

animation.additive = YES;

[form.layer addAnimation:animation forKey:@"shake"];

OR

iOS - Animating text size change in UILabel or UITextView?

这可能对您有所帮助:)。

答案 2 :(得分:0)

在Swift 4.1中

使用UIView.animate(withDuration:)对FontSize不起作用。并且使用CGAffineTransform很难管理,并且必须应用于UILabelUITextField,但正如在接受的回复中所述,结果并不清晰。

这是我正在使用的解决方案。

var fontSize: CGFloat = 12.0
Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { (timer) in
    self.font = UIFont(name: "Roboto-Regular", size: fontSize)
    fontSize += 0.5 // Or 0.333 to allow for 3X resolution screens.
    if fontSize > 17.0 {
        timer.invalidate()
    }
}