博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现单滑页效果
阅读量:6676 次
发布时间:2019-06-25

本文共 2748 字,大约阅读时间需要 9 分钟。

在这里插入图片描述

UI宽度=原来的宽度+(每一个单元格长度+间隙)*(单元格数量-1)

一。我们实现的是要翻一页书或者多页书,使用的方法是让ScrollView用它自身长度的单位化比例来实现。

实现这个需求我们首先要知道:

1.需要知道的一些属性值:

content的总长

2.玩家鼠标的开始位置与结束位置:

开始滑动与结束滑动的事件方式。

计算差值:

开始位置-结束位置>0,则右滑。

开始位置-结束位置<0,则左滑。

差值来决定滑动几个单元格。

3.移动一个单元格玩家鼠标需要滑动的距离(半个单元格长度+左偏移量)

测试发现它是一个单元格长度+左偏移量。

4.移动多个单元格玩家鼠标需要滑动的距离。

第一个是单元格长度+左偏移量,之后的每一个滑动都是单元格长度+间隔

滑动一个单元格所占的比例:

一个单元格所在位置中点的长度/Content的总长度

上限值与下限值:防止超过我们的最小长度与最大长度。

public class ScrollPage : MonoBehaviour,IBeginDragHandler,IEndDragHandler{    private RectTransform contentTrans;    private float beginMousePositionX;    private float endMousePositionX;    private ScrollRect scrollRect;    public int cellLength;    public int spacing;    public int leftOffset;    private float moveOneItemLength;    private Vector3 currentContentLocalPos;//上一次的位置    private Vector3 contentInitPos;//Content初始位置    private Vector2 contentTransSize;//Content初始大小    public int totalItemNum;    private int currentIndex;     private void Awake()    {        scrollRect = GetComponent
(); contentTrans = scrollRect.content; moveOneItemLength = cellLength + spacing; currentContentLocalPos = contentTrans.localPosition; contentTransSize = contentTrans.sizeDelta; contentInitPos = contentTrans.localPosition; currentIndex = 1; Debug.Log("currentContentLocalPos:" + currentContentLocalPos); } ///
/// 通过拖拽与松开来达成翻页效果 /// ///
public void OnBeginDrag(PointerEventData eventData) { beginMousePositionX = Input.mousePosition.x; //Debug.Log("beginMousePositionX" + beginMousePositionX); } public void OnEndDrag(PointerEventData eventData) { endMousePositionX = Input.mousePosition.x; // Debug.Log("endMousePositionX" + endMousePositionX); float offSetX = 0; float moveDistance = 0;//当次需要滑动的距离 offSetX = beginMousePositionX - endMousePositionX; Debug.Log("offSetX " + offSetX); if (offSetX > 0)//左滑 { if (currentIndex >= totalItemNum) { return; } moveDistance = -moveOneItemLength; currentIndex++; } else//右滑 { if (currentIndex <= 1) { return; } moveDistance = moveOneItemLength; currentIndex--; } DOTween.To(() => contentTrans.localPosition, lerpValue => contentTrans.localPosition = lerpValue, currentContentLocalPos + new Vector3(moveDistance, 0, 0), 0.5f).SetEase(Ease.OutQuint); currentContentLocalPos += new Vector3(moveDistance, 0, 0); Debug.Log("currentIndex:"+ currentIndex); Debug.Log("currentContentLocalPos:" + currentContentLocalPos); }}

转载地址:http://vcrxo.baihongyu.com/

你可能感兴趣的文章
PHP协程入门详解
查看>>
Java_Reflect_1
查看>>
HTML中的<table>标签及其子元素标签,JS中DOM对<table>的操作
查看>>
MobPush推送证书制作
查看>>
springmvc源码解析之配置加载ContextLoadListener
查看>>
网站安全防护工作
查看>>
如何判断一个以太坊地址是不是合约?
查看>>
逆袭!? 期待下一个“BCH”出现
查看>>
opengl es3.0学习篇五:图元装配跟光栅化
查看>>
Qt之添加菜单项&状态栏
查看>>
负载均衡在分布式架构中是怎么玩起来的?
查看>>
Java程序员在工作的同时应该具备什么样的能力?
查看>>
Dubbo深入分析之Cluster层
查看>>
分析Padavan源代码,二
查看>>
WordPress的WPML外挂出问题恐出现安全漏洞
查看>>
Django 调试技巧
查看>>
Spring Boot和thymeleaf , freemarker , jsp三个前端模块的运用
查看>>
phalcon-入门篇3(优美的URL与Config)
查看>>
单表60亿记录等大数据场景的MySQL优化和运维之道
查看>>
sql学习笔记
查看>>