如何在 iOS-Chart 中获得具有相同 x 点的其他行的 `highlight.xPx` 和 `highlight.yPx`?
How can I get `highlight.xPx` & `highlight.yPx` of the other lines which have same x point in iOS-Chart?
我能够使用 iOS-Charts 在图表上绘制线条。
x 点对于所有线都是通用的,但 y 点不同。
当我在图表周围移动光标时,我希望所有其他圆圈也通过单次拖动移动。
所以当我 select 任何 3 行中的任何一个 x 点时,我也想要其他 2 行的 highlight.xPx
和 highlight.yPx
。
这是一个例子
let dysLineEntries: [ChartDataEntry] = [ChartDataEntry(x: 20.0, y: 120.0),
ChartDataEntry(x: 30.0, y: 100.0),
ChartDataEntry(x: 40.0, y: 130.0)]
let sysLineEntries: [ChartDataEntry] = [ChartDataEntry(x: 20.0, y: 70.0),
ChartDataEntry(x: 30.0, y: 80.0),
ChartDataEntry(x: 40.0, y: 90.0)]
let pulseLineEntries: [ChartDataEntry] = [ChartDataEntry(x: 20.0, y: 90.0),
ChartDataEntry(x: 30.0, y: 80.0),
ChartDataEntry(x: 40.0, y: 70.0)]
所以这就是我尝试使用 Transformer
获取像素点的方法,但它 returns 与我传递给它的坐标相同。
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
let index = Int(entry.x)
if transformer == nil {
transformer = Transformer(viewPortHandler: chartView.viewPortHandler)
}
for (dataSetIndex, dataSet) in chartView.data!.dataSets.enumerated() {
let item = (dataSet as! LineChartDataSet).entries[index]
switch dataSetIndex {
case 0: // dysLineEntries
var point = CGPoint(x: item.xPx, y: item.yPx)
transformer!.pointValueToPixel(&point)
case 1: // sysLineEntries
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
case 2: // pulseLineEntries
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
default:
break
}
}
}
我想在相同的 x 位置移动黄色和红色圆圈以及蓝色圆圈在他们尊重的线上。
基本上我想要像素点,因为我需要将 imageView 定位在所有 3 条线上的中心位置。
我通过创建自己的 Transformer
并将点值转换为像素找到了解决方案。
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
let index = Int(entry.x)
if transformer == nil {
transformer = Transformer(viewPortHandler: chartView.viewPortHandler)
transformer?.prepareMatrixOffset(inverted: false)
transformer?.prepareMatrixValuePx(chartXMin: chartView.chartXMin,
deltaX: CGFloat(chartView.chartXMax-chartView.chartXMin),
deltaY: CGFloat(chartView.chartYMax-chartView.chartYMin),
chartYMin: chartView.chartYMin)
}
for (dataSetIndex, dataSet) in chartView.data!.dataSets.enumerated() {
let item = (dataSet as! LineChartDataSet).entries[index]
switch dataSetIndex {
case 0: // dysLine
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
dysImageView.center = point
case 1: // sys
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
sysImageView.center = point
case 2: // pulse
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
pulseImageView.center = point
default:
break
}
}
}
我能够使用 iOS-Charts 在图表上绘制线条。 x 点对于所有线都是通用的,但 y 点不同。
当我在图表周围移动光标时,我希望所有其他圆圈也通过单次拖动移动。
所以当我 select 任何 3 行中的任何一个 x 点时,我也想要其他 2 行的 highlight.xPx
和 highlight.yPx
。
这是一个例子
let dysLineEntries: [ChartDataEntry] = [ChartDataEntry(x: 20.0, y: 120.0),
ChartDataEntry(x: 30.0, y: 100.0),
ChartDataEntry(x: 40.0, y: 130.0)]
let sysLineEntries: [ChartDataEntry] = [ChartDataEntry(x: 20.0, y: 70.0),
ChartDataEntry(x: 30.0, y: 80.0),
ChartDataEntry(x: 40.0, y: 90.0)]
let pulseLineEntries: [ChartDataEntry] = [ChartDataEntry(x: 20.0, y: 90.0),
ChartDataEntry(x: 30.0, y: 80.0),
ChartDataEntry(x: 40.0, y: 70.0)]
所以这就是我尝试使用 Transformer
获取像素点的方法,但它 returns 与我传递给它的坐标相同。
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
let index = Int(entry.x)
if transformer == nil {
transformer = Transformer(viewPortHandler: chartView.viewPortHandler)
}
for (dataSetIndex, dataSet) in chartView.data!.dataSets.enumerated() {
let item = (dataSet as! LineChartDataSet).entries[index]
switch dataSetIndex {
case 0: // dysLineEntries
var point = CGPoint(x: item.xPx, y: item.yPx)
transformer!.pointValueToPixel(&point)
case 1: // sysLineEntries
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
case 2: // pulseLineEntries
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
default:
break
}
}
}
我想在相同的 x 位置移动黄色和红色圆圈以及蓝色圆圈在他们尊重的线上。
基本上我想要像素点,因为我需要将 imageView 定位在所有 3 条线上的中心位置。
我通过创建自己的 Transformer
并将点值转换为像素找到了解决方案。
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
let index = Int(entry.x)
if transformer == nil {
transformer = Transformer(viewPortHandler: chartView.viewPortHandler)
transformer?.prepareMatrixOffset(inverted: false)
transformer?.prepareMatrixValuePx(chartXMin: chartView.chartXMin,
deltaX: CGFloat(chartView.chartXMax-chartView.chartXMin),
deltaY: CGFloat(chartView.chartYMax-chartView.chartYMin),
chartYMin: chartView.chartYMin)
}
for (dataSetIndex, dataSet) in chartView.data!.dataSets.enumerated() {
let item = (dataSet as! LineChartDataSet).entries[index]
switch dataSetIndex {
case 0: // dysLine
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
dysImageView.center = point
case 1: // sys
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
sysImageView.center = point
case 2: // pulse
var point = CGPoint(x: item.x, y: item.y)
transformer!.pointValueToPixel(&point)
pulseImageView.center = point
default:
break
}
}
}