问题 :
屏幕旋转之后,滑动列表还是需要上下滑动.
解决思路 :
给滑动列表创建一个可以盖住它的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) => { })
}
}