/// <summary> /// 底部越界事件 /// </summary> /// <param name="_rect"></param> /// <param name="_childrenRect"></param> private void ProcessCrossBottomBorder() { Vector3 offsetMin = minminCornerWorld * 0.5f + maxminCornerWorld * 0.5f; InfiniteItem firstItem = infiniteItemList[0]; Vector3 offsetTopLocal = new Vector3(0, firstItem.offsetMax.y, 0); Vector3 offsetTopWorld = firstItem.parent.TransformPoint(offsetTopLocal); Vector3 max = Vector3.zero; InfiniteItem item = null; for (int i = infiniteItemList.Count - 1; i >= 0; i--) { item = infiniteItemList[i]; max = item.parent.TransformPoint(new Vector3(0, item.offsetMax.y, 0)); if (max.y < offsetMin.y) { preIndex++; rearIndex++; if (moveNextCallBack != null) { moveNextCallBack(0, item); } offsetTopWorld = item.parent.TransformPoint(offsetTopLocal + new Vector3(0, item.rect.height * item.pivot.y, 0)); offsetTopLocal = offsetTopLocal + new Vector3(0, item.rect.height, 0); item.rectTransform.position = offsetTopWorld; infiniteItemList.Remove(item); infiniteItemList.Insert(0, item); } else { break; } } }
public virtual void DoLastToFirst(InfiniteItem _item) { if (_item != this) { return; } txtContent.text = preIndex.ToString(); index--; preIndex--; }
public virtual void DoFirstToLast(InfiniteItem _item) { if (_item != this) { return; } index++; preIndex++; txtContent.text = index.ToString(); }
private void ResetPosition() { if (m_Content == null) { return; } if (infiniteItemList == null) { infiniteItemList = new List <InfiniteItem>(); InfiniteItem item = null; int childCount = m_Content.childCount; for (int i = 0; i < childCount; i++) { item = m_Content.GetChild(i).GetComponent <InfiniteItem>(); if (item != null) { infiniteItemList.Add(item); item.pivot = Vector2.one * 0.5f; item.sizeDelta = m_CellSize; } } } rectTransform.anchorMax = m_Content.anchorMax = Vector2.one * 0.5f; rectTransform.anchorMin = m_Content.anchorMin = Vector2.one * 0.5f; rectTransform.pivot = m_Content.pivot = Vector2.one * 0.5f; m_Content.sizeDelta = rectTransform.sizeDelta; m_Content.anchoredPosition3D = Vector3.zero; InfiniteItem lastItem = infiniteItemList[0]; lastItem.rectTransform.anchoredPosition = new Vector2(0, m_Content.rect.height * 0.5f - lastItem.rect.height * (1 - lastItem.pivot.y)); for (int i = 1; i < infiniteItemList.Count; i++) { infiniteItemList[i].SetAnchoredPosition(lastItem.rectTransform.anchoredPosition.AddY(-m_CellSize.y), 0f); lastItem = infiniteItemList[i]; } }
/// <summary> /// 顶部越界事件 /// </summary> private void ProcessCrossTopBorder() { Vector3 offsetMax = minmaxCornerWorld * 0.5f + maxmaxCornerWorld * 0.5f; InfiniteItem lastItem = infiniteItemList[infiniteItemList.Count - 1]; Vector3 offsetBottomLocal = new Vector3(0, lastItem.offsetMin.y, 0); Vector3 offsetBottomWorld = lastItem.parent.TransformPoint(offsetBottomLocal); Vector3 min = Vector3.zero; InfiniteItem item = null; for (int i = 0; i < infiniteItemList.Count; i++) { item = infiniteItemList[i]; min = item.parent.TransformPoint(new Vector3(0, item.offsetMin.y, 0)); if (min.y > offsetMax.y) { preIndex--; rearIndex--; if (moveLastCallBack != null) { moveLastCallBack(0, item); } offsetBottomWorld = item.parent.TransformPoint(offsetBottomLocal - new Vector3(0, item.rect.height * (1f - item.pivot.y), 0)); offsetBottomLocal = offsetBottomLocal - new Vector3(0, item.rect.height, 0); item.rectTransform.position = offsetBottomWorld; infiniteItemList.Remove(item); infiniteItemList.Add(item); } else { break; } } }