我正在尝试实现圆环图,但我正在努力防止标签相互重叠。我正在寻找有关避免这种情况的干净解决方案的想法。
段和标签类如下所示:
class Segment {
var index: Double?
var tagText: String?
}
class SegmentTag: UIView {
@IBOutlet var iconView: UIImageView!
@IBOutlet var textLabel: UILabel!
init(text: String?, icon: UIImage?, frame: CGRect) {
...
}
}
在图表类中,段和标签是在draw(_ rect:)中绘制的:
override func draw(_ rect: CGRect) {
for tag in tags {
tag.removeFromSuperview()
}
tags = [UIView]()
let tagSize = CGSize(width: 50, height: 60)
for segment in segments {
// ... Draw each segment
let radius = ...
let angle = ...
let tag = SegmentTag(text: segment.tagText, icon: tagIcon, frame: tagRect)
var tagPoint = CGPoint(x: radius * cos(angle),
y: radius * sin(angle))
var tagRect = CGRect(origin: tagPoint, size: tagSize)
self.addSubview(tag)
tags.append(tag)
}
}
您将如何避免 View 重叠?
最佳答案
首先计算您的各种 SegmentTag
对象的所有点,并将任何点组合在一起,而不是靠得太近而不可见。
将对象分组后的一个选项,显示不同类型的标签,GroupTag
或其他东西,也许里面有 SegmentTag
的计数,可以点击它并弹出一个弹出窗口,其中包含您的 SegmentTag
对象列表。
另一种选择是使用您的 GroupTag
来简单地看起来不同,但显示数据,例如它不会有图像,而是一个值列表。
在我看来,与实际为所有可能的数据集计算非重叠位置相比,这些解决方案更简单、更可靠。
关于ios - 防止 UIView 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849908/