我有一个带有一个孩子的滚动视图小部件(myrect)
我想检测触摸结束事件为“myrect”但是目前它只检测“开始”阶段!!
这是完整的代码
--main.lua
local widget = require "widget"
local myscrollview = widget.newScrollView{}
local myrect = display.newRect(0, 0, display.contentWidth, 68)
myrect:setFillColor(255,100,100,255)
myscrollview:insert(myrect)
local function ontouch(event)
if event.phase == "ended" then
print("event ended")
end
end
myrect:addEventListener( "touch", ontouch )
我需要的是一个基本的功能,很奇怪,电晕不支持或者我可能缺少某些东西
非常感谢
答案 0 :(得分:4)
谢谢你SatheeshJM你的代码如何给我错误的结果所以当我点击rect之外的任何地方时,“触摸结束事件”将被解雇
但最后我有解决方案以防万一有兴趣
这是解决方案的增强版本
感谢Danny http://developer.anscamobile.com/forum/2012/05/15/scrollview-problem
和Jonathan Beebe提供了这个有用的解决方法https://gist.github.com/1590908
local widget = require "widget"
local myscrollview = widget.newScrollView{}
local myrect = display.newRect(0, 0, display.contentWidth, 68)
myrect:setFillColor(255,100,100,255)
myscrollview:insert(myrect)
local function ontouch(event)
if event.phase == "moved" then
local dx = math.abs( event.x - event.xStart )
local dy = math.abs( event.y - event.yStart )
if dx > 5 or dy > 5 then
myscrollview:takeFocus( event )
end
elseif event.phase == "ended" then
display.getCurrentStage():setFocus(nil)
print("event ended")
end
return true
end
myrect:addEventListener( "touch", ontouch )
答案 1 :(得分:2)
当您触摸矩形时,会触发“开始”阶段的触摸事件。
由于滚动视图已插入到滚动视图中,因此触摸事件将传播到滚动视图。所以现在,你的scrollview接收“开始”事件和相应的“移动”和“结束”阶段。矩形不再接收触摸事件。
如果你真的想要检测“已结束”阶段,你可以这样做
local function ontouch(event)
if event.phase == "began" then
return true
elseif event.phase == "ended" then
print("event ended")
end
end
但有一个问题。如果您通过按矩形滚动它,滚动视图将无法工作。您必须通过按滚动视图中的空白区域进行滚动。
希望有意义!
编辑:
好的,实际上还有一种方法!您将事件焦点从scrollview侦听器传递回矩形对象。
--main.lua
local widget = require "widget"
local myrect
local function scrollviewListener(event)
display.getCurrentStage():setFocus(myrect)
end
local myscrollview = widget.newScrollView{listener = scrollviewListener}
myrect = display.newRect(0, 0, display.contentWidth, 68)
myrect:setFillColor(255,100,100,255)
myscrollview:insert(myrect)
local function ontouch(event)
if event.phase == "ended" then
print("event ended")
end
end
myrect:addEventListener( "touch", ontouch )