/// <summary> /// 重置Scroll, /// </summary> /// <param name="ids"></param> /// <param name="pre"></param> public void ResetScroll(List <int> ids, ExtraScrollItem pre, UnityEngine.Object manager = null) { Clear(); if (pre == null) { return; } if (viewRect.rect == Rect.zero) { Debug.LogError("viewRect为0:如果使用了Auto Hide And Expand ViewPort,请用Auto Hide加调整滑条位置代替"); return; } m_manager = manager; m_itemPre = pre; m_itemPre.rect.pivot = new Vector2(0.5f, 0.5f); if (m_assignItemSize != Vector2.zero) { m_itemPre.rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, m_assignItemSize.x); m_itemPre.rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, m_assignItemSize.y); } m_itemIds = ids;//new List<int>(ids); m_itemSize = m_itemPre.rect.rect.size; m_viewportSize = viewRect.rect.size; m_isValid = true; resetContentSize(); createCacheItems(); UpdateView(); }
void createCacheItems() { if (m_cacheitems.Count != 0 || m_itemSize.y == 0 || m_itemSize.x == 0) { Debug.LogError("Scrollview:初始item失败,可能size为0,或存在未清除缓存"); return; } int needNum = -2; if (m_layoutDirection == LayoutDirection.Horizontal) { needNum = Mathf.CeilToInt(m_viewportSize.x / (m_itemSize.x + m_layout.spacing)); } else if (m_layoutDirection == LayoutDirection.Vertical) { needNum = Mathf.CeilToInt(m_viewportSize.y / (m_itemSize.y + m_layout.spacing)); } needNum = Mathf.Max(m_cacheNum, needNum + 2); for (int i = 0; i < needNum; i++) { ExtraScrollItem item = GameObject.Instantiate <ExtraScrollItem>(m_itemPre, content.transform, false); item.SetManager(m_manager); m_cacheitems.Add(item); item.gameObject.SetActive(false); } }
void showItems() { for (int i = 0; i < m_curContentRange.count; ++i) { int idx = m_curContentRange.minIndex + i; ExtraScrollItem it = m_cacheitems[i]; it.Reset(m_itemIds[idx]); it.rect.localPosition = getPosAtIndex(idx); it.gameObject.SetActive(true); } for (int i = m_curContentRange.count; i < m_cacheitems.Count; ++i) { ExtraScrollItem it = m_cacheitems[i]; it.gameObject.SetActive(false); } }
/// <summary> /// 清空所以数据和view /// </summary> public void Clear() { m_itemPre = null; m_itemSize = Vector2.zero; m_curContentRange = IndexRange.NullRange; m_itemIds.Clear(); foreach (ExtraScrollItem item in m_cacheitems) { GameObject.Destroy(item.gameObject); } m_cacheitems.Clear(); content.transform.localPosition = Vector2.zero; m_manager = null; m_isValid = false; }