在node的触摸范围内有效 在其他地方点击关闭此node


-- 弹出框基类

local PopUpBase = class("PopUpBase", function ()
    return display.newLayer()
end)

--[[swallowTouches 是否能击穿]]
function PopUpBase:ctor(swallowTouches)
    if not swallowTouches then
        self.swallowTouches = false
    else
        self.swallowTouches = swallowTouches
    end

    self.clickCallBack = nil
    self:enableNodeEvents()
	self.node_bg = nil
	self.isTouched = nil
    self.isCanClick = true
    self.delayAction = nil

    local listener = cc.EventListenerTouchOneByOne:create()
    listener:setSwallowTouches(true)
    listener:registerScriptHandler(handler(self, self.onTouchBegan), cc.Handler.EVENT_TOUCH_BEGAN)
    listener:registerScriptHandler(handler(self, self.onTouchEnded), cc.Handler.EVENT_TOUCH_ENDED)
    local eventDispatcher = self:getEventDispatcher()
    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)
end

function PopUpBase:onTouchBegan(touch, event)
    if self.node_bg then
        local touchLocation = touch:getLocation()
        local locationInNode = self.node_bg:convertToNodeSpace(touchLocation)
        local s = self.node_bg:getContentSize()
        local rect = cc.rect(0, 0, s.width, s.height)
        self:onTouchBeganHandle(cc.rectContainsPoint(rect, locationInNode),touch)
        return true
    elseif self.swallowTouches == true then
        self:onTouchBeganHandle(true,touch)
        return true
    else
        return false 
    end
end

function PopUpBase:onTouchEnded(touch, event)
    if self.node_bg then
        local touchLocation = touch:getLocation()
        local locationInNode = self.node_bg:convertToNodeSpace(touchLocation)
        local s = self.node_bg:getContentSize()
        local rect = cc.rect(0, 0, s.width, s.height)
        self:onTouchEndedHandle(cc.rectContainsPoint(rect, locationInNode),locationInNode)
        return true
    elseif self.swallowTouches == true then
        self:onTouchEndedHandle(true,locationInNode)
        return true
    else
        return false
    end
end


function PopUpBase:onTouchBeganHandle(value,touch)
	self.isTouched = value
end

function PopUpBase:onTouchEndedHandle(value,locationInNode)
	if self.isTouched == value and value == false then
		self:onClose()
	end
end

function PopUpBase:onClose()
    MJ.remove(self)
end

function PopUpBase:setClickHandle(value)
    self.clickCallBack = value
end

function PopUpBase:onClickHandle(...)
    if self.clickCallBack then
        self.clickCallBack(...)
    end
end


function PopUpBase:setIsCanClick(value)
    self.isCanClick = value

    if self.delayAction then
        self:stopAction(self.delayAction)
        self.delayAction = nil
    end

    if self.isCanClick == false then
        self.delayAction = setTimeOut(self,function()
            self.isCanClick = true
        end,nil,10)
    end
end

function PopUpBase:getIsCanClick()
    return self.isCanClick
end

function PopUpBase:onExit()
end
return PopUpBase
继承上述类

猜你喜欢

转载自blog.csdn.net/ding_westbrook/article/details/80801453