public void AppendView(List <ProgramInfo> programInfos) { if (searchProgramItems.Count + programInfos.Count > Constants.MaxSearchProgramBufferCount) { float sp = _rt.rect.height; // start position (display height) float b = _itemHeight; // block size (item height) float t = Constants.MaxSearchProgramBufferCount; float v = scrollbar.value; // current value of scrollbar float c = t * b * (1 - v) + v * sp; // current position of scrollbar float n = programInfos.Count; // added block count in the end float newV = 1 - ((c - n * b) - sp) / (t * b - sp); // new value of scrollbar scrollbar.value = newV; int i = 0; int deleteCount = searchProgramItems.Count + programInfos.Count - Constants.MaxSearchProgramBufferCount; foreach (Transform child in searchProgramItemParent.transform) { if (i < deleteCount) { GameObject.Destroy(child.gameObject); } else { break; } i++; } searchProgramItems.RemoveRange(0, deleteCount); } int startIndex = searchProgramItems.Count; if (searchProgramItemPrefab != null) { for (int i = 0; i < programInfos.Count; i++) { GameObject go = GameObject.Instantiate(searchProgramItemPrefab); if (go != null) { UISearchProgramItem item = go.GetComponent <UISearchProgramItem> (); item.transform.SetParent(searchProgramItemParent.transform); searchProgramItems.Add(item); } } } for (int i = 0; i < programInfos.Count; ++i) { var item = searchProgramItems [i + startIndex]; item.UpdateItem(programInfos [i]); } bool scrollbarActive = searchProgramItems.Count > 0 ? true : false; scrollbar.gameObject.SetActive(scrollbarActive); _minScrollValueForAppendingItems = 1 - (float)(searchProgramItems.Count - Constants.ProgramCountForUpdatingBuffer) / (float)searchProgramItems.Count; if (scrollbar.value < 1) { _maxScrollValueForPrependingItems = 1 - _minScrollValueForAppendingItems; } }
public void PrependView(List <ProgramInfo> programInfos) { if (searchProgramItems.Count + programInfos.Count > Constants.MaxSearchProgramBufferCount) { float sp = _rt.rect.height; // start position (display height) float b = _itemHeight; // block size (item height) float t = Constants.MaxSearchProgramBufferCount; float v = scrollbar.value; // current value of scrollbar float c = t * b * (1 - v) + v * sp; // current position of scrollbar float n = programInfos.Count; // added block count in the front float newV = 1 - ((c + n * b) - sp) / (t * b - sp); // new value of scrollbar scrollbar.value = newV; int deleteCount = searchProgramItems.Count + programInfos.Count - Constants.MaxSearchProgramBufferCount; Transform parentTransform = searchProgramItemParent.transform; int childCount = parentTransform.childCount; Transform child; for (int i = 0; i < deleteCount; i++) { child = parentTransform.GetChild(childCount - i - 1); GameObject.Destroy(child.gameObject); } searchProgramItems.RemoveRange(searchProgramItems.Count - deleteCount, deleteCount); } if (searchProgramItemPrefab != null) { _cachedProgramItems.Clear(); for (int i = 0; i < programInfos.Count; i++) { GameObject go = GameObject.Instantiate(searchProgramItemPrefab); if (go != null) { UISearchProgramItem item = go.GetComponent <UISearchProgramItem> (); item.transform.SetParent(searchProgramItemParent.transform); item.transform.SetSiblingIndex(i); _cachedProgramItems.Add(item); } } searchProgramItems.InsertRange(0, _cachedProgramItems); } for (int i = 0; i < programInfos.Count; ++i) { var item = searchProgramItems [i]; item.UpdateItem(programInfos [i]); } bool scrollbarActive = searchProgramItems.Count > 0 ? true : false; scrollbar.gameObject.SetActive(scrollbarActive); _maxScrollValueForPrependingItems = 1 - (Constants.ProgramCountForUpdatingBuffer / (float)searchProgramItems.Count); }