Esempio n. 1
0
        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();
            }
        }