看了下UIPushButton的源代码,发现没有记录touch began的坐标点位置,导致如果在滚动视图中放置一个UIPushButton,然后拖动按钮之后按钮的click事件依然会触发。所以简单修改了一下UIPushButton的代码:
function UIPushButton:onTouch_(event)
local name, x, y = event.name, event.x, event.y
if name == "began" then
self.touchBeganX = x;
self.touchBeganY = y;
self:_setAutoScale(UIPushButton.BIG_SCALE)
if not self:checkTouchInSprite_(x, y) then return false end
self.fsm_:doEvent("press")
self:dispatchEvent({name = UIButton.PRESSED_EVENT, x = x, y = y, touchInTarget = true})
return true
end
local touchInTarget = self:checkTouchInSprite_(self.touchBeganX, self.touchBeganY)