InputField缩放

缩放类

/*******************************************************************************
* 版本声明:v1.0.0
* 类 名 称:InputFieldScaler
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:InputField缩放
******************************************************************************/

using UnityEngine;
using UnityEngine.UI;

namespace LastZero.BaseUI
{
    [RequireComponent(typeof(InputField))]
    public class InputFieldScaler : MonoBehaviour, ILayoutElement
    {
        private Text textComponent
        {
            get
            {
                return this.GetComponent<InputField>().textComponent;
            }
        }

        public TextGenerationSettings GetTextGenerationSettings(Vector2 extents)
        {
            var settings = textComponent.GetGenerationSettings(extents);
            settings.generateOutOfBounds = true;

            return settings;
        }

        private RectTransform m_Rect;

        private RectTransform rectTransform
        {
            get
            {
                if (m_Rect == null)
                    m_Rect = GetComponent<RectTransform>();
                return m_Rect;
            }
        }

        public void OnValueChanged(string v)
        {     
            rectTransform.SetSizeWithCurrentAnchors((RectTransform.Axis)1, LayoutUtility.GetPreferredSize(rectTransform, 1));
        }

        void OnEnable()
        {

            this.inputField.onValueChanged.AddListener(OnValueChanged);
        }

        private Vector2 originalSize;
        private InputField _inputField;

        public InputField inputField
        {
            get
            {
                return _inputField ?? (_inputField = this.GetComponent<InputField>());
            }
        }

        float c;//差值
        protected void Awake()
        {
            this.originalSize = this.GetComponent<RectTransform>().sizeDelta;

            c = GetComponent<RectTransform>().rect.size.y - inputField.textComponent.rectTransform.rect.size.y;
        }

        private string text
        {
            get
            {
                return this.GetComponent<InputField>().text;
            }
        }

        private TextGenerator _generatorForLayout;

        public TextGenerator generatorForLayout
        {
            get
            {
                return _generatorForLayout ?? (_generatorForLayout = new TextGenerator());
            }
        }

        [Tooltip("测试用")]
        public float Width;
        [Tooltip("测试用")]
        public float Height;
        public void Update()
        {
            this.Width = this.preferredWidth;
            this.Height = this.preferredHeight;
        }

        public float preferredWidth
        {
            get
            {
                if (keepMinOriginalSize)
                {
                    return Mathf.Max(this.originalSize.x, generatorForLayout.GetPreferredWidth(text, GetTextGenerationSettings(Vector2.zero)) / textComponent.pixelsPerUnit + 20);
                }
                else
                {
                    return generatorForLayout.GetPreferredWidth(text, GetTextGenerationSettings(Vector2.zero)) / textComponent.pixelsPerUnit + 20;
                }
            }
        }

        public virtual void CalculateLayoutInputHorizontal()
        {
        }

        public virtual void CalculateLayoutInputVertical()
        {
        }

        public virtual float minWidth
        {
            get { return -1; }
        }

        public virtual float flexibleWidth { get { return -1; } }

        public virtual float minHeight
        {
            get { return -1; }
        }

        public virtual float preferredHeight
        {
            get
            {
                if (keepMinOriginalSize)
                {
                    return Mathf.Max(this.originalSize.y, c + generatorForLayout.GetPreferredHeight(text, GetTextGenerationSettings(new Vector2(this.textComponent.GetPixelAdjustedRect().size.x, 0.0f))) / textComponent.pixelsPerUnit);
                }
                else
                {
                    return generatorForLayout.GetPreferredHeight(text, GetTextGenerationSettings(new Vector2(this.textComponent.GetPixelAdjustedRect().size.x, 0.0f))) / textComponent.pixelsPerUnit;
                }

            }
        }

        public virtual float flexibleHeight { get { return -1; } }

        [SerializeField]
        [Tooltip("缩放的最小值为 Awake()中取得的值")]
        private bool keepMinOriginalSize = true;

        [SerializeField]
        [Tooltip("提高Layou计算优先级,要比InputField大 这里设为1")]
        private int priority = 1;

        public virtual int layoutPriority { get { return priority; } }
    }
}

添加事件

/*******************************************************************************
* 版本声明:v1.0.0
* 类 名 称:AddAutoScaling
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:InputField自动缩放
******************************************************************************/

using UnityEngine.UI;
using LastZero.BaseUI;

namespace LastZero
{
    public static class AddAutoScaling {

        public static void SetAutoScaling(this InputField ipt)
        {
            ipt.lineType = InputField.LineType.MultiLineNewline;
            ipt.gameObject.AddComponent<InputFieldScaler>();
        }
    }
}

返回目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值