语言环境:
Cocos2dx 3.6
Lua 5.1
UI编辑器:Cocos Studio v2.0.6
问题:Scrollview控件滑动与其子控件监听发生冲突。
在点击子控件时,若在子控件上进行移动,父容器Scrollview不会执行滑动事件,像是被吞噬了一样
我的解决思路是不改底层,通过逻辑来控制。直接上代码:
local moveOrReq = nil --移动或请求
local countMove = 1 --移动计次
--监听事件:按钮(子控件)
local TouchEventByBtn = function (obj,e)
if e == ccui.TouchEventType.began then ---0
moveOrReq = nil
countMove = 1
elseif e == ccui.TouchEventType.moved then ---1
countMove = countMove + 1
if countMove > 10 then
moveOrReq = "move"
end
elseif e == ccui.TouchEventType.ended and moveOrReq == nil then ---2(重点:执行事件放这里)
--这里执行需要执行的按钮事件
elseif e == ccui.TouchEventType.canceled then ---3
moveOrReq = nil
end
end
以上代码是子控件的监听执行事件,这里子控件我采用的是Button,对每一个子控件进行监听,父容器Scrollview不监听
要注意:若出现无法移动的情况。多半是Button吞噬了Scrollview,在创建每一个子控件时加上这一句代码:
btn:setSwallowTouches(false)
以上的解决思路是我综合不改底层情况下在脚本层解决的最优思路,当然,若为了所有的情况都避免,可以自定义监听,也可以自己封装继承函数