我试图将我从该函数返回的数组中的元素的CGRect信息统一起来。我应该如何只从返回的$PSVersionTable
中取出CGRect
个对象。然后遍历它们并合并它们。最好的方法是什么?
[UITextSelectionRect] struct
答案 0 :(得分:0)
这取决于您“联合起来”的意思。
CGRect
具有union
方法:
let union = rect1.union(rect2)
这将返回一个CGRect
和rect1
紧密结合的>
并集(绿色阴影矩形)包围了两个输入矩形,但包括了两个输入矩形之外的区域。
因此您可以将此联合操作应用于rect2
的数组,如下所示:
CGRect
这将为您提供一个let test = myTextView.selectionRects(for: paragraph.first!.range)
.reduce(CGRect.null) { $0.union($1.rect) }
,它紧密地包围了所有选定的文本,但通常还包围了未选定的区域。
如果您想要一个形状完全包围输入矩形并且不包围输入矩形之外的任何区域,那么您想要的是(几何)并集的“轮廓”输入矩形。通常,该轮廓线不是矩形,因此必须使用CGRect
而不是CGPath
来表示它。
计算一组矩形的轮廓是一个困难得多的问题。幸运的是,我已经在this answer中解决了它。