在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
继承上述类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值