SwiftUI 精品组件之如何构建多单词词云或标签云(教程含源码)

词云(也称为文本云或标签云)是以不同大小描述的词的集合或集群。提取文本数据中最相关的部分是理想的。

image.png

有很多 GitHub 存储库展示了如何使用 JavaScript、Python 等生成词云。 但是当我在玩 SwiftUI 时。我发现关于它的有用信息并不多。

基本理念

  • 词云由词串的集合构成。
  • 每个单词可能有不同的字体、不同的字体大小,甚至不同的颜色。
  • 每个词不得与其他词重叠。
  • 他们倾向于彼此靠近。

一般的做法是从中心开始,放在第一个字,然后开始把下一个字周围尽可能不重叠以前所有的话。本节中的棘手部分是如何有效地为单词找到正确的位置,我将在稍后介绍。

不满意的方法

几年前,我在从事我的一个业余爱好项目时进行了第一次尝试。我采用的方法是生成一个词云图像,然后将其放入 SwiftUI 视图中。
我(NSString).size(withAttributes attrs:)用来估计字符串的图形大小,在画布中找到一个安全的位置,然后String.draw(in rect:, withAttributes attrs:)用来将每个 String 渲染为基于位图UIGraphic的UIImage. 最后使用 SwiftUIImage(uiImage: )将其放置到位。源代码有点像这样:

var body: some View {
    Image(uiImage: wordCloudImage(words))
        .resizable()

猜你喜欢

转载自blog.csdn.net/iCloudEnd/article/details/132193540