From 78057035d4495c645638ccf2a3e22c96b5e88270 Mon Sep 17 00:00:00 2001 From: "DESKTOP-7R8JEQQ\\k" <1076390229@qq.com> Date: Sat, 5 Jul 2025 18:06:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Game/View/Common/BaseWindow.lua | 411 +++++++++--------- .../MyFamily/Component/item_myFamilyList.xml | 30 +- .../Family/MyFamily/com_myFamilyList.xml | 13 +- .../ART/base/Family/ui/Family_fui.bytes | Bin 112872 -> 113103 bytes 4 files changed, 239 insertions(+), 215 deletions(-) diff --git a/lua_probject/base_project/Game/View/Common/BaseWindow.lua b/lua_probject/base_project/Game/View/Common/BaseWindow.lua index 1f4356bd..260c51a1 100644 --- a/lua_probject/base_project/Game/View/Common/BaseWindow.lua +++ b/lua_probject/base_project/Game/View/Common/BaseWindow.lua @@ -2,31 +2,33 @@ --author:-- BaseWindow = { - --view description - _view = nil, + --view description + _view = nil, - --View 是否被销毁 - _is_destroy = false, - --是否播放动画 - _animation = true, - --弹出动画,0关闭,1左边,2右边 - _anim_pop = 0, - --关闭摧毁 - _close_destroy = false, + --View 是否被销毁 + _is_destroy = false, + --是否播放动画 + _animation = true, + --弹出动画,0关闭,1左边,2右边 + _anim_pop = 0, + --关闭摧毁 + _close_destroy = false, - --点击窗口以外关闭 - _close_zone = true, + --点击窗口以外关闭 + _close_zone = true, - --队列 - _queue = true, - --全屏 - _full = false, - --全屏偏移 - _full_offset = true, - --新窗口隐藏队列 - _new_hide = true, - --模糊组件对象 - _put_map = true + --队列 + _queue = true, + --全屏 + _full = false, + --缩放全屏 + _scale = false, + --全屏偏移 + _full_offset = true, + --新窗口隐藏队列 + _new_hide = true, + --模糊组件对象 + _put_map = true } --window 列表 @@ -41,216 +43,223 @@ local WindowQueue = { local M = BaseWindow function BaseWindow.new(url, blur_view) - local self = setmetatable({}, { __index = M }) - self.class = "BaseWindow" - -- self._blur_view = blur_view - self:init(url) - return self + local self = setmetatable({}, { __index = M }) + self.class = "BaseWindow" + -- self._blur_view = blur_view + self:init(url) + return self end local win_url = { - "ui://Common/Gcm_Window", - "ui://Common/Gcm_Window_Full" + "ui://Common/Gcm_Window", + "ui://Common/Gcm_Window_Full" } function M:init(url) - self._root_view = UIPackage.CreateObjectFromURL(self._full and win_url[2] or win_url[1]) - local contentPane = self._root_view:GetChild("contentPane") - local ctr_hide_bg = self._root_view:GetController("hide_bg") - if self._anim_pop ~= 0 then - ctr_hide_bg.selectedIndex = 1 - PopPanel = contentPane:GetChild("PopPanel") - else - ctr_hide_bg.selectedIndex = 0 - end - printlog(url) - self._view = UIPackage.CreateObjectFromURL(url) - printlog(self._view) - -- self._view.fairyBatching = true - local btn_close = self._view:GetChild("btn_close") - if (btn_close) then - btn_close.onClick:Set(function() - self:CloseEvent() - end) - end + self._root_view = UIPackage.CreateObjectFromURL(self._full and win_url[2] or win_url[1]) + local contentPane = self._root_view:GetChild("contentPane") + local ctr_hide_bg = self._root_view:GetController("hide_bg") + if self._anim_pop ~= 0 then + ctr_hide_bg.selectedIndex = 1 + PopPanel = contentPane:GetChild("PopPanel") + else + ctr_hide_bg.selectedIndex = 0 + end + printlog(url) + self._view = UIPackage.CreateObjectFromURL(url) + printlog(self._view) + -- self._view.fairyBatching = true + local btn_close = self._view:GetChild("btn_close") + if (btn_close) then + btn_close.onClick:Set(function() + self:CloseEvent() + end) + end - local win_mode = self._root_view:GetChild("win_mode") - win_mode.onClick:Set(function() - if not self._close_zone then - return - end - win_mode.touchable = false - self:CloseEvent() - end) - printlog("======================================", self._full) - if self._full then - local offset = get_offset(self._full_offset) - if self._anim_pop == 0 then - self._view:AddRelation(contentPane, RelationType.Size) - contentPane:AddChild(self._view) - else - contentPane:RemoveRelation(self._root_view, RelationType.Center_Center) - contentPane:AddRelation(self._root_view, RelationType.Middle_Middle) - PopPanel:AddChild(self._view) - local click_item = PopPanel:GetChild("click_item") - if self._anim_pop == 1 then - contentPane:AddRelation(self._root_view, RelationType.Left_Left) - self._view.x = 0 - elseif self._anim_pop == 2 then - contentPane:AddRelation(self._root_view, RelationType.Right_Right) - self._view.x = GRoot.inst.width - self._view.width - offset - end - print("lingmeng", PopPanel.height, self._view.height) - self._view.y = (PopPanel.height - self._view.height) * 0.5 - click_item.xy = self._view.xy - click_item.width = self._view.width - click_item.height = self._view.height - end - else - contentPane:AddChild(self._view) - contentPane.height = self._view.height - contentPane.width = self._view.width - contentPane:Center() - end - self._contentPane = contentPane - if self._put_map then - WindowMap[#WindowMap + 1] = self - end + local win_mode = self._root_view:GetChild("win_mode") + win_mode.onClick:Set(function() + if not self._close_zone then + return + end + win_mode.touchable = false + self:CloseEvent() + end) + printlog("======================================", self._full) + if self._full then + local offset = get_offset(self._full_offset) + if self._anim_pop == 0 then + self._view:AddRelation(contentPane, RelationType.Size) + contentPane:AddChild(self._view) + else + contentPane:RemoveRelation(self._root_view, RelationType.Center_Center) + contentPane:AddRelation(self._root_view, RelationType.Middle_Middle) + PopPanel:AddChild(self._view) + local click_item = PopPanel:GetChild("click_item") + if self._anim_pop == 1 then + contentPane:AddRelation(self._root_view, RelationType.Left_Left) + self._view.x = 0 + elseif self._anim_pop == 2 then + contentPane:AddRelation(self._root_view, RelationType.Right_Right) + self._view.x = GRoot.inst.width - self._view.width - offset + end + print("lingmeng", PopPanel.height, self._view.height) + self._view.y = (PopPanel.height - self._view.height) * 0.5 + click_item.xy = self._view.xy + click_item.width = self._view.width + click_item.height = self._view.height + end + else + contentPane:AddChild(self._view) + contentPane.height = self._view.height + contentPane.width = self._view.width + contentPane:Center() + end + self._contentPane = contentPane + if self._put_map then + WindowMap[#WindowMap + 1] = self + end end -- 显示窗口 function M:Show() - -- print("===========================================entershow",M.class) - local contentPane = self._root_view:GetChild("contentPane") - if self._anim_pop == 1 then - contentPane:GetTransition("left_pop"):Play() - elseif self._anim_pop == 2 then - contentPane:GetTransition("right_pop"):Play() - elseif self._animation then - local ani_in = self._root_view:GetTransition("in") - if ani_in then - ani_in:Play() - end - end - -- if self._blur_view then - -- BlurView(self._blur_view,true) - -- end + -- print("===========================================entershow",M.class) + local contentPane = self._root_view:GetChild("contentPane") + if self._anim_pop == 1 then + contentPane:GetTransition("left_pop"):Play() + elseif self._anim_pop == 2 then + contentPane:GetTransition("right_pop"):Play() + elseif self._animation then + local ani_in = self._root_view:GetTransition("in") + if ani_in then + ani_in:Play() + end + end + -- if self._blur_view then + -- BlurView(self._blur_view,true) + -- end - -- 判断当前窗口是否已经在队列中,如果在就不重复添加 - local _inQueue = false + -- 判断当前窗口是否已经在队列中,如果在就不重复添加 + local _inQueue = false - if self._new_hide then - for i = 1, #WindowQueue do - local win = WindowQueue[i] - if win == self then - _inQueue = true - end - if win._queue then - win._root_view:RemoveFromParent() - end - end - end - if self._queue and not _inQueue then - WindowQueue[#WindowQueue + 1] = self - end - AddPanel(self._root_view) - if self._full then - local offset = get_offset(self._full_offset) - self._contentPane.width = GRoot.inst.width - 2 * offset - self._contentPane.height = GRoot.inst.height - self._contentPane.x = offset - end + if self._new_hide then + for i = 1, #WindowQueue do + local win = WindowQueue[i] + if win == self then + _inQueue = true + end + if win._queue then + win._root_view:RemoveFromParent() + end + end + end + if self._queue and not _inQueue then + WindowQueue[#WindowQueue + 1] = self + end + AddPanel(self._root_view) + + if self._scale then + local scaleY = GRoot.inst.height / self._contentPane.height + local scaleX = GRoot.inst.width / self._contentPane.width + self._contentPane:SetScale(scaleX, scaleY) + end + + if self._full then + local offset = get_offset(self._full_offset) + self._contentPane.width = GRoot.inst.width - 2 * offset + self._contentPane.height = GRoot.inst.height + self._contentPane.x = offset + end end -- 关闭窗口 function M:Close() - -- if self._blur_view then - -- BlurView(self._blur_view,false) - -- end - if self._queue then - for i, v in ipairs(WindowQueue) do - if v == self then - table.remove(WindowQueue, i) - break - end - end - end + -- if self._blur_view then + -- BlurView(self._blur_view,false) + -- end + if self._queue then + for i, v in ipairs(WindowQueue) do + if v == self then + table.remove(WindowQueue, i) + break + end + end + end - if self._new_hide then - local win = WindowQueue[#WindowQueue] - if win and win._queue then - AddPanel(win._root_view) - end - end - self._root_view:RemoveFromParent() + if self._new_hide then + local win = WindowQueue[#WindowQueue] + if win and win._queue then + AddPanel(win._root_view) + end + end + self._root_view:RemoveFromParent() end local _destroy_all = false -- 销毁窗口 function M:Destroy() - if self._is_destroy then - return - end - if not _destroy_all then - self:Close() - if self._put_map then - for i, v in ipairs(WindowMap) do - if v == self then - table.remove(WindowMap, i) - break - end - end - end - end - self._is_destroy = true - self._root_view:Dispose() + if self._is_destroy then + return + end + if not _destroy_all then + self:Close() + if self._put_map then + for i, v in ipairs(WindowMap) do + if v == self then + table.remove(WindowMap, i) + break + end + end + end + end + self._is_destroy = true + self._root_view:Dispose() end function M:CloseEvent() - local win_mode = self._root_view:GetChild("win_mode") - if self._anim_pop == 0 then - if self._close_destroy then - self:Destroy() - else - self:Close() - win_mode.touchable = true - end - else - self:ActionWithAnim(function() - if self._close_destroy then - self:Destroy() - else - self:Close() - win_mode.touchable = true - end - end) - end + local win_mode = self._root_view:GetChild("win_mode") + if self._anim_pop == 0 then + if self._close_destroy then + self:Destroy() + else + self:Close() + win_mode.touchable = true + end + else + self:ActionWithAnim(function() + if self._close_destroy then + self:Destroy() + else + self:Close() + win_mode.touchable = true + end + end) + end end function M:ActionWithAnim(callback) - local contentPane = self._root_view:GetChild("contentPane") - if self._anim_pop == 1 then - contentPane:GetTransition("left_pop_back"):Play() - elseif self._anim_pop == 2 then - contentPane:GetTransition("right_pop_back"):Play() - end - if callback then - coroutine.start(function() - coroutine.wait(0.3) - callback() - end) - end + local contentPane = self._root_view:GetChild("contentPane") + if self._anim_pop == 1 then + contentPane:GetTransition("left_pop_back"):Play() + elseif self._anim_pop == 2 then + contentPane:GetTransition("right_pop_back"):Play() + end + if callback then + coroutine.start(function() + coroutine.wait(0.3) + callback() + end) + end end function BaseWindow.DestroyAll() - _destroy_all = true - local list = WindowMap - for i = 1, #list do - local win = list[i] - win:Destroy() - end - _destroy_all = false - WindowQueue = {} - WindowMap = {} + _destroy_all = true + local list = WindowMap + for i = 1, #list do + local win = list[i] + win:Destroy() + end + _destroy_all = false + WindowQueue = {} + WindowMap = {} end diff --git a/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml b/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml index 731e3ed1..e5346be2 100644 --- a/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml +++ b/wb_new_ui/assets/Family/MyFamily/Component/item_myFamilyList.xml @@ -1,15 +1,25 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml b/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml index 13afd530..507ddb5a 100644 --- a/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml +++ b/wb_new_ui/assets/Family/MyFamily/com_myFamilyList.xml @@ -11,13 +11,18 @@ - - - - + + + + + + + + + \ No newline at end of file diff --git a/wb_unity_pro/Assets/ART/base/Family/ui/Family_fui.bytes b/wb_unity_pro/Assets/ART/base/Family/ui/Family_fui.bytes index 573824bd2aa3a0c4d6085d58288dfc25e59dd83e..0f259f2bf50a5ae20a6f08e795598d09926c480d 100644 GIT binary patch delta 12869 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 delta 12674 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