• UIPanelResetHelper(UIScrollView滚动复位)


    原理

    如果我们的UI中有滑动列表,并且列表比较长,那么不知道你们是否有这样需求,每次页面打开时,列表的滑动状态都恢复到默认状态。

    如果要复位,其实就是修改UIPanel 的属性到初始状态。此组件做的工作就是在初始化时把UIPanel的属性保存起来,在需要时还原初始值,达到复位效果。

    组件代码

    using UnityEngine;
    using System.Collections.Generic;
    
    /// <summary>
    /// 方便对UIPanel进行滚动复位
    /// 用法: 
    ///     var panelResetHelper = UIPanelResetHelper.Create(m_uiPanel);
    ///     页面重新打开时调用:panelResetHelper.ResetScroll();
    /// by 赵青青
    /// </summary>
    public class UIPanelResetHelper
    {
        public UIPanel m_panel { get; private set; }
        public Vector2 m_initPanelClipOffset { get; private set; }
        public Vector3 m_initPanelLocalPos { get; private set; }
    
        public UIPanelResetHelper(UIPanel uiPanel)
        {
            if (uiPanel == null)
            {
                Debug.LogWarning("需要UIPanel,却传入了NULL,请检查");
                return;
            }
            m_panel = uiPanel;
            m_initPanelClipOffset = m_panel.clipOffset;
            m_initPanelLocalPos = m_panel.cachedTransform.localPosition;
        }
    
        public void ResetScroll()
        {
            if (m_panel == null) return;
            m_panel.clipOffset = m_initPanelClipOffset;
            m_panel.cachedTransform.localPosition = m_initPanelLocalPos;
        }
    
        public static UIPanelResetHelper Create(Transform uiPanelTrans)
        {
            UIPanel uiPanel = uiPanelTrans.GetComponent<UIPanel>();
            return Create(uiPanel);
        }
    
        public static UIPanelResetHelper Create(UIPanel uiPanel)
        {
            return new UIPanelResetHelper(uiPanel);
        }
    }

    使用方法

    在打开页面时,调用resetscroll。

    using UnityEngine;
    using System.Collections;
    
    public class UIPayList : MonoBehaviour
    {
        public Transform m_ListPanel;
        private UIPanelResetHelper m_PanelResetHelper;
    
        public void BindContrller()
        {
            //TODO 其它的绑定代码
            if (m_ListPanel)
            {
                m_PanelResetHelper = UIPanelResetHelper.Create(m_ListPanel);
            }
        }
    
        public void OnOpen()
        {
            //打开时,对列表进行复位
            ResetScroll();
        }
    
        public void ResetScroll()
        {
            //NOTE 重设Scrollview的位置
            if (m_PanelResetHelper != null) m_PanelResetHelper.ResetScroll();
        }
    }
  • 相关阅读:
    洛谷 P2062 分队问题
    CentOS6.8安装GitLab
    restful service+jersey架构
    安装好VMware后,启动CentOS时失败
    开发文档模板
    Java内存模型
    虚拟机字节码执行引擎之方法调用
    虚拟机字节码执行引擎之运行时栈帧结构
    虚拟机类加载机制之类加载器
    虚拟机类加载机制之类的加载过程
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/5546927.html
Copyright © 2020-2023  润新知