多线适合宽度UILabel支持每行最大字体大小和光滑动画

时间:2017-04-05 01:52:16

标签: ios animation uiview uilabel core-text

第一次在这里发帖。我正在研究如何从adobe重新创建Spark Post应用程序中的这个超级光滑的文本容器。

IMAGE: https://i.stack.imgur.com/6auPa.png

VIDEO: https://www.youtube.com/watch?v=SfvkreOo3V0&feature=youtu.be

我已经研究过如何通过迭代不同尺寸来计算容器的最大字体大小的其他答案,直到达到更好的适合度。

但如果仔细观察,情况会有所不同:

  • 正在将文字标记为单词
  • 这些词在某种程度上表现得像容器,UIViews也许?
  • 优雅地为它的新位置增添动画
  • 最大字体大小的计算实时发生!
  • 激活特殊模式,每行扩展为最大字体大小
  • 始终保留给定的容器大小<​​/ li>

我很想听到一些专家的意见。

2 个答案:

答案 0 :(得分:0)

我认为您可以按照以下步骤解决问题

  1. 将文字分解为单词。
  2. 根据矩形的宽度和高度查找每个Word的字体大小 人物数量。

  3. 根据计算身高为每个单词创建标签。

  4. 如果每次矩形宽度高度改变时都这样做,我认为它看起来像动画。

答案 1 :(得分:0)

嘿谢谢你的帮助。

如上所述,解决方案的重要部分是将文本分段并将其放入框中,以便您可以使用:

  

- (CGSize)sizeForText:(的NSString *)文本       withHyperLabel:(TTHyperLabel *)超标记{

CGSize maxSize=CGSizeMake(MAXFLOAT, MAXFLOAT);

NSDictionary *attributes=@{
                           NSFontAttributeName: [UIFont fontWithName:hyperLabel.fontName size:100],

                           };


CGRect textRect = [text boundingRectWithSize:maxSize
                                     options:0
                                  attributes:attributes
                                     context:nil];

return textRect.size; }

棘手的部分是&#34;排序&#34; algorihtm。我最终写了自己的&#34;流体文本容器&#34;算法,它似乎非常接近spark的版本 。 https://www.youtube.com/watch?v=yM13PSLW6Fg&feature=youtu.be

要点是将内盒视为注入容器的液体。如果有任何兴趣,我可以稍后再开源。让我知道!

谢谢!