private void OnMove() { value += rollSpeed; if ((value >= targetValue && rollSpeed > 0) || (value <= targetValue && rollSpeed < 0)) { value = targetValue; UILoopManager.RemoveFromFrame(this); } }
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); } }