ScrollView由視窗區域(裁剪區域)和內容區域組成,內容區域叫innerContainer。
視窗區域范圍:get/setContentSize
內容區域:get/setInnerContainerSize,
ScrollView怎樣排版?對ScrollView而言,innerContainer就是一個大矩形,這個矩形的范圍就是滾動的范圍,如果內容寬大於視窗 innerContainer則可以在x向移動。同理決定是否可在y向移動。
移動范圍是多少?移動范圍是0對應innerContainer的上(左)邊緣位於視窗區域的上(左)邊緣,1對應innerContainer的下(右)邊緣位於視窗區域的下(右)邊緣。
ScrollView中的物體怎樣定位?0,0點是innerContainer的anchor點,不經過設置的話是在其中心。
因此,正確的ScrollView中的內容填充是這樣的:
1 計算好內容的大小(寬高)
2 對內容進行排布,anchor為(0.5, 0.5)時,在(-0.5大小,0.5大小)的范圍內排布。
3 排布完成,調用scrollView->setInnerContainerSize將內容大小設置進去。
ScrollView中的按鈕不觸發點擊事件的方法:
1 設置isSwallowTouch(false),否則在按鈕上拖動不會拖動ScrollView。
2 設置點擊事件不要用addClickHandler,而是addTouchEventListener,用lambda表達式這么寫:
bool moved = false; btn->addTouchEventListener([this, moved](Ref*, Widget::TouchEventType type) mutable { switch(type) { case Widget::TouchEventType::BEGAN: moved = false; break; case Widget::TouchEventType::MOVED: moved = true; break; case Widget::TouchEventType::ENDED: if(!moved) this->onClick(); break; default: break; } });