3

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

我需要的是一个基本功能,奇怪的是电晕不支持它,或者我错过了一些东西

非常感谢

4

2 回答 2

4

谢谢你 SatheeshJM 你的代码给了我错误的结果,所以当我点击矩形外的任何地方时,“触摸结束事件”将被触发

但最后我有解决方案以防万一有人感兴趣

这是解决方案的增强版

感谢丹尼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 )
于 2012-05-20T15:33:54.353 回答
2

当您触摸矩形时,会触发一个带有“开始”阶段的触摸事件。

由于滚动视图已插入到滚动视图中,因此触摸事件被传播到滚动视图。所以现在,您的滚动视图接收“开始”事件和相应的“移动”和“结束”阶段。矩形不再接收触摸事件。

如果你真的想检测“结束”阶段,你可以这样做

 local function ontouch(event)
        if event.phase == "began" then 
            return true
        elseif event.phase == "ended" then
            print("event ended")
        end
  end

但是有一个问题!如果您通过按下矩形滚动它,滚动视图将不起作用。您必须通过按下滚动视图中的空白区域来滚动。

希望这是有道理的!

编辑:

好吧,其实是有办法的!您将事件焦点从滚动视图侦听器传递回矩形对象。

 --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 )
于 2012-05-15T23:50:36.390 回答