2012-05-15 63 views
3

我有一个孩子的滚动视图控件(myrect)Corona SDK中的滚动视图触摸事件?

我想检测“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

谢谢SatheeshJM你的代码为一些如何给我错误的结果,所以当我点击矩形以外的任何地方的“触摸式的事件”将被解雇

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

这里是解决方案的增强版本

感谢丹尼http://developer.anscamobile.com/forum/2012/05/15/scrollview-problem

和乔纳森比比这个有用的解决方法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) 
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)