You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 line
6.8 KiB

  1. local UIView = class("UIView" ,
  2. function()
  3. local scene = cc.Scene:create("UIView");
  4. scene:setContentSize(app.mainScene:getContentSize());
  5. scene:setAnchorPoint(cc.p(0,0));
  6. return scene;
  7. end
  8. )
  9. function UIView:ctor()
  10. local function onNodeEvent(node , eventType)
  11. if eventType == cc.NodeEvent.OnEnterTransitionDidFinish then
  12. print("进入" , self.class.__cname);
  13. self:onEnter()
  14. app:dispatchEvent({name = "enter" , view = self , className = self.class.__cname});
  15. elseif eventType == cc.NodeEvent.OnExitTransitionDidStart then
  16. print("开始退出" , self.class.__cname);
  17. -- 这个是做view退出前的一些清空操作,修改这里的话最好找ship探讨下
  18. self:OnExitTransitionDidStart()
  19. elseif eventType == cc.NodeEvent.OnExit then
  20. print("退出" , self.class.__cname);
  21. self:onExit()
  22. AllViews[self] = nil
  23. app:dispatchEvent({name = "exit" , view = self , className = self.class.__cname});
  24. end
  25. end
  26. self:addNodeEventListener(onNodeEvent)
  27. -- 统计所有的View
  28. AllViews[self] = self
  29. -- 当前view里面等待窗口的引用计数
  30. self.showWaitDialogCount = 0
  31. -- 当前View里面显示透明蒙版的计数
  32. self.transparencyMaskCount = 0
  33. self.transparencyMask = nil
  34. -- 淡入动画开始阻止点击事件的次数
  35. self.preventTouchByFadeIn = 0
  36. -- fadeInBegin的时候设置成true,fadeInEnd之后设置为false
  37. self.isFadeIn = nil;
  38. end
  39. -- 淡入动画开始播放时触发一个事件
  40. function UIView:fadeInBegin()
  41. print("淡入动画开始播放:" .. self.class.__cname)
  42. -- 设置状态
  43. self.isFadeIn = true;
  44. -- 派发战场进入事件
  45. app:dispatchEvent({name = "fadeInBegin" , view = self , className = self.class.__cname});
  46. -- 如果有外部设置了阻止触摸事件则在淡入的过程中需要阻止
  47. if self.class.__cname ~= "" and hasPreventTouchByFadeIn(self.class.__cname) then
  48. -- 显示透明蒙版
  49. self:showTransparencyMask()
  50. self.preventTouchByFadeIn = self.preventTouchByFadeIn + 1
  51. removePreventTouchByFadeIn(self.class.__cname)
  52. end
  53. end
  54. -- 淡入动画播放完毕时触发一个事件
  55. function UIView:fadeInEnd()
  56. print("淡入动画播放完毕:" .. self.class.__cname)
  57. -- 设置状态
  58. self.isFadeIn = false;
  59. if self.class.__cname ~= "" and self.preventTouchByFadeIn > 0 then
  60. while self.preventTouchByFadeIn > 0 do
  61. -- 隐藏透明蒙版
  62. self:closeTransparencyMask()
  63. self.preventTouchByFadeIn = self.preventTouchByFadeIn - 1
  64. end
  65. end
  66. -- 派发淡入动画结束事件
  67. app:dispatchEvent({name = "fadeInEnd" , view = self , className = self.class.__cname});
  68. end
  69. -- 淡出动画开始播放时
  70. function UIView:fadeOutBegin()
  71. print("淡出动画开始播放:" .. self.class.__cname)
  72. -- 派发战场进入事件
  73. app:dispatchEvent({name = "fadeOutBegin" , view = self , className = self.class.__cname});
  74. end
  75. -- 显示模态对话框窗口,并不能关闭的,阻挡鼠标消息
  76. function UIView:showWaitDialog(uiView, transparency, useGlobalFadeInOut)
  77. app:_showDialog(uiView, transparency, useGlobalFadeInOut, false , self);
  78. end
  79. -- 显示模态对话框窗口,并不能关闭的,阻挡鼠标消息
  80. function UIView:showWaitUI(ui, transparency, useGlobalFadeInOut)
  81. local uiView = import("luaScript.Views.UIView"):new();
  82. uiView.ui = ui;
  83. uiView:addChild(ui);
  84. app:_showDialog(uiView, transparency, useGlobalFadeInOut, false , self);
  85. return uiView;
  86. end
  87. -- 显示模态对话框窗口
  88. function UIView:showDialog(uiView, transparency, useGlobalFadeInOut)
  89. app:_showDialog(uiView, transparency, useGlobalFadeInOut, true , self);
  90. end
  91. -- 显示模态对话框窗口,并不能关闭的,阻挡鼠标消息
  92. function UIView:showUI(ui, transparency, useGlobalFadeInOut)
  93. local uiView = import("luaScript.Views.UIView"):new();
  94. uiView.ui = ui;
  95. uiView:addChild(ui);
  96. app:_showDialog(uiView, transparency, useGlobalFadeInOut, true, self);
  97. return uiView;
  98. end
  99. -- 在自己里面显示一个透明的蒙版,阻挡一切的点击事件
  100. function UIView:showTransparencyMask()
  101. -- 加到当前的view里面去
  102. if not self.transparencyMask then
  103. local mask = loadUI("res/ui/ui_common/TransparencyMask.ui")
  104. self.transparencyMask = mask
  105. self:addChild(mask)
  106. mask:setWorldPosition(cc.vec3(0,0,0))
  107. self.transparencyMaskCount = 1
  108. else
  109. self.transparencyMaskCount = self.transparencyMaskCount + 1
  110. end
  111. print("View[" .. self.class.__cname .. "]显示了阻挡触摸事件的透明蒙版,蒙版计数;" .. self.transparencyMaskCount)
  112. end
  113. -- 关闭透明的蒙版
  114. function UIView:closeTransparencyMask()
  115. if self.transparencyMaskCount <= 0 and not self.transparencyMask then
  116. print("View[" .. self.class.__cname .. "]没有显示透明蒙版,不需要关闭")
  117. return
  118. end
  119. self.transparencyMaskCount = self.transparencyMaskCount - 1
  120. print("View[" .. self.class.__cname .. "]关闭了阻挡触摸事件的透明蒙版,蒙版计数;" .. self.transparencyMaskCount)
  121. if self.transparencyMaskCount <= 0 then
  122. if not tolua.isnull(self.transparencyMask) then
  123. self.transparencyMask:removeFromParent()
  124. self.transparencyMask = nil
  125. end
  126. end
  127. end
  128. -- 清零引用计数,关闭透明的蒙版
  129. function UIView:closeAllTransparencyMask()
  130. if self.transparencyMaskCount <= 0 and not self.transparencyMask then
  131. print("View[" .. self.class.__cname .. "]没有显示透明蒙版,不需要关闭")
  132. return
  133. end
  134. if not tolua.isnull(self.transparencyMask) then
  135. self.transparencyMask:removeFromParent()
  136. self.transparencyMask = nil
  137. self.transparencyMaskCount = 0;
  138. print("View[" .. self.class.__cname .. "]关闭了所有阻挡触摸事件的透明蒙版,蒙版计数;" .. self.transparencyMaskCount)
  139. end
  140. end
  141. -- 淡入动画
  142. function UIView:fadeIn(fadeInEnd)
  143. if type(self.fadeInBegin) == "function" then
  144. self:fadeInBegin()
  145. end
  146. if self.ui and self.ui:hasClip("fadeIn") then
  147. local function inEnd()
  148. if fadeInEnd then
  149. fadeInEnd();
  150. end
  151. if type(self.fadeInEnd) == "function" then
  152. self:fadeInEnd()
  153. end
  154. end
  155. self.ui:playClip("fadeIn", inEnd)
  156. -- 开始播放淡入动画了
  157. if type(self.fadeInClipBegin) == "function" then
  158. self:fadeInClipBegin()
  159. end
  160. else
  161. if fadeInEnd then
  162. fadeInEnd();
  163. end
  164. -- 没有动画直接回调
  165. if type(self.fadeInEnd) == "function" then
  166. self:fadeInEnd()
  167. end
  168. end
  169. end
  170. -- 淡出动画
  171. function UIView:fadeOut(fadeOutEnd)
  172. if type(self.fadeOutBegin) == "function" then
  173. self:fadeOutBegin()
  174. end
  175. if self.ui and self.ui:hasClip("fadeOut") then
  176. local function outEnd()
  177. if fadeOutEnd then
  178. fadeOutEnd();
  179. end
  180. if type(self.fadeOutEnd) == "function" then
  181. self:fadeOutEnd()
  182. end
  183. end
  184. self.ui:playClip("fadeOut", outEnd)
  185. else
  186. if fadeOutEnd then
  187. fadeOutEnd();
  188. end
  189. -- 没有动画直接回调
  190. if type(self.fadeOutEnd) == "function" then
  191. self:fadeOutEnd()
  192. end
  193. end
  194. end
  195. function UIView:onEnter()
  196. end
  197. function UIView:OnExitTransitionDidStart()
  198. end
  199. function UIView:onExit()
  200. end
  201. return UIView;