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();
}
}
UIPanelResetHelper(UIScrollView滚动复位)的更多相关文章
- UIScrollView 滑动复位
需求 在每次打开界面滑动列表都是复位状态(未滑动). 分析 在制作滑动列表时常常会结合UIPanel和UIScrollView 要让滑动列表回到未滑动时的位置,那么就需要改变Panel的Clippin ...
- UIScrollView滚动视图
一.基本知识 1.初始化 UIScrollView #import "ViewController.h" #define WIDTH[[UIScreen mainScreen]bo ...
- UIScrollView 滚动停止的时候一次调用此方法
//拖动返回选中的索引 当滚动视图停止时的时候 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ CGFloat wid ...
- 改良UIScrollView滚动视图
#define HEIGHT self.view.frame.size.height #define WIDTH self.view.frame.size.width @interface V ...
- UIScrollView 滚动视图—IOS开发
转自:http://blog.csdn.net/iukey/article/details/7319314 UIScrollView 类负责所有基于 UIKit 的滚动操作. 一.创建 CGRect ...
- iOS UIScrollView 滚动到当前展示的视图居中展示
需求展示: 测试效果1 first uiscrollView 宽度 为屏幕宽度 滚动步长 为 scroll 宽度的1/3 分析: 这个是最普通版 无法使每一次滚动的结果子视图居中展示, WA ...
- UIScrollView滚动时隐藏底部导航栏问题
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"開始滚动"); int currentPostio ...
- unity3d-ngui UIScrollView 滚动方向与滚轮相反
生成一个滚动面板之后发现滚轮向上滚,界面向下:滚轮向下界面向上.在编辑窗口里发现这个选项 本来是-2,修改成正数就可以了. http://ju.outofmemory.cn/entry/146754
- IOS UIScrollView滚动到指定位置
[mScrollView setContentOffset:CGPointMake(0,200) animated:YES];
随机推荐
- 由Vue引发的getter和setter思考
公司的新项目决定使用Vue.js来做,当我打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vu ...
- SharePoint Online 创建门户网站系列之定制栏目
前 言 SharePoint Online自带的库就带有二级页面和详细页面,也就是Allitems页面和DispForm页面,但是实在不够美观,尤其对于门户网站这一企业门面来说,更是无法接受. 下面, ...
- [ javascript canvas isPointInPath(x,y) 判断点是否在最后绘制的图形中 ] javascript canvas isPointInPath(x,y) 判断点是否在最后绘制的图形中方法演示 效果之三
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- 高级SQL语句
改变数据 insert record 插入一行 insert into foods (name, type_id) values ('Cinnamon Bobka', 1); 如果在insert语句中 ...
- Android 视频播放器,在线播放
1. Bilibili https://github.com/Bilibili/ijkplayer 1.测试的时候总是崩溃,不知道是我不会用还是怎么回事. 2016-04-15 2.AndroidVi ...
- iOS---UISearchBar限制输入字数
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText // called when text ...
- 结对编程-地铁续(有种上个学期OO的既视感)
我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...
- CSS Sprites (CSS图像拼合技术)教程工具
什么是CSS Sprites? “Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏.视频等画质越来越高,必须有一种技术可以智能的处理材质和贴图,并且要 同时保持画面流畅.“Spri ...
- 【译】Java中的对象序列化
前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...
- js技术发展
将.NET代码编译为JavaScript 你可以使用如下工具将C#.F#以及其他.NET代码编译为JavaScript代码. Apps in Motion:允许使用C#来构建可以运行在任何设备上的We ...