cococos 2 d-x 3.10にアップグレード後に忘れられたccui.PageView.pageTurningEvent()
2819 ワード
プロジェクトはcococos 2 d-x 3.10にアップグレードされ、すべて順調だと思っていたが、
ページをめくるときに
以前のcococos 2 d-xバージョンでは、ページをめくるときに
公式更新の前に、しばらく自分で救済するしかなかった.
これでページをめくると正常にlua端に通知されます.
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
を開くと、やはり問題が見つかりました.以前のcococos 2 d-xバージョンでは、ページをめくるときに
pageTurningEvent()
が呼び出され、この関数の内部でlua側に登録されたイベント処理関数が呼び出され、上の例であるpageViewEvent
が置かれていました.しかし、cococos 2 d-x 3.10では、この関数が呼び出されるのを忘れたようで、cocos 2 dxソースコード全体を検索し、この関数を呼び出す場所はありません.新旧バージョンと比較すると、PageView
のベースクラスはLayout
からListView
に調整され、今回の変更でページをめくる処理が漏れたのかもしれない.公式更新の前に、しばらく自分で救済するしかなかった.
/*
* 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();
}
これでページをめくると正常にlua端に通知されます.