如何为 UILabel 或 UITextField 文本的大小设置动画?
How can I animate the size of UILabel or UITextField text?
我在 UIView 中有一个 UITextfield,其中包含一些默认文本。我想为这个 textField(连同父 UIView)的缩放设置动画 %300,然后再回到 100%。
我该怎么做?似乎我发现的所有内容都涉及到骇人听闻的图像捕获和 CGAffineTransformMakeScale。
我花了很多时间为此搜索 SO,要么很难 and/or 做起来成本高,要么实施起来非常繁琐。如果是后者,我不会感到惊讶。 :)
您不必从视图中捕获图像,只需使用以下代码在标签上使用缩放变换
[UIView beginAnimations:nil context:nil];
label.transform = CGAffineTransformMakeScale(3.0, 3.0);
[UIView commitAnimations];
但这种方法的唯一问题是文本可能显得不清晰。
如果您希望 UILabel
的缩放比我建议您尝试核心文本框架更清晰。这一定会帮助您实现目标。
可以找到相同的教程 here。
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"];
或
iOS - Animating text size change in UILabel or UITextView?
这可能对你有帮助:)
在Swift4.1
使用 UIView.animate(withDuration:)
不适用于 FontSize。并且使用 CGAffineTransform
很难管理,必须应用于 UILabel
或 UITextField
,但正如接受的回复中所说,结果并不清晰。
这是我正在使用的解决方案。
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()
}
}
我在 UIView 中有一个 UITextfield,其中包含一些默认文本。我想为这个 textField(连同父 UIView)的缩放设置动画 %300,然后再回到 100%。
我该怎么做?似乎我发现的所有内容都涉及到骇人听闻的图像捕获和 CGAffineTransformMakeScale。
我花了很多时间为此搜索 SO,要么很难 and/or 做起来成本高,要么实施起来非常繁琐。如果是后者,我不会感到惊讶。 :)
您不必从视图中捕获图像,只需使用以下代码在标签上使用缩放变换
[UIView beginAnimations:nil context:nil];
label.transform = CGAffineTransformMakeScale(3.0, 3.0);
[UIView commitAnimations];
但这种方法的唯一问题是文本可能显得不清晰。
如果您希望 UILabel
的缩放比我建议您尝试核心文本框架更清晰。这一定会帮助您实现目标。
可以找到相同的教程 here。
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"];
或
iOS - Animating text size change in UILabel or UITextView?
这可能对你有帮助:)
在Swift4.1
使用 UIView.animate(withDuration:)
不适用于 FontSize。并且使用 CGAffineTransform
很难管理,必须应用于 UILabel
或 UITextField
,但正如接受的回复中所说,结果并不清晰。
这是我正在使用的解决方案。
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()
}
}