【问题标题】:Unite CGRects from Array联合数组中的 CGRects
【发布时间】:2019-06-15 03:32:31
【问题描述】:

我正在尝试将 CGRect 信息与我从该函数接收的数组中的元素合并。我应该如何从它返回的[UITextSelectionRect] struct 中只取出CGRect 对象。然后循环它们并将它们联合起来。最好的方法是什么?

let test = myTextView.selectionRects(for: paragraph.first!.range)

【问题讨论】:

标签: ios swift


【解决方案1】:

这取决于你所说的“联合他们”是什么意思。

CGRect 有一个union 方法:

let union = rect1.union(rect2)

这会返回一个CGRect,它紧紧地包围了rect1rect2

联合体(带阴影的绿色矩形)包围了两个输入矩形,但包括任一输入矩形之外的区域。

所以你可以像这样将这个联合操作应用于CGRect 的数组:

let test = myTextView.selectionRects(for: paragraph.first!.range)
    .reduce(CGRect.null) { $0.union($1.rect) }

这会给你一个CGRect,它紧紧地包围了所有选定的文本,但通常也会包围未选择的区域。

如果您想要一个完全包围输入矩形并且不包围输入矩形之外的任何区域的形状,那么您需要所谓的(几何)并集的“轮廓”输入矩形。通常,此轮廓不是矩形,因此您必须使用CGPath 而不是CGRect 来表示它。

计算一组矩形的轮廓是一个更难的问题。好在我已经在this answer解决了。

【讨论】:

  • 嗨,罗伯!这就是我想要的。我刚刚尝试过,但收到一个错误“表达式类型在没有更多上下文的情况下不明确”,它是联合部分的基础。我应该如何解决这个问题?
  • 我已经更正了我的答案。 selectionRects 返回的数组是[UITextSelectionRect],而不是[CGRect]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
相关资源
最近更新 更多