Corona SDK中的Scrollview触摸事件?

时间:2012-05-15 15:04:01

标签: corona

我有一个带有一个孩子的滚动视图小部件(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 )

我需要的是一个基本的功能,很奇怪,电晕不支持或者我可能缺少某些东西

非常感谢

2 个答案:

答案 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 )