From a12c98b1a5ae3de1810cf9b5ca0da8586809bf57 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sun, 9 Jun 2024 22:13:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D`Tooltip`=E7=9A=84`Cross`?= =?UTF-8?q?=E5=9C=A8=E5=BC=80=E5=90=AF`DataZoom`=E6=97=B6=E6=8C=87?= =?UTF-8?q?=E7=A4=BA=E4=BD=8D=E7=BD=AE=E4=B8=8D=E5=87=86=E7=A1=AE=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/zh/changelog.md | 1 + Runtime/Component/Axis/Axis.cs | 38 +++++++++++++++++++++ Runtime/Component/Axis/AxisHandler.cs | 4 +-- Runtime/Component/Tooltip/TooltipHandler.cs | 2 +- 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index e702171b..0b83b196 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -73,6 +73,7 @@ slug: /changelog ## master +* (2024.06.09) 修复`Tooltip`的`Cross`在`Axis`是类目轴并且开启`DataZoom`的情况下指示位置不准确的问题 * (2024.06.06) 修复`Serie`在`Clone`时动画异常问题 (#320) * (2024.06.04) 修复`Serie`的`state`在代码动态设置时不刷新的问题 * (2024.05.29) 调整`XCharts`在`Hierarchy`视图下的右键菜单到`UI/XCharts`下 diff --git a/Runtime/Component/Axis/Axis.cs b/Runtime/Component/Axis/Axis.cs index f9e6c4a9..3d22b302 100644 --- a/Runtime/Component/Axis/Axis.cs +++ b/Runtime/Component/Axis/Axis.cs @@ -935,5 +935,43 @@ namespace XCharts.Runtime (float)(Math.Abs(context.minValue) * (axisLength / (Math.Abs(context.minValue) + Math.Abs(context.maxValue)))) ); } + + public Vector3 GetCategoryPosition(int categoryIndex, int dataCount = 0) + { + if (dataCount <= 0) + { + dataCount = data.Count; + } + if (IsCategory() && dataCount > 0) + { + Vector3 pos; + if (boundaryGap) + { + var each = context.length / dataCount; + pos = context.start + context.dire * (each * (categoryIndex + 0.5f)); + } + else + { + var each = context.length / (dataCount - 1); + pos = context.start + context.dire * (each * categoryIndex); + } + if (axisLabel.distance != 0) + { + if (this is YAxis) + { + pos.x = GetLabelObjectPosition(0).x; + } + else + { + pos.y = GetLabelObjectPosition(0).y; + } + } + return pos; + } + else + { + return Vector3.zero; + } + } } } \ No newline at end of file diff --git a/Runtime/Component/Axis/AxisHandler.cs b/Runtime/Component/Axis/AxisHandler.cs index a7a12556..ef90913b 100644 --- a/Runtime/Component/Axis/AxisHandler.cs +++ b/Runtime/Component/Axis/AxisHandler.cs @@ -58,7 +58,7 @@ namespace XCharts (!axis.boundaryGap && (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2))) { axis.context.pointerValue = j; - axis.context.pointerLabelPosition = axis.GetLabelObjectPosition(j); + axis.context.pointerLabelPosition = axis.GetCategoryPosition(j, dataCount); if (j != lastPointerValue) { if (chart.onAxisPointerValueChanged != null) @@ -78,7 +78,7 @@ namespace XCharts (!axis.boundaryGap && (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2))) { axis.context.pointerValue = j; - axis.context.pointerLabelPosition = axis.GetLabelObjectPosition(j); + axis.context.pointerLabelPosition = axis.GetCategoryPosition(j, dataCount); if (j != lastPointerValue) { if (chart.onAxisPointerValueChanged != null) diff --git a/Runtime/Component/Tooltip/TooltipHandler.cs b/Runtime/Component/Tooltip/TooltipHandler.cs index 21edcab8..e9bb466b 100644 --- a/Runtime/Component/Tooltip/TooltipHandler.cs +++ b/Runtime/Component/Tooltip/TooltipHandler.cs @@ -701,7 +701,7 @@ namespace XCharts.Runtime case Tooltip.Type.Line: float pX = grid.context.x; pX += xAxis.IsCategory() ? - (float)(xAxis.context.axisTooltipValue * splitWidth + (xAxis.boundaryGap ? splitWidth / 2 : 0)) : + (float)(xAxis.context.pointerValue * splitWidth + (xAxis.boundaryGap ? splitWidth / 2 : 0)) : xAxis.GetDistance(xAxis.context.axisTooltipValue, grid.context.width); if (pX < grid.context.x) break;