Я пытаюсь написать текстовые метки на графическом представлении, представляющем множество точек данных (представить линейный граф в Excel).Добавление и удаление NSTextField программно в SWIFT OS X
Я выбираю набор данных с помощью таблицыView. Каждый раз, когда вы выбираете новый набор данных, график перерисовывается.
Я могу нарисовать линейный график, используя пользовательский вид. Нет проблем.
Я могу рисовать текстовые метки с помощью следующей функции вызывается из DrawRect():
func drawDataPointLabels(size: CGSize) { //size is the view.bounds
var dataLabelsArray: [(NSColor, String, NSRect)] = []
// graphDetails contain an array of tuples [(),(),(),()] - this represents one graph type = eg Monthly Fees ** there will be a maximum of 12 items in the array
for graphDetails in graphDetailsArray {
// each dataPoint object is a tuple (graphType: columnLabel: columnColor: columnHeight: columnNumber:) representing one dataPoint
for dataPoint in graphDetails {
let graphHeight = size.height/2
let graphWidth = size.width - graphOrigin.x - rightMargin
let columnAndGapSize = graphWidth/25
let labelX: CGFloat = (graphOrigin.x + columnAndGapSize) + (columnAndGapSize * dataPoint.columnNumber) * 2
let labelY: CGFloat = dataPoint.columnHeight * (graphHeight - topMargin - bottomMargin)
// determine the location and frame for the text label to match dataPoint
let textFrame = NSRect(x: labelX, y: labelY, width: 30, height: 10)
let dataPointTuple = (dataPoint.columnColor, dataPoint.columnLabel, textFrame)
dataLabelsArray.append(dataPointTuple)
}
for dataPoint in dataLabelsArray {
let (color, label, frameRect) = dataPoint
let lblDataPoint = NSTextField(frame: frameRect)
lblDataPoint.stringValue = label
lblDataPoint.backgroundColor = backgroundColor
lblDataPoint.textColor = color
self.addSubview(lblDataPoint)
}
}
}
Однако, я не могу работать, как удалить метки данных, когда представление обновляется и новый набор данных представил. График перерисовывается, но текстовые метки остаются из предыдущего набора данных.
Любые рекомендации/предложения будут оценены.