cocos PageView 被遗忘的ccui.PageView.pageTurningEvent()

项目升级到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();
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值