cocosでスクロールビューを使う方法。
ここが詳しいスクロールは設定が少し多いので気をつけよう。
基本は以下のような形。
//作成、ビューサイズの設定(スクロールビュー自体のサイズ)
ScrollView* scrollView = ScrollView::create(viewSize);
//スクロール方向の指定
scrollView->setDirection(ScrollView::Direction::VERTICAL); //HORIZONTAL, BOTH もある
//スクロールビュー自体の座標指定. 左下位置を指定すること
scrollView->setPosition(pos);
//スクロールビューの中身となるノードを指定. このノード(と子孫のノード)がスクロールすることになる
//また、このノードのサイズがScrollViewのcontentSizeになる
scrollView->setContainer(containerNode);
//スクロールビューの中身のサイズを指定。containerNodeのサイズ通りなら、指定は不要
//内部的には、scrollViewのcontentSizeでなく、containerのcontentSizeをセットしている。だからsetContainer()の後に実行しないと反映されない
scrollView->setContentSize(contentSize);
//スクロールイベントを受け取るdelegateをセットする。通常はthisにして、このメソッドを実行しているLayerクラスを指定するのが自然だろう。
scrollView->setDelegate(delegate);
//このスクロールビューを親ノード(parent)の子につける。
parent->addChild(scrollView, order);
気をつけるポイント1
ScrollViewはsetAnchorPoint()が効かない(バグ?)。setPosition()は常に左下座標を指定すること。
気をつけるポイント2
スクロールビューは、デフォルトだと一番下までスクロールした状態になっている(VERTICALまたはBOTHの場合)。
普通は一番上にスクロールさせるはずだと思う。
scrollView->setContentOffset(scrollView->minContainerOffset(), false);
こうしておくと、一番上にスクロールした状態になる。
第2引数をtrueにすると、アニメーションしながらスクロールする。
通常はtrueがいいが、この場合は一瞬でスクロールさせたいのでfalseが適切。
スクロールビューは、たとえsetVisible(false)にして見えないようにしていても、タッチイベントに反応してスクロールしてしまう。
これに関する解決は別の記事で。
PR