2012-05-15 3 views
3

У меня есть виджет с прокруткой с одним ребенком (мой)Событие Touch Scrollview в 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 был вставлен в scrollview, событие касания распространяется на прокрутку. Итак, теперь ваш scrollview получает событие «начало» и соответствующие «перемещенные» и «завершенные» фазы. Прямоугольник не получает больше событий касания.

Если вы действительно хотите, чтобы обнаружить «закончилась» фазу, вы можете сделать это

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

Но есть улов. Прокрутка не будет работать, если вы прокрутите ее, нажав на прямоугольник. Вам придется прокручивать, нажав на пустое место в прокрутке.

надежды это сделал!

EDIT:

Хорошо, Существует на самом деле так! Вы передаете фокус события обратно объекту прямоугольника, из прослушивателя 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) 
Смежные вопросы