示例#1
0
 private void OnMove()
 {
     value += rollSpeed;
     if ((value >= targetValue && rollSpeed > 0) || (value <= targetValue && rollSpeed < 0))
     {
         value = targetValue;
         UILoopManager.RemoveFromFrame(this);
     }
 }
示例#2
0
        public void SetDataProvider <T>(IEnumerable <T> value)
        {
            if (_itemRender == null)
            {
                Debug.LogError("set itemRender first!");
                return;
            }
            if (_itemPool == null)
            {
                _itemPool = new List <CItemRender>();
            }
            if (_allItem == null)
            {
                _allItem = new List <CItemRender>();
            }
            SetData <T>(value);
            //_dataProvider = (value ?? new List<T>()) as List<object>;

            bool        isEnough = _allItem.Count >= _dataProvider.Count;
            int         n        = Mathf.Abs(_allItem.Count - _dataProvider.Count);
            CItemRender item;

            while (n > 0)
            {
                if (isEnough == true)
                {
                    item = _allItem[_allItem.Count - 1];
                    _itemPool.Add(item);
                    _allItem.RemoveAt(_allItem.Count - 1);
                    item.SetParent(recycle);
                    item.tran.localPosition = Vector3.zero;
                    item.SetActive(false);
                }
                else
                {
                    if (_itemPool.Count > 0)
                    {
                        item = _itemPool[0];
                        _itemPool.RemoveAt(0);
                        item.SetActive(true);
                    }
                    else
                    {
                        item = (CItemRender)Activator.CreateInstance(_itemRender);
                    }
                    item.SetParent(transform);
                    _allItem.Add(item);
                }
                n--;
            }
            ResetItems();
            lastDataProvider = value;
            if (_allItem.Count > 0)
            {
                if (alwaysMove || _allItem.Count * itemWidth > (content.baseClipRegion.z))
                {
                    UILoopManager.AddToFrame(this, OnLoop);
                }
                else
                {
                    UILoopManager.RemoveFromFrame(this);
                }
            }
            else
            {
                UILoopManager.RemoveFromFrame(this);
            }
        }