美文网首页程序之路
ios 横屏 旋转 滑动列表问题

ios 横屏 旋转 滑动列表问题

作者: kingURL | 来源:发表于2019-07-04 16:05 被阅读0次

问题 :

屏幕旋转之后,滑动列表还是需要上下滑动.

解决思路 :

给滑动列表创建一个可以盖住它的Node,给node添加触摸监听
这样根据node上的滑动变化去操作滑动列表滑动的位置.

所以做了一个通用的文件 : 文件直接添加到滑动列表所在的node节点上就可以


****   注意:   这个滑动列表是有前提 -- 它的锚点必须设置成 (0.5, 1) 才行这样才能直接使用这个文件,不然文件中需要有一些地方的修改  

代码

const { ccclass, property } = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    /**滚动到目标坐标的时间 (刷新的过程所需要的时间 -- 等于零,直接跳到对应位置,没有过渡) */
    @property
    delayTime: number = 0;
    
    /** 是否立即刷新(滑动结束刷新,还是时刻刷新滑动列表) */
    @property
    quickUpdate: boolean = false;
    
    startPos = null;
    endPos = null;
    eScrollView = null;
    disHight = null;
    disLow = 0;
    btnNode = null;

    onLoad() {

        /**创建一个感应的 button */
        this.btnNode = new cc.Node();
        this.btnNode.setAnchorPoint(0.5, 1);
        this.btnNode.setPosition(this.node.getPosition());
        this.btnNode.setContentSize(this.node.getContentSize());
        this.node.parent.addChild(this.btnNode);

        this.eScrollView = this.node.getComponent(cc.ScrollView);

        /**手指点击滑动 */
        this.btnNode.on(cc.Node.EventType.TOUCH_START, (event) => {
            let point = event.touch.getLocation();
            this.startPos = point;
        })

        this.btnNode.on(cc.Node.EventType.TOUCH_MOVE, (event) => {
            if (!this.quickUpdate) return;
            let point = event.touch.getLocation();
            this.endPos = point;
            let subPosX = this.startPos.x - this.endPos.x;
            let targetPos = this.eScrollView.getScrollOffset();
            targetPos.y += subPosX;
            if (targetPos.y >= this.disHight) targetPos.y = this.disHight;
            if (targetPos.y <= 0) targetPos.y = 0;
            this.eScrollView.scrollToOffset(targetPos, this.delayTime);
        })

        this.btnNode.on(cc.Node.EventType.TOUCH_END, (event) => {
            let point = event.touch.getLocation();
            this.endPos = point;
            let subPosX = this.startPos.x - this.endPos.x;
            let targetPos = this.eScrollView.getScrollOffset();
            targetPos.y += subPosX;
            if (targetPos.y >= this.disHight) targetPos.y = this.disHight;
            if (targetPos.y <= 0) targetPos.y = 0;
            this.eScrollView.scrollToOffset(targetPos, this.delayTime);
        })

        this.btnNode.on(cc.Node.EventType.TOUCH_CANCEL, (event) => { })

        /**获得最大偏移量 */
        this.eScrollView.scrollToBottom();
        this.disHight = this.eScrollView.getScrollOffset().y;
        this.eScrollView.scrollToTop();
    }


    onDestroy() {
        this.btnNode.on(cc.Node.EventType.TOUCH_END, (event) => { })
        this.btnNode.on(cc.Node.EventType.TOUCH_MOVE, (event) => { })
        this.btnNode.on(cc.Node.EventType.TOUCH_START, (event) => { })
        this.btnNode.on(cc.Node.EventType.TOUCH_CANCEL, (event) => { })
    }

}

相关文章

网友评论

    本文标题:ios 横屏 旋转 滑动列表问题

    本文链接:https://www.haomeiwen.com/subject/lajrhctx.html