棋牌游戏的结算界面由于局数不固定,需要动态设置ScrollView,并且在局数过多时默认播放一个滚动到底部的动画,达到比较好的显示和交互效果
cocos2d-lua引擎继承自Node的对象,如果使用了ignoreAnchorPointForPosition方法忽略锚点,那么默认锚点在控件左下角(0,0)位置,有点像directx的坐标体系
(这个就比较坑了)
局数较多的情况下,ScrollView的contentSize大于WidgetSize的大小,在弹账单界面的时候需要动态生成ContentView的值。
但是由于这个不太方便的锚点设置,所以如果在UI编辑器(Cocos Studio等)中设计好了显示界面(16局的结算界面),此时去裁剪ScrollView的大小,自然是裁去Y值较大的地方,也就是裁去ContentView的上半部分。。嗯。。很合理。。
所以如果在不使用纯代码构建UI界面的情况下,解决办法就是每次在裁剪ContentSize的值之后,重新设置ScrollView里每一个子控件的坐标。
WidgetSize大小可以显示8局的对战内容,而ContentView中有16局的对战信息。所以在局数大于8局的情况下setTouchEnabled(true).
如果在结算界面有9局的时候开启滚动并且裁剪ContentView,将会剪去ContentView中前8局的结算信息,于是界面上就只有一个第9局。。。
解决办法:
Init.将所有子控件,向下移动8个Cell的高度,因为前面8个Cell被裁了
child:setPosition(currentY - 8 * cellY) //没错是减号。。
Update.当局数大于8局时,每增加一局,向上移动一个Cell的高度
1.ScrollView:setInnerContentSize(cc.size(InnerContainerX, cellY * (roundIndex))) //增加ContentSize(裁剪区域减少);
2.child:setPosition(currentY + cellY)
最后ScrollToBottom(1,true)
完成