由於CCScrollView是cocos2d-x的中的控件,在quick-cocos2d-x中並沒有對應的UI,由於coco2d-x是觸摸基於優先級的,而quick-cocos2d-x是基於層級的,所以CCScrollView的觸摸事件與quick-cocos2d-x的觸摸機制不同會產生矛盾,會出問題。
1,在使用CCScrollView時,發現CCScrollView所在的視圖會覆蓋掉在其以下層級的視圖的觸摸事件:
即是CCScrollView所在的view1視圖層級比view2層級高,view2中的button按鈕就會接受不到點擊事件。
2,點擊CCScrollView的不可見區域仍可響應:
即:如果點擊ScrollItem:2應該在的位置區域2,區域2不在可見範圍,但仍然可以觸摸,響應點擊事件。
爲了解決以上問題,我們只需要對創建的CCScrollView對象再添加一條觸摸捕獲事件:
self.scrollView:setTouchEnabled(true)
self.scrollView:addNodeEventListener(cc.NODE_TOUCH_CAPTURE_EVENT, function(event)
if event.name == "began" then
local pos = self.scrollView:convertToNodeSpace(ccp(event.x, event.y))
if self.scrollView:getBoundingBox():containsPoint(pos) then
return true
else
return false
end
end
end)
以上代碼的意思是:給給創建的CCScrollView對象self.scrollView添加一條觸摸捕獲事件,只有在self.scrollView的可見大小範圍之內觸摸時,self.scrollView對象及其子對象才能接受到觸摸事件,否則不予觸摸。於是便可以解決以上兩個問題。
注:cc.NODE_TOUCH_CAPTURE_EVENT是quick-cocos2d-x迎合Cocos2d-x的一種做法,目的是與coco2d-x的觸摸機制相同,於是用這個觸摸捕獲事件,可以解決因quick-cocos2d-x的觸摸機制不同而帶來的問題。