QuickCell.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. local QuickCell = class("QuickCell", function()
  2. return ccui.Widget:create()
  3. end)
  4. -- self._data.wid default 100
  5. -- self._data.hei default 50
  6. -- self._data.anchor default {x=0, y=0}
  7. -- self._data.tick_interval default 0.02
  8. -- self._data.activeEvent default inview
  9. -- self._data.createCell default nil
  10. function QuickCell:ctor()
  11. self._entered = false
  12. self._active = true
  13. end
  14. function QuickCell:Create( data )
  15. local cell = QuickCell.new()
  16. if cell and cell:Init( data ) then
  17. return cell
  18. end
  19. return nil
  20. end
  21. function QuickCell:Init( data )
  22. self._data = data
  23. local wid = self._data.wid or 100
  24. local hei = self._data.hei or 50
  25. local anchor = self._data.anchor or {x=0, y=0}
  26. self._exitCallback = data.exitCallback
  27. self:setContentSize( {width = wid, height = hei} )
  28. self:setAnchorPoint( anchor )
  29. self:Active()
  30. return true
  31. end
  32. function QuickCell:Update( data )
  33. local createCell = data.createCell
  34. self._data.createCell = createCell
  35. -- 执行以下退出,方便立即刷新
  36. self:Exit()
  37. end
  38. function QuickCell:Enter()
  39. if self._entered then
  40. return false
  41. end
  42. self._entered = true
  43. local createCell = self._data.createCell
  44. local wid = self._data.wid or 100
  45. local hei = self._data.hei or 50
  46. if not createCell then
  47. return false
  48. end
  49. local cell = createCell()
  50. self:addChild( cell )
  51. cell:setAnchorPoint({x=0.5, y=0.5})
  52. cell:setPosition({x=wid/2, y=hei/2})
  53. refPositionByParent(cell)
  54. end
  55. function QuickCell:Exit()
  56. if not self._entered then
  57. return false
  58. end
  59. self._entered = false
  60. self:removeAllChildren()
  61. if self._exitCallback then
  62. self._exitCallback()
  63. end
  64. end
  65. function QuickCell:Refresh()
  66. if not self._active then
  67. return false
  68. end
  69. local active = true
  70. local activeEvent = self._data.activeEvent
  71. if activeEvent then
  72. active = activeEvent()
  73. elseif self._data.eventX then
  74. local viewSize = global.Director:getVisibleSize()
  75. local pos = self:getWorldPosition()
  76. local wid = self._data.wid or 100
  77. local hei = self._data.hei or 50
  78. active = not ( pos.x >= viewSize.width + wid or pos.x <= -wid )
  79. else
  80. local viewSize = global.Director:getVisibleSize()
  81. local pos = self:getWorldPosition()
  82. local wid = self._data.wid or 100
  83. local hei = self._data.hei or 50
  84. active = not ( pos.y >= viewSize.height + hei or pos.y <= -hei )
  85. end
  86. if active then
  87. self:Enter()
  88. else
  89. self:Exit()
  90. end
  91. end
  92. function QuickCell:Active()
  93. self._active = true
  94. local tick_interval = self._data.tick_interval or 0.02
  95. self:stopAllActions()
  96. schedule(self, function()
  97. self:Refresh()
  98. end, tick_interval)
  99. end
  100. function QuickCell:Sleep()
  101. self._active = false
  102. self:stopAllActions()
  103. end
  104. return QuickCell