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();
    }
}
本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/5546927.html ,如需转载请自行联系原作者

相关文章
|
iOS开发
iOS之UIPickerView滚动事件
在开发中,我们会用到pickerview滚动条,那如何监听到pickview的滚动事件呢,之前开发就遇到过一个问题,快速滑动秒选确定按钮,地址显示不对的问题,解决办法为在点选确定辅助按钮的时候判断当时的pickerView是否正在滚动,如果在滚动则不允许触发点选确定后的其他操作。
387 0
iOS之UIPickerView滚动事件
|
iOS开发
拖动手势UIPanGestureRecognizer
拖动手势UIPanGestureRecognizer
333 0
拖动手势UIPanGestureRecognizer
|
Dart 开发者
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(三)
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(三)
231 0
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(三)
|
iOS开发
iOS ScrollView嵌套tableview左右滑动时禁止上下滑动
iOS ScrollView嵌套tableview左右滑动时禁止上下滑动
2013 0
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(一)
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(一)
163 0
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(二)
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(二)
252 0
|
Android开发
RecyclerView超级万能适配器(多布局、head、foot、下拉刷新、上拉自动更多、滑动删除)
RecyclerView超级万能适配器(多布局、head、foot、下拉刷新、上拉自动更多、滑动删除) 集成了Glide开源库 1.VerticalRecyclerView 1.1VR 1.
1707 0
|
Android开发
Android RecyclerView滑动到底部/上拉/上拉见底自动加载更多实现以及点击/长按事件处理
Android RecyclerView滑动到底部/上拉/上拉见底自动加载更多实现以及点击/长按事件处理 Android RecyclerView下拉加载更多有Android谷歌官方的实现,实现的方式是通过SwipeRefreshLayout把RecyclerView包裹起来,然后就可以通过SwipeRefreshLayout的回调接口实现下拉刷新功能。
1867 0