|
- local UIView = class("UIView" ,
- function()
- local scene = cc.Scene:create("UIView");
- scene:setContentSize(app.mainScene:getContentSize());
- scene:setAnchorPoint(cc.p(0,0));
- return scene;
- end
- )
-
- function UIView:ctor()
- local function onNodeEvent(node , eventType)
- if eventType == cc.NodeEvent.OnEnterTransitionDidFinish then
- print("进入" , self.class.__cname);
- self:onEnter()
- app:dispatchEvent({name = "enter" , view = self , className = self.class.__cname});
- elseif eventType == cc.NodeEvent.OnExitTransitionDidStart then
- print("开始退出" , self.class.__cname);
- -- 这个是做view退出前的一些清空操作,修改这里的话最好找ship探讨下
- self:OnExitTransitionDidStart()
- elseif eventType == cc.NodeEvent.OnExit then
- print("退出" , self.class.__cname);
- self:onExit()
- AllViews[self] = nil
- app:dispatchEvent({name = "exit" , view = self , className = self.class.__cname});
- end
- end
- self:addNodeEventListener(onNodeEvent)
- -- 统计所有的View
- AllViews[self] = self
- -- 当前view里面等待窗口的引用计数
- self.showWaitDialogCount = 0
- -- 当前View里面显示透明蒙版的计数
- self.transparencyMaskCount = 0
- self.transparencyMask = nil
- -- 淡入动画开始阻止点击事件的次数
- self.preventTouchByFadeIn = 0
- -- fadeInBegin的时候设置成true,fadeInEnd之后设置为false
- self.isFadeIn = nil;
- end
-
- -- 淡入动画开始播放时触发一个事件
- function UIView:fadeInBegin()
- print("淡入动画开始播放:" .. self.class.__cname)
- -- 设置状态
- self.isFadeIn = true;
-
- -- 派发战场进入事件
- app:dispatchEvent({name = "fadeInBegin" , view = self , className = self.class.__cname});
- -- 如果有外部设置了阻止触摸事件则在淡入的过程中需要阻止
- if self.class.__cname ~= "" and hasPreventTouchByFadeIn(self.class.__cname) then
- -- 显示透明蒙版
- self:showTransparencyMask()
- self.preventTouchByFadeIn = self.preventTouchByFadeIn + 1
- removePreventTouchByFadeIn(self.class.__cname)
- end
- end
-
- -- 淡入动画播放完毕时触发一个事件
- function UIView:fadeInEnd()
- print("淡入动画播放完毕:" .. self.class.__cname)
- -- 设置状态
- self.isFadeIn = false;
-
- if self.class.__cname ~= "" and self.preventTouchByFadeIn > 0 then
- while self.preventTouchByFadeIn > 0 do
- -- 隐藏透明蒙版
- self:closeTransparencyMask()
- self.preventTouchByFadeIn = self.preventTouchByFadeIn - 1
- end
- end
- -- 派发淡入动画结束事件
- app:dispatchEvent({name = "fadeInEnd" , view = self , className = self.class.__cname});
- end
-
- -- 淡出动画开始播放时
- function UIView:fadeOutBegin()
- print("淡出动画开始播放:" .. self.class.__cname)
- -- 派发战场进入事件
- app:dispatchEvent({name = "fadeOutBegin" , view = self , className = self.class.__cname});
- end
-
- -- 显示模态对话框窗口,并不能关闭的,阻挡鼠标消息
- function UIView:showWaitDialog(uiView, transparency, useGlobalFadeInOut)
- app:_showDialog(uiView, transparency, useGlobalFadeInOut, false , self);
- end
-
- -- 显示模态对话框窗口,并不能关闭的,阻挡鼠标消息
- function UIView:showWaitUI(ui, transparency, useGlobalFadeInOut)
- local uiView = import("luaScript.Views.UIView"):new();
- uiView.ui = ui;
- uiView:addChild(ui);
- app:_showDialog(uiView, transparency, useGlobalFadeInOut, false , self);
- return uiView;
- end
-
- -- 显示模态对话框窗口
- function UIView:showDialog(uiView, transparency, useGlobalFadeInOut)
- app:_showDialog(uiView, transparency, useGlobalFadeInOut, true , self);
- end
-
- -- 显示模态对话框窗口,并不能关闭的,阻挡鼠标消息
- function UIView:showUI(ui, transparency, useGlobalFadeInOut)
- local uiView = import("luaScript.Views.UIView"):new();
- uiView.ui = ui;
- uiView:addChild(ui);
- app:_showDialog(uiView, transparency, useGlobalFadeInOut, true, self);
- return uiView;
- end
-
- -- 在自己里面显示一个透明的蒙版,阻挡一切的点击事件
- function UIView:showTransparencyMask()
- -- 加到当前的view里面去
- if not self.transparencyMask then
- local mask = loadUI("res/ui/ui_common/TransparencyMask.ui")
- self.transparencyMask = mask
- self:addChild(mask)
- mask:setWorldPosition(cc.vec3(0,0,0))
- self.transparencyMaskCount = 1
- else
- self.transparencyMaskCount = self.transparencyMaskCount + 1
- end
- print("View[" .. self.class.__cname .. "]显示了阻挡触摸事件的透明蒙版,蒙版计数;" .. self.transparencyMaskCount)
- end
-
- -- 关闭透明的蒙版
- function UIView:closeTransparencyMask()
- if self.transparencyMaskCount <= 0 and not self.transparencyMask then
- print("View[" .. self.class.__cname .. "]没有显示透明蒙版,不需要关闭")
- return
- end
-
- self.transparencyMaskCount = self.transparencyMaskCount - 1
- print("View[" .. self.class.__cname .. "]关闭了阻挡触摸事件的透明蒙版,蒙版计数;" .. self.transparencyMaskCount)
- if self.transparencyMaskCount <= 0 then
- if not tolua.isnull(self.transparencyMask) then
- self.transparencyMask:removeFromParent()
- self.transparencyMask = nil
- end
- end
- end
-
- -- 清零引用计数,关闭透明的蒙版
- function UIView:closeAllTransparencyMask()
- if self.transparencyMaskCount <= 0 and not self.transparencyMask then
- print("View[" .. self.class.__cname .. "]没有显示透明蒙版,不需要关闭")
- return
- end
-
-
- if not tolua.isnull(self.transparencyMask) then
- self.transparencyMask:removeFromParent()
- self.transparencyMask = nil
- self.transparencyMaskCount = 0;
- print("View[" .. self.class.__cname .. "]关闭了所有阻挡触摸事件的透明蒙版,蒙版计数;" .. self.transparencyMaskCount)
- end
-
- end
-
- -- 淡入动画
- function UIView:fadeIn(fadeInEnd)
- if type(self.fadeInBegin) == "function" then
- self:fadeInBegin()
- end
-
- if self.ui and self.ui:hasClip("fadeIn") then
- local function inEnd()
- if fadeInEnd then
- fadeInEnd();
- end
- if type(self.fadeInEnd) == "function" then
- self:fadeInEnd()
- end
- end
- self.ui:playClip("fadeIn", inEnd)
- -- 开始播放淡入动画了
- if type(self.fadeInClipBegin) == "function" then
- self:fadeInClipBegin()
- end
- else
- if fadeInEnd then
- fadeInEnd();
- end
- -- 没有动画直接回调
- if type(self.fadeInEnd) == "function" then
- self:fadeInEnd()
- end
- end
- end
-
- -- 淡出动画
- function UIView:fadeOut(fadeOutEnd)
- if type(self.fadeOutBegin) == "function" then
- self:fadeOutBegin()
- end
-
- if self.ui and self.ui:hasClip("fadeOut") then
- local function outEnd()
- if fadeOutEnd then
- fadeOutEnd();
- end
- if type(self.fadeOutEnd) == "function" then
- self:fadeOutEnd()
- end
- end
- self.ui:playClip("fadeOut", outEnd)
- else
- if fadeOutEnd then
- fadeOutEnd();
- end
- -- 没有动画直接回调
- if type(self.fadeOutEnd) == "function" then
- self:fadeOutEnd()
- end
- end
- end
-
- function UIView:onEnter()
-
- end
-
- function UIView:OnExitTransitionDidStart()
-
- end
-
- function UIView:onExit()
-
- end
-
- return UIView;
|