UILabel字体动态变化的动画效果

10

我需要一种可以动画改变UILabel字体的方法。我看到很多方法可以动画地改变字体大小,但我需要一种可以改变其类型的方法(例如从粗体到细体)。

5个回答

14

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

如果你可以通过逐渐增加大小(10.1、10.2、10.3等)从10号字体过渡到11号字体,那么“介于Helvetica Neue和Helvetica Neue Bold之间的45%的东西”就不存在。

最接近的方法是在个别字母的CG路径之间进行变形,但这需要使用Core Text进行大量工作。

与此同时,我建议您执行简单的淡入淡出效果。

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


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显示不同的字体)

输入图片描述


-1
您可以在动画之后像这样设置新的大小并更改标签。
[UIView animateWithDuration:0.9 animations:^{
        label.frame = (CGRect){ CGPointMake(51, 150), label.bounds.size };
    } completion:^(BOOL finished) {
        label.font=[UIFont boldSystemFontOfSize:15];
        // etc.
    }];

愉快编程!


2
并不是这样的..我想要制作一个字体过渡动画..而这只是在动画结束时改变了它。 - Chiko

-2
使用UIView animateWithDuration。在代码块内更改字体类型(加粗)。

-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];
                     //}
                 }];

}

这段代码可能会回答你的问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接