public static void Init <T> (this TableView <T> tableView, ScrollViewType type = ScrollViewType.None) where T : UnityEngine.Component { switch (type) { case ScrollViewType.SnapX: tableView.SnapX(); break; case ScrollViewType.SnapY: tableView.SnapY(); break; } tableView.Cells.Clear(); tableView.Pool = new Pool <T> (tableView.CellPrefab.GetComponent <T> (), tableView.transform); tableView.OnDestroyAsObservable().Subscribe(_ => tableView.Pool.Dispose()); }
//进入时刷新部分参数 void OnEnable() { mTarget = target as ScrollView; if (null == mTarget) { return; } if (null != mTarget.ItemPrefab) { resetItemSize(); } //resetScrollType(); mScrollType = mTarget.ScrollType; //super 属性折叠相关 fadeGroup = new AnimBool(false); // 注册动画监听 fadeGroup.valueChanged.AddListener(Repaint); }
//Editor 展示 public override void OnInspectorGUI() { if (null == mTarget) { return; } serializedObject.Update(); #region 显示ScrollRect的属性 // target控制动画开始播放 fadeGroup.target = EditorGUILayout.Foldout(fadeGroup.target, "ScrollRect", true); // 系统使用tween渐变faded数值 if (EditorGUILayout.BeginFadeGroup(fadeGroup.faded)) { base.OnInspectorGUI(); } // begin - end 之间元素会进行动画 EditorGUILayout.EndFadeGroup(); // 又一种风格的空格 GUILayout.Space(10); #endregion 显示ScrollRect的属性 Prefab = EditorGUILayout.ObjectField("ItemPrefab", Prefab, typeof(GameObject), false) as GameObject; if (null == Prefab) { EditorGUILayout.HelpBox("请设置 ScrollView ItemPrefab", MessageType.Error); } mTarget.ItemSize = EditorGUILayout.Vector2Field("ItemSize", mTarget.ItemSize); if (mTarget.ItemSize.x.Equals(-1f) || mTarget.ItemSize.y.Equals(-1f)) { EditorGUILayout.HelpBox("ItemSize x或y 值为-1时,表示 item 根据 ScrollView 缩放,prefab的RectTransform中left、right、top、bottom 无效,请调整下方PaadingXXX 修改 Item 显示大小", MessageType.Warning); } GUILayout.Space(10); mTarget.ScrollType = (ScrollViewType)EditorGUILayout.EnumPopup("ScrollType", mTarget.ScrollType); if (mScrollType != mTarget.ScrollType) { resetScrollType(); mScrollType = mTarget.ScrollType; } GUILayout.Space(10); mTarget.PaddingLeft = EditorGUILayout.FloatField("PaddingLeft", mTarget.PaddingLeft); mTarget.PaddingRight = EditorGUILayout.FloatField("PaddingRight", mTarget.PaddingRight); mTarget.PaddingTop = EditorGUILayout.FloatField("PaddingTop", mTarget.PaddingTop); mTarget.PaddingBottom = EditorGUILayout.FloatField("PaddingBottom", mTarget.PaddingBottom); GUILayout.Space(5); mTarget.ItemNumPerStep = EditorGUILayout.IntField("ItemNumPerSte", mTarget.ItemNumPerStep); string str = mTarget.ScrollType == ScrollViewType.Vertical ? "行" : "列"; SerializedProperty showItemIntegersProperty = serializedObject.FindProperty("ShowItemIntegers"); EditorGUILayout.PropertyField(showItemIntegersProperty, new GUIContent("显示整数" + str)); if (!showItemIntegersProperty.boolValue) { EditorGUILayout.PropertyField(serializedObject.FindProperty("LineOffset"), new GUIContent(str + "间距")); } EditorGUILayout.PropertyField(serializedObject.FindProperty("AlignLines"), new GUIContent("对齐到行或列", "仅在拖动Scrollview content 区域后有效,拖动 Scrollbar或者鼠标滚轮造成的移动无效")); EditorGUILayout.PropertyField(serializedObject.FindProperty("EnableMuiltSelect"), new GUIContent("允许多选")); EditorGUILayout.PropertyField(serializedObject.FindProperty("SwitchItemOnClick"), new GUIContent("点击Item切换选中状态")); EditorGUILayout.PropertyField(serializedObject.FindProperty("TweenRate"), new GUIContent("Tween 时间像素比", "表示平均每tween一个像素花的时间")); serializedObject.ApplyModifiedProperties(); //测试相关,显示给定数量的item if (Application.isPlaying) { GUILayout.Space(10); GUILayout.BeginHorizontal(); showCount = EditorGUILayout.IntField("测试显示数量", showCount); if (GUILayout.Button("显示items")) { System.Collections.Generic.List <UIItemData> data = new System.Collections.Generic.List <UIItemData>(); for (int i = 0; i < showCount; i++) { data.Add(new UIItemData()); } mTarget.SetData(data); } GUILayout.EndHorizontal(); } }