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];
随机推荐
- [deviceone开发]-优惠券商户管理端App开源
一.简介 这是一个优惠券的商主端,也就是配置发送优惠券的App 页面和交互还是像纳豆那样非常漂亮流畅,大家可以参考一下 二.效果图 三.源码分享 https://github.com/do-proje ...
- iOS 代理反向传值
在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...
- myeclipse 2015 CI 16发布【附下载】
2015升级版再次来袭! 更新日志: Slack Integration 新版本集成了Slack,你只需要注册一个Slack帐号然后就可以发送和接收代码片段.你甚至不需要登录Slack就可以直接在Ec ...
- 【读书笔记】iOS网络-异步请求与运行循环
异步请求需要运行循环.当数据传递到服务器或是被客户端接收时,运行循环用于实现事件与委托对象之间的通信.异步请求在发出时,会在当前线程的运行循环上操作,这个实现细节是很重要的,因为在GCD块中或者是通过 ...
- C# sql语句拼接时 like情况的防sql注入的用法
今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...
- mac 终端 常用指令
开始正式研究ios 应用开发,由于是从C开始学起,所以学习下常用的mac终端指令,方便后续常用操作. mac 终端 常用指令: 1.ls指令 用途:列出文件 常用参数 -w 以简洁的形式列出所有文件和 ...
- PHP implode() 函数 把数组元素组合为字符串
http://www.w3school.com.cn/php/func_string_implode.asp PHP implode() 函数 PHP String 函数 实例 把数组元素组合为字符串 ...
- linux命令 wget
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- 创建android Notification
说明:根据项目选择的基础sdk,选择不同的创建Notification的方法1 在android sdk 3.0 之前直接通过 new Notification的方法直接创建通知对象 2 在andro ...
- Win7家庭组的使用
Win7中有两种方式与他人共享文件,一种是“家庭组”,另一种是使用“工作组或域”. 家庭组是Win7中新增的一种共享文件方式,在传统的共享文件方式中必须手动设置所要共享的文件夹,而家庭组则不需要,只需 ...