cocos2.x PageView组件scrollToPage无效,需要点击鼠标才时生效

一、问题现象

export default class PageViewTest  extends cc.Component {
    @property(cc.PageView)
    pageView: cc.PageView = null;
    onLoad() {
            for (let i = 0; i < 10; i++) {
                    let node = cc.instantiate(this.tankItem);
                    node.active = true;
                    this.pageView.addPage(node);
                    let sprite = node.getChildByName("tankicon").getComponent(cc.Sprite);
                    this.tankList[i] = sprite.node;
                    sprite.node.scale = 1.5;
                    sprite.node.color = GameVoManager.getInstance.gameInfo.topTankId >= (i + 1) ? cc.Color.WHITE : cc.Color.BLACK;
                    Manager.spAtlas.getTankIconByResPath(data.icon).then(res => {
                        if (!res) return;
                        sprite.spriteFrame = res;
                    });
            }
        }
		this.pageView.scrollToPage(this.useTankId - 1, 0.1);   
    }

在这段代码中

this.pageView.scrollToPage(this.useTankId - 1, 0.1)

无法生效,进入界面后需要点击鼠标才能生效。scrollToPage第一个参数表示页面id、第二参数表示页面滚动耗时,并不是延迟生效时间:

		!#zh 滚动到指定页面
		@param idx index of page.
		@param timeInSecond scrolling time 
		*/
		scrollToPage(idx: number, timeInSecond: number): void;	

二、解决方案

  通过调用 schedule 函数,延迟执行,scrollToPage可不用点击鼠标即可生效

        this.pageView.schedule(()=>{
            this.pageView.scrollToPage(this.useTankId - 1,0.1);
        },0.1);

二、原因剖析

  这可能是因为 PageView 组件在初始化时没有正确设置,或者是因为页面渲染或者事件处理导致的问题。
  这里采用延迟调用的方式规避了。如何采用更好的方案,确保 scrollToPage 方法可以直接调用,希望有了解的高手可以分享下。

参考文档:

cocosCreator中PageView自动翻页

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值