NGUI实现滑动翻页效果实例代码

 更新时间:2016年04月07日 10:59:01   投稿:mrr  
本文通过一段实例代码给大家介绍NGUI实现滑动翻页效果,代码简单易懂,对ngui 滑动翻页相关知识感兴趣的朋友一起学习吧

废话不多说了,直接给大家上干货了。

具体代码如下所示:

using UnityEngine;
using System.Collections;
public class PageView : MonoBehaviour
{
const int ITEM_NUM = 2; //总页数
const int PAGE_WIDTH = 2048; //页宽
const float DRAG_SPEED = 0.5f; //翻页时间
const int DRAG_OFFECT = 30; //滑动的起点和终点的差需大于这个数才能触发翻页效果
float beganX = 0; 
float beganY = 0; //鼠标按下的坐标
int curIndex = 1; //当前页数,默认为第一页
bool isPlay = false; //是否正在翻页
bool isPress = false; //鼠标是否按下
bool isPageFoot = false; //当前是否处于页尾
bool isHomePage = true; //当前是否处于首页
string left = "left"; //左滑动画的name
string right = "right"; //右滑动画的name
GameObject[] Item_Objects;
// Use this for initialization
void Start ()
{
this.Init ();
}
void Init()
{
Item_Objects = new GameObject[ITEM_NUM];
for(int i = 1; i <= ITEM_NUM; ++i)
{
Transform trans = this.transform.FindChild("item" + i);
if(trans)
{
GameObject spr = trans.transform.FindChild("Background").gameObject;
spr.AddComponent<UIEventListener>();
UIEventListener.Get(spr.gameObject).onPress = OnPressEvent;
}
Item_Objects[i - 1] = trans.gameObject;
}
}
//鼠标按下事件监听
void OnPressEvent(GameObject obj,bool isDown)
{
float endX;
float endY;
if (isDown) 
{
beganX = UICamera.lastTouchPosition.x;
beganY = UICamera.lastTouchPosition.y;
isPress = true;
} else 
{
endX = UICamera.lastTouchPosition.x;
endY = UICamera.lastTouchPosition.y;
if (isPress) 
{
if(isPlay == false)
{
if(endX - beganX > DRAG_OFFECT)
{
if(isHomePage == false)
{
RightDrag();
}
}else if(endX - beganX < DRAG_OFFECT){
if(isPageFoot == false)
{
LeftDrag();
}
}
}
}
isPress = false;
}
}
//向左滑
void LeftDrag()
{
isPlay = true;
float x = this.transform.localPosition.x - PAGE_WIDTH;
TweenPosition leftTween = TweenPosition.Begin (this.gameObject,DRAG_SPEED,new Vector3(x,0,0));
leftTween.method = UITweener.Method.EaseInOut;
leftTween.callWhenFinished = "callback";
leftTween.name = left;
leftTween.Reset ();
}
//向右滑
void RightDrag()
{
isPlay = true;
float x = this.transform.localPosition.x + PAGE_WIDTH;
TweenPosition rightTween = TweenPosition.Begin (this.gameObject,DRAG_SPEED,new Vector3(x,0,0));
rightTween.method = UITweener.Method.EaseInOut;
rightTween.callWhenFinished = "callback";
rightTween.name = right;
rightTween.Reset ();
}
//动画结束的回调函数
void callback(UITweener tween)
{
isPlay = false;
if (tween.name == left) 
{
curIndex ++;
} else if (tween.name == right) 
{
curIndex --;
}
if (curIndex == 1) 
{
isHomePage = true;
}else
{
isHomePage = false;
}
if(curIndex == ITEM_NUM){
isPageFoot = true;
}else
{
isPageFoot = false;
}
}
}

代码到此结束了,如果大家对代码有疑问欢迎给我留言,小编会及时和大家取得联系的。同时也非常感谢大家对脚本之家网站的支持!

相关文章

  • C# EF Core可视化工具的使用及EF Core入门语句操作代码

    C# EF Core可视化工具的使用及EF Core入门语句操作代码

    EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了,接下来通过本文给大家介绍C# EF Core可视化工具的使用及EF Core入门语句,感兴趣的朋友一起看看吧
    2022-02-02
  • C#中日期时间的简单操作

    C#中日期时间的简单操作

    这篇文章介绍了C#中日期时间的简单操作,有需要的朋友可以参考一下
    2013-08-08
  • Unity实现人物平滑转身

    Unity实现人物平滑转身

    这篇文章主要为大家详细介绍了Unity实现人物平滑转身,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • C#中HttpClient使用注意(预热与长连接)

    C#中HttpClient使用注意(预热与长连接)

    本文主要介绍了C#中HttpClient使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#串口通信程序实例详解

    C#串口通信程序实例详解

    在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
    2013-12-12
  • C# TreeView无限目录树实现方法

    C# TreeView无限目录树实现方法

    这篇文章主要介绍了C# TreeView无限目录树实现方法,实例分析了TreeView节点操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • C# Autofac的具体使用

    C# Autofac的具体使用

    Autofac是.NET领域最为流行的IoC框架之一,本文主要介绍了C# Autofac的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 原生实现C#与Lua相互调用方法(Unity3D可用)

    原生实现C#与Lua相互调用方法(Unity3D可用)

    Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库,下面这篇文章主要给大家介绍了关于原生实现C#与Lua相互调用方法,Unity3D可用的相关资料,需要的朋友可以参考下
    2022-04-04
  • 如何在C# 枚举中增加行为

    如何在C# 枚举中增加行为

    这篇文章主要介绍了如何在C# 枚举中增加行为的相关资料,需要的朋友可以参考下
    2023-05-05
  • C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

    C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列

    这篇文章介绍了C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09

最新评论