UGUI 下拉滚动框
2016-04-07 16:05
225 查看
开始制作好友系统了, 发现有一个UI跟QQ的面板一模一样. 于是就写了一个公共的下拉滚动框.需要把按钮的中心点(pivot.y = 1),描点为最上方 直接上图吧
代码如下:
层次图:
代码如下:
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections.Generic; using UnityEngine.Events; public class DropScroll : MonoBehaviour { [SerializeField] private Button[] btnList; //提供多个按钮 private RectTransform thisRT; [SerializeField] private GameObject scrollViewTmp; //提供一个滚动视图模版 private List<RectTransform> scrollViewList = new List<RectTransform>(); public void Start() { Init(); } public void Init() { RectTransform rt = null; foreach (var btn in btnList) { EventTriggerListener.Get(btn.gameObject).OnClick += BtnDropClickEvent; rt = GameObject.Instantiate(scrollViewTmp).GetComponent<RectTransform>(); scrollViewList.Add(rt); rt.gameObject.SetActive(false); rt.transform.SetParent(this.transform,false); } thisRT = this.GetComponent<RectTransform>(); } private void BtnDropClickEvent(GameObject go) { RectTransform rt = go.GetComponent<RectTransform>(); RectTransform btnRt = null; float height = thisRT.sizeDelta.y; int index = rt.GetSiblingIndex(); HideAllScrollView(); scrollViewList[index].sizeDelta = new Vector2(thisRT.sizeDelta.x, height - btnList.Length * rt.sizeDelta.y); scrollViewList[index].anchoredPosition = new Vector2(0, -((index + 1) * rt.sizeDelta.y)); scrollViewList[index].gameObject.SetActive(true); for (int i = 0; i < btnList.Length; i++) { btnRt = btnList[i].GetComponent<RectTransform>(); if (i > index) { btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -height + ((btnList.Length - i) * btnRt.sizeDelta.y)); } else { btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -(i * btnRt.sizeDelta.y)); } } } private void HideAllScrollView() { for (int i = 0; i < scrollViewList.Count; i++) { scrollViewList[i].gameObject.SetActive(false); } } } public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger { public delegate void VoidDelegate(GameObject go); public event VoidDelegate OnClick; static public EventTriggerListener Get(GameObject go) { EventTriggerListener listener = go.GetComponent<EventTriggerListener>(); if (listener == null) listener = go.AddComponent<EventTriggerListener>(); return listener; } public override void OnPointerClick(PointerEventData eventData) { if (OnClick != null) OnClick(gameObject); } }
层次图:
相关文章推荐
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- 优化UITableViewCell高度计算的那些事
- UITableViewCell高度自适应探索--AutoLayout结合Frame
- IOS开发-UI学习-NSMutableAttributedString(带属性的字符串)的使用
- iOS开发基础学习笔记——导航控制器2->导航栏(UINavigationBar)/工具栏(toolBar)/导航元素按钮(UINavigationItem)
- easyui的datagrid的分页问题
- UITableView优化技巧
- 一个实现 Twitter SnowFlake 算法 的 Go 分布式 UID 生成器
- 改变UITextView的边框颜色
- UIView的contentMode使用小结
- 自定义UICollectionViewLayout(一) ----LineLayout
- UITextField小结
- 6.7.3 qmgr_message_reslove函数:解析收件人地址,生成QMGR_TRANSPORT和QMGR_QUEUE结构体
- 执行session.createSQLQuery(querySql).list()多次后,再次执行没有动静
- UIBarbuttonItem
- STL学习笔记— —容器deque
- maven install与maven build的区别
- JAVA中String与StringBuffer,StringBuilder的区别
- 各种姿势玩转KVC
- UI控件