示例#1
0
    /// <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;
            }
        }
    }
示例#2
0
 public virtual void DoLastToFirst(InfiniteItem _item)
 {
     if (_item != this)
     {
         return;
     }
     txtContent.text = preIndex.ToString();
     index--;
     preIndex--;
 }
示例#3
0
 public virtual void DoFirstToLast(InfiniteItem _item)
 {
     if (_item != this)
     {
         return;
     }
     index++;
     preIndex++;
     txtContent.text = index.ToString();
 }
示例#4
0
    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];
        }
    }
示例#5
0
    /// <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;
            }
        }
    }