修复图表在LayoutGroup控制下时可能显示错乱的问题 #121

This commit is contained in:
monitor1394
2021-02-19 22:01:56 +08:00
parent f7b8f2f76f
commit f0c553b0b7
5 changed files with 36 additions and 50 deletions

View File

@@ -31,6 +31,7 @@
## Latest ## Latest
* (2021.02.19) Fixed an issue where charts could appear abnormal when under `LayoutGroup` control #121
* (2021.02.18) Fixed an issue where the `Radar` could not refresh itself after parameter changing #122 * (2021.02.18) Fixed an issue where the `Radar` could not refresh itself after parameter changing #122
## v2.0.0 ## v2.0.0

View File

@@ -31,7 +31,8 @@
## Latest ## Latest
* (2021.02.18) 修复`Radar`参数变更后无法自刷新的问题 * (2021.02.19) 修复图表在`LayoutGroup`控制下时可能显示错乱的问题 #121
* (2021.02.18) 修复`Radar`参数变更后无法自刷新的问题 #122
## 2.0.0 ## 2.0.0

View File

@@ -350,18 +350,16 @@ namespace XCharts
} }
private void InitTitle(Title title) private void InitTitle(Title title)
{ {
title.OnChanged();
var anchorMin = title.location.runtimeAnchorMin;
var anchorMax = title.location.runtimeAnchorMax;
var pivot = title.location.runtimePivot;
var titleObject = ChartHelper.AddObject(s_TitleObjectName + title.index, transform, anchorMin, anchorMax,
pivot, m_ChartSizeDelta);
title.gameObject = titleObject;
title.painter = null; title.painter = null;
title.refreshComponent = delegate () title.refreshComponent = delegate ()
{ {
if (titleObject == null) return;
title.OnChanged(); title.OnChanged();
var anchorMin = title.location.runtimeAnchorMin;
var anchorMax = title.location.runtimeAnchorMax;
var pivot = title.location.runtimePivot;
var titleObject = ChartHelper.AddObject(s_TitleObjectName + title.index, transform, anchorMin, anchorMax,
pivot, m_ChartSizeDelta);
title.gameObject = titleObject;
anchorMin = title.location.runtimeAnchorMin; anchorMin = title.location.runtimeAnchorMin;
anchorMax = title.location.runtimeAnchorMax; anchorMax = title.location.runtimeAnchorMax;
pivot = title.location.runtimePivot; pivot = title.location.runtimePivot;
@@ -405,15 +403,13 @@ namespace XCharts
private void InitLegend(Legend legend) private void InitLegend(Legend legend)
{ {
legend.OnChanged();
var legendObject = ChartHelper.AddObject(s_LegendObjectName + legend.index, transform, m_ChartMinAnchor,
m_ChartMaxAnchor, m_ChartPivot, m_ChartSizeDelta);
legend.gameObject = legendObject;
legend.painter = null; // legend component does not need to paint legend.painter = null; // legend component does not need to paint
legend.refreshComponent = delegate () legend.refreshComponent = delegate ()
{ {
if (legendObject == null) return;
legend.OnChanged(); legend.OnChanged();
var legendObject = ChartHelper.AddObject(s_LegendObjectName + legend.index, transform, m_ChartMinAnchor,
m_ChartMaxAnchor, m_ChartPivot, m_ChartSizeDelta);
legend.gameObject = legendObject;
legendObject.hideFlags = chartHideFlags; legendObject.hideFlags = chartHideFlags;
SeriesHelper.UpdateSerieNameList(m_Series, ref m_LegendRealShowName); SeriesHelper.UpdateSerieNameList(m_Series, ref m_LegendRealShowName);
List<string> datas; List<string> datas;
@@ -596,12 +592,11 @@ namespace XCharts
private void InitTooltip() private void InitTooltip()
{ {
tooltip.gameObject = ChartHelper.AddObject("tooltip", transform, m_ChartMinAnchor,
m_ChartMaxAnchor, m_ChartPivot, m_ChartSizeDelta);
tooltip.painter = m_PainterTop; tooltip.painter = m_PainterTop;
tooltip.refreshComponent = delegate () tooltip.refreshComponent = delegate ()
{ {
if (tooltip.gameObject == null) return; tooltip.gameObject = ChartHelper.AddObject("tooltip", transform, m_ChartMinAnchor,
m_ChartMaxAnchor, m_ChartPivot, m_ChartSizeDelta);
var tooltipObject = tooltip.gameObject; var tooltipObject = tooltip.gameObject;
tooltipObject.transform.localPosition = Vector3.zero; tooltipObject.transform.localPosition = Vector3.zero;
tooltipObject.hideFlags = chartHideFlags; tooltipObject.hideFlags = chartHideFlags;
@@ -752,10 +747,7 @@ namespace XCharts
m_ChartSizeDelta = m_GraphSizeDelta; m_ChartSizeDelta = m_GraphSizeDelta;
m_ChartRect = m_GraphRect; m_ChartRect = m_GraphRect;
m_Background.SetAllDirty(); SetAllComponentDirty();
foreach (var title in m_Titles) title.SetAllDirty();
foreach (var legend in m_Legends) legend.SetAllDirty();
tooltip.SetAllDirty();
m_Series.SetLabelDirty(); m_Series.SetLabelDirty();
m_ReinitLabel = true; m_ReinitLabel = true;
RefreshChart(); RefreshChart();

View File

@@ -34,6 +34,7 @@ namespace XCharts
protected Vector2 m_GraphMaxAnchor; protected Vector2 m_GraphMaxAnchor;
protected Vector2 m_GraphPivot; protected Vector2 m_GraphPivot;
protected Vector2 m_GraphSizeDelta; protected Vector2 m_GraphSizeDelta;
protected Vector2 m_GraphAnchoredPosition;
protected Rect m_GraphRect = new Rect(0, 0, 0, 0); protected Rect m_GraphRect = new Rect(0, 0, 0, 0);
protected bool m_RefreshChart = false; protected bool m_RefreshChart = false;
protected bool m_ForceOpenRaycastTarget; protected bool m_ForceOpenRaycastTarget;
@@ -197,13 +198,12 @@ namespace XCharts
private void InitBackground() private void InitBackground()
{ {
var backgroundObj = ChartHelper.AddObject(s_BackgroundObjectName, transform, m_GraphMinAnchor,
m_GraphMaxAnchor, m_GraphPivot, m_GraphSizeDelta);
m_Background.gameObject = backgroundObj;
m_Background.painter = m_Painter; m_Background.painter = m_Painter;
m_Background.refreshComponent = delegate () m_Background.refreshComponent = delegate ()
{ {
if (backgroundObj == null) return; var backgroundObj = ChartHelper.AddObject(s_BackgroundObjectName, transform, m_GraphMinAnchor,
m_GraphMaxAnchor, m_GraphPivot, m_GraphSizeDelta);
m_Background.gameObject = backgroundObj;
backgroundObj.hideFlags = chartHideFlags; backgroundObj.hideFlags = chartHideFlags;
var backgroundImage = ChartHelper.GetOrAddComponent<Image>(backgroundObj); var backgroundImage = ChartHelper.GetOrAddComponent<Image>(backgroundObj);
ChartHelper.UpdateRectTransform(backgroundObj, m_GraphMinAnchor, ChartHelper.UpdateRectTransform(backgroundObj, m_GraphMinAnchor,
@@ -235,8 +235,11 @@ namespace XCharts
Awake(); Awake();
} }
if (m_GraphWidth != currWidth || m_GraphHeight != currHeight || if (m_GraphWidth != currWidth
m_GraphMinAnchor != rectTransform.anchorMin || m_GraphMaxAnchor != rectTransform.anchorMax) || m_GraphHeight != currHeight
|| m_GraphMinAnchor != rectTransform.anchorMin
|| m_GraphMaxAnchor != rectTransform.anchorMax
|| m_GraphAnchoredPosition != rectTransform.anchoredPosition)
{ {
UpdateSize(); UpdateSize();
} }
@@ -255,6 +258,7 @@ namespace XCharts
m_GraphMaxAnchor = rectTransform.anchorMax; m_GraphMaxAnchor = rectTransform.anchorMax;
m_GraphMinAnchor = rectTransform.anchorMin; m_GraphMinAnchor = rectTransform.anchorMin;
m_GraphSizeDelta = rectTransform.sizeDelta; m_GraphSizeDelta = rectTransform.sizeDelta;
m_GraphAnchoredPosition = rectTransform.anchoredPosition;
rectTransform.pivot = LayerHelper.ResetChartPositionAndPivot(m_GraphMinAnchor, m_GraphMaxAnchor, rectTransform.pivot = LayerHelper.ResetChartPositionAndPivot(m_GraphMinAnchor, m_GraphMaxAnchor,
m_GraphWidth, m_GraphHeight, ref m_GraphX, ref m_GraphY); m_GraphWidth, m_GraphHeight, ref m_GraphX, ref m_GraphY);

View File

@@ -61,15 +61,6 @@ namespace XCharts
Awake(); Awake();
} }
#endif #endif
protected override void SetAllComponentDirty()
{
base.SetAllComponentDirty();
foreach (var dataZoom in m_DataZooms) dataZoom.SetAllDirty();
foreach (var visualMap in m_VisualMaps) visualMap.SetAllDirty();
foreach (var grid in m_Grids) grid.SetAllDirty();
foreach (var axis in m_XAxes) axis.SetAllDirty();
foreach (var axis in m_YAxes) axis.SetAllDirty();
}
private void RefreshSeriePainterByGridIndex(int gridIndex) private void RefreshSeriePainterByGridIndex(int gridIndex)
{ {
@@ -499,14 +490,13 @@ namespace XCharts
private void InitYAxis(int yAxisIndex, YAxis yAxis) private void InitYAxis(int yAxisIndex, YAxis yAxis)
{ {
string objName = ChartCached.GetYAxisName(yAxisIndex);
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
yAxis.gameObject = axisObj;
yAxis.painter = m_Painter; yAxis.painter = m_Painter;
yAxis.refreshComponent = delegate () yAxis.refreshComponent = delegate ()
{ {
if (axisObj == null) return; string objName = ChartCached.GetYAxisName(yAxisIndex);
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
yAxis.gameObject = axisObj;
yAxis.axisLabelTextList.Clear(); yAxis.axisLabelTextList.Clear();
axisObj.SetActive(yAxis.show && yAxis.axisLabel.show); axisObj.SetActive(yAxis.show && yAxis.axisLabel.show);
axisObj.hideFlags = chartHideFlags; axisObj.hideFlags = chartHideFlags;
@@ -610,14 +600,13 @@ namespace XCharts
private void InitXAxis(int xAxisIndex, XAxis xAxis) private void InitXAxis(int xAxisIndex, XAxis xAxis)
{ {
string objName = ChartCached.GetXAxisName(xAxisIndex);
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
xAxis.gameObject = axisObj;
xAxis.painter = m_Painter; xAxis.painter = m_Painter;
xAxis.refreshComponent = delegate () xAxis.refreshComponent = delegate ()
{ {
if (axisObj == null) return; string objName = ChartCached.GetXAxisName(xAxisIndex);
var axisObj = ChartHelper.AddObject(objName, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
xAxis.gameObject = axisObj;
xAxis.axisLabelTextList.Clear(); xAxis.axisLabelTextList.Clear();
axisObj.SetActive(xAxis.show && xAxis.axisLabel.show); axisObj.SetActive(xAxis.show && xAxis.axisLabel.show);
axisObj.hideFlags = chartHideFlags; axisObj.hideFlags = chartHideFlags;
@@ -716,13 +705,12 @@ namespace XCharts
{ {
var dataZoom = m_DataZooms[i]; var dataZoom = m_DataZooms[i];
dataZoom.index = i; dataZoom.index = i;
var dataZoomObject = ChartHelper.AddObject(s_DefaultDataZoom + i, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
dataZoom.gameObject = dataZoomObject;
dataZoom.painter = m_PainterTop; dataZoom.painter = m_PainterTop;
dataZoom.refreshComponent = delegate () dataZoom.refreshComponent = delegate ()
{ {
if (dataZoomObject == null) return; var dataZoomObject = ChartHelper.AddObject(s_DefaultDataZoom + i, transform, graphAnchorMin,
graphAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight));
dataZoom.gameObject = dataZoomObject;
dataZoomObject.hideFlags = chartHideFlags; dataZoomObject.hideFlags = chartHideFlags;
ChartHelper.HideAllObject(dataZoomObject); ChartHelper.HideAllObject(dataZoomObject);
var startLabel = ChartHelper.AddTextObject(s_DefaultDataZoom + "start", dataZoomObject.transform, var startLabel = ChartHelper.AddTextObject(s_DefaultDataZoom + "start", dataZoomObject.transform,