项目升级到cocos2d-x 3.10,本想着一切顺利,但调试了一把发现PageView的翻页事件不正常了,代码如下:
local
pageViewEvent =
function
(sender, eventType)
if
eventType == ccui.PageViewEventType.turning
then
local
curPage = self.pageview:getCurrentPageIndex()
self.btnPrev:setVisible(curPage >
0
)
self.btnNext:setVisible(curPage < kTotalPages -
1
)
end
end
self.pageview:addEventListener(handler(self, self.pageViewEvent))
本意是在翻页的时候调用一下
pageViewEvent
,更新ui事件。但实际运行却没有更新。加了日志,发现函数没有被调用,这就奇怪了,看来问题极有可能出现在引擎内部,于是打开
UIPageView.cpp
,果然发现问题。
之前的cocos2d-x版本里,会在翻页的时候调用
pageTurningEvent()
,该函数内部会调用lua端注册的事件处理函数,放到上面的例子,即
pageViewEvent
。但在cocos2d-x 3.10里,该函数似乎被忘记调用了,查找整个cocos2dx源码,无一处调用该函数。对比新旧版本,
PageView
的基类由
Layout
调整为了
ListView
,也许在这次改动之中漏掉了对翻页的处理。
做如下修改,翻页的时候就可以正常通知到lua端了:
/*
* UIScrollView.h
*/
class
UIScrollView :
public
Layout {
...
protected
:
// 添加函数声明
virtual
void
autoScrollBegin(){}
}
/*
* UIScrollView.cpp
*/
void
ScrollView::startAutoScroll(
const
Vec2& deltaMove,
float
timeInSec,
bool
attenuated)
{
...
// 函数末尾添加调用
autoScrollBegin();
}
/*
* UIPageView.h
*/
class
PageView {
...
protected
:
// 添加声明
virtual
void
autoScrollBegin() override;
}
/*
* UIPageView.cpp
*/
// 添加实现,调用pageTurningEvent()
void
PageView::autoScrollBegin()
{
pageTurningEvent();
}