10

我需要一种用动画改变 UILabel 字体的方法。我看到了很多方法来动画字体大小的变化,但我需要一种方法来改变它的类型(例如粗体字)。

4

5 回答 5

14

两个字体面之间没有离散映射(在数学意义上)。

如果您可以通过渐变 (10.1, 10.2, 10.3, ...) 从尺寸 10 变为尺寸 11,则不存在“在 helvetica neue 和 helvetica neue bold 之间的 45%”之类的东西。

您可以做的最接近的方法是在单个字母的 CGPath 之间变形,但这涉及到 CoreText 的大量工作。

同时,我只是建议你执行一个简单的淡入淡出。

也许在未来(眨眼,眨眼)会有一些框架来帮助你完成这类任务。

于 2013-06-27T11:35:15.573 回答
5

这可能对搜索此答案的人有所帮助:

要从一种字体淡入到另一种字体,请执行以下操作:

UIView.transition(with: label, duration: 0.25, options: .transitionCrossDissolve, animations: {
    self.label.font = UIFont.systemFont(ofSize: 15)
}) { isFinished in }

有文字时转到:

UIView.transition(with: label, duration: 0.25, options: .transitionCrossDissolve, animations: {
    self.label.font = UIFont.boldSystemFont(ofSize: 15)
}) { isFinished in }

(Gif 显示不同的字体)

在此处输入图像描述

于 2019-03-09T10:16:02.013 回答
-1

您可以设置新尺寸并在这样的动画之后更改标签。

[UIView animateWithDuration:0.9 animations:^{
        label.frame = (CGRect){ CGPointMake(51, 150), label.bounds.size };
    } completion:^(BOOL finished) {
        label.font=[UIFont boldSystemFontOfSize:15];
        // etc.
    }];

享受!!

于 2013-06-27T11:36:37.600 回答
-2

使用 uiview animateWithDuration。在块内更改字体类型(粗体)

于 2013-06-27T11:34:53.233 回答
-3
if(font_index == 8)
    font_index = 0;

[UIView animateWithDuration:2
                      delay:0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{


                     UIFont* newfont = Nil;
                     if(font_index % 2 != 0)
                     {
                         newfont = [UIFont fontWithName:self.fontNames[font_index] size:8];

                     }
                     else
                     {
                         newfont = [UIFont fontWithName:self.fontNames[font_index] size:20];

                     }
                     self.keyButton.titleLabel.font = newfont;

                 }
                 completion:^(BOOL finished){
                    // if(finished)
                    // {
                         font_index++;
                         [self fontIt];
                     //}
                 }];

}

此代码可能会回答您的问题

于 2014-02-23T12:43:39.050 回答