PageView调用scrollToPage出现页面偏移

cocos2dx:3.4, cocos:2.1.5
本来想调用PageView的scrollToPage来设置默认页的,但发现PageView如果过早调用scrollToPage函数(比如在刚刚初始化完PageView,或者刚刚读取完csb),会出现页面偏移现象(除了索引为0的Page)。
原因分析如下,前提是刚初始化完PageView,而且里面已经有Page:
1、调用scrollToPage会设置了当前页的索引(_curPageIdx)
2、PageView还没开始调用doLayout(在drawScene里调用, doLayout要完成3项工作:更新所有页面位置,更新所有页面大小,更新边界页)
3、此时PageView已经开始Update,而且Update先于drawScene
4、PageVew在Update的autoScroll里开始更新每个Page的位置,_autoScrollDistance已经开始减少,但是边界也还没初始化,页面不动(出错1)
5、由于drawScene里面调用了doLayout,dolayout先开始它的3项工作,由于第一步的时候已经设置了_curPageIdx,所以第一项工作的时候,已经把页面位置更新到当前索引页位置(出错2)
6、由于autoScrollDistance还没为0,后续的Update中都是在第5步的页面位置上进行update,位置已经不正确了

不知道能不能提供一个像ScrollView一样的,Jump函数

这是个BUG,修改方法看附件

版主,你好,:856:

感觉这样子还是有问题,因为update已经开始在处理Scroll了,但是,边界页此时还没初始化,所以Update的Scroll会无效

可以看看第4点

你测试过还有问题吗?

恩,是的,按照你的修改,改完和预想的一样

void PageView::update(float dt)
{
if (_isAutoScrolling && !_doLayoutDirty)
{
this->autoScroll(dt);
}
}

这样改下就好了

直接在PageView里增加一个跳转页面的函数就可以了

void PageView::jumpToPage(ssize_t idx)
{
if (idx <0 || idx >= this->getPageCount())
{
return;
}
_curPageIdx = idx;
updateAllPagesPosition();
}