From 6d16a9c16a0a126aa94f9ca2275704a5fbee4b5c Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sun, 23 Jun 2024 22:03:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D`Label`=E5=9C=A8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=97=B6=E4=BC=9A=E5=A0=86=E7=A7=AF=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 | 2 ++ Runtime/Serie/SerieHandler.cs | 40 ++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 238bc2c0..8f32531a 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -74,6 +74,8 @@ slug: /changelog ## master +* (2024.06.23) 修复`Label`在初始化时会堆积的问题 + ## v3.11.0 版本要点: diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index e8983309..8eaea090 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -484,6 +484,8 @@ namespace XCharts.Runtime var dataAddDuration = serie.animation.GetAdditionDuration(); var unscaledTime = serie.animation.unscaledTime; var needCheck = serie.context.dataIndexs.Count > 0; + var allLabelZeroPosition = true; + var anyLabelActive = false; foreach (var serieData in serie.data) { if (serieData.labelObject == null && serieData.context.dataLabels.Count <= 0) @@ -518,7 +520,16 @@ namespace XCharts.Runtime SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, currLabel, color, chart); var offset = GetSerieDataLabelOffset(serieData, currLabel); - labelObject.SetActive(currLabel.show && !isIgnore && !serie.IsMinShowLabelValue(value)); + var active = currLabel.show && !isIgnore && !serie.IsMinShowLabelValue(value); + if (active) + { + anyLabelActive = true; + if (!ChartHelper.IsZeroVector(serieData.context.dataPoints[i])) + { + allLabelZeroPosition = false; + } + } + labelObject.SetActive(active); labelObject.SetText(content); labelObject.SetPosition(serieData.context.dataPoints[i] + offset); labelObject.UpdateIcon(currLabel.icon); @@ -539,10 +550,19 @@ namespace XCharts.Runtime ChartCached.NumberToStr(value, currLabel.numericFormatter) : SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, currLabel, color, chart); - serieData.SetLabelActive(currLabel.show && !isIgnore && !serie.IsMinShowLabelValue(value)); + var labelPos = UpdateLabelPosition(serieData, currLabel); + var active = currLabel.show && !isIgnore && !serie.IsMinShowLabelValue(value); + if (active) + { + anyLabelActive = true; + if (!ChartHelper.IsZeroVector(labelPos)) + { + allLabelZeroPosition = false; + } + } + serieData.SetLabelActive(active); serieData.labelObject.UpdateIcon(currLabel.icon); serieData.labelObject.SetText(content); - UpdateLabelPosition(serieData, currLabel); if (currLabel.textStyle.autoColor) { var dataAutoColor = GetSerieDataAutoColor(serieData); @@ -556,6 +576,17 @@ namespace XCharts.Runtime serieData.SetLabelActive(false); } } + if (anyLabelActive && allLabelZeroPosition) + { + foreach (var serieData in serie.data) + { + if (serieData.labelObject == null && serieData.context.dataLabels.Count <= 0) + { + continue; + } + serieData.SetLabelActive(false); + } + } } public virtual void RefreshEndLabelInternal() @@ -579,7 +610,7 @@ namespace XCharts.Runtime m_EndLabel.isAnimationEnd = serie.animation.IsFinish(); } - protected void UpdateLabelPosition(SerieData serieData, LabelStyle currLabel) + protected Vector3 UpdateLabelPosition(SerieData serieData, LabelStyle currLabel) { var labelPosition = GetSerieDataLabelPosition(serieData, currLabel); var offset = GetSerieDataLabelOffset(serieData, currLabel); @@ -591,6 +622,7 @@ namespace XCharts.Runtime else serieData.labelObject.SetRotate(-serieData.context.angle + currLabel.rotate); } + return labelPosition; } public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)