侧边栏

This commit is contained in:
xiekaidong 2023-09-04 16:06:42 +08:00
parent e7039061a8
commit 0cdb8515ca
2 changed files with 94 additions and 5 deletions

View File

@ -152,6 +152,10 @@ function SideBarBaseCellComp:setAnchoredPositionY(y)
self.baseObject:setAnchoredPositionY(y) self.baseObject:setAnchoredPositionY(y)
end end
function SideBarBaseCellComp:setAnchoredPositionX(x)
self.baseObject:setAnchoredPositionX(x)
end
function SideBarBaseCellComp:setVisible(visible) function SideBarBaseCellComp:setVisible(visible)
self.visible = visible self.visible = visible
self.baseObject:setVisible(visible) self.baseObject:setVisible(visible)

View File

@ -390,7 +390,14 @@ end
function MainCityUI:initLeftRightBtns() function MainCityUI:initLeftRightBtns()
self.leftNode = self.uiMap["main_ui.left_node"] self.leftNode = self.uiMap["main_ui.left_node"]
self.leftSideBar = self.uiMap["main_ui.left_node.side_bar"] self.leftSideBar = self.uiMap["main_ui.left_node.side_bar"]
self.leftSideBar:setAnchorMin(0, 1)
self.leftSideBar:setAnchorMax(0, 1)
self.leftSideBar:getTransform().pivot = BF.Vector2(0, 1)
local addY = SafeAreaManager:getNotchScreenHeight()
self.leftSideBar:setAnchoredPosition(17, -280 - addY)
self.leftArrowBtn = self.uiMap["main_ui.left_node.arrow_node"] self.leftArrowBtn = self.uiMap["main_ui.left_node.arrow_node"]
self.leftArrowBtn:setAnchorMin(0, 1)
self.leftArrowBtn:setAnchorMax(0, 1)
self.leftArrowBtn:addClickListener(function() self.leftArrowBtn:addClickListener(function()
self:openOrCloseLeftSideBar() self:openOrCloseLeftSideBar()
end) end)
@ -398,7 +405,13 @@ function MainCityUI:initLeftRightBtns()
self.rightNode = self.uiMap["main_ui.right_node"] self.rightNode = self.uiMap["main_ui.right_node"]
self.rightSideBar = self.uiMap["main_ui.right_node.side_bar"] self.rightSideBar = self.uiMap["main_ui.right_node.side_bar"]
self.rightSideBar:setAnchorMin(1, 1)
self.rightSideBar:setAnchorMax(1, 1)
self.rightSideBar:getTransform().pivot = BF.Vector2(1, 1)
self.rightSideBar:setAnchoredPosition(-17, -280 - addY)
self.rightArrowBtn = self.uiMap["main_ui.right_node.arrow_node"] self.rightArrowBtn = self.uiMap["main_ui.right_node.arrow_node"]
self.rightArrowBtn:setAnchorMin(1, 1)
self.rightArrowBtn:setAnchorMax(1, 1)
self.rightArrowBtn:addClickListener(function() self.rightArrowBtn:addClickListener(function()
self:openOrCloseRightSideBar() self:openOrCloseRightSideBar()
end) end)
@ -407,6 +420,7 @@ function MainCityUI:initLeftRightBtns()
self.sideBarCellObject = self.uiMap["main_ui.cache_node.side_bar_cell"] self.sideBarCellObject = self.uiMap["main_ui.cache_node.side_bar_cell"]
local w, h = self.sideBarCellObject:fastGetSizeDelta() local w, h = self.sideBarCellObject:fastGetSizeDelta()
self.sideBarHeight = h self.sideBarHeight = h
self.sideBarMaxCount = 4
if self.leftBarList == nil then if self.leftBarList == nil then
self.leftBarList = {} self.leftBarList = {}
end end
@ -478,6 +492,8 @@ function MainCityUI:refreshLeftBtns()
if cell == nil then if cell == nil then
cell = self:addSideBarCellComp(v) cell = self:addSideBarCellComp(v)
cell:getBaseObject():setParent(self.leftSideBar, false) cell:getBaseObject():setParent(self.leftSideBar, false)
cell:getBaseObject():setAnchorMin(0, 1)
cell:getBaseObject():setAnchorMax(0, 1)
end end
cell:initWithParentUI(self, v, true) cell:initWithParentUI(self, v, true)
table.insert(self.leftBarList, cell) table.insert(self.leftBarList, cell)
@ -490,16 +506,25 @@ function MainCityUI:refreshLeftBtns()
end end
self.leftNode:setAnchoredPositionX(0) self.leftNode:setAnchoredPositionX(0)
local y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2 local y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2
local x = 60
local maxCount = self.sideBarMaxCount
local minY = y
local bgSizeX = 112
local otherColumn = false
if isClose then -- 只显示3个 if isClose then -- 只显示3个
local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT
for i = 1, minCount do for i = 1, minCount do
local sideBarBtn = self.leftBarList[i] local sideBarBtn = self.leftBarList[i]
if i <= sideBarShowCount then if i <= sideBarShowCount then
sideBarBtn:setAnchoredPositionX(x)
sideBarBtn:setAnchoredPositionY(y) sideBarBtn:setAnchoredPositionY(y)
sideBarBtn:refresh() sideBarBtn:refresh()
sideBarBtn:setActive(true) sideBarBtn:setActive(true)
sideBarBtn:setVisible(true) sideBarBtn:setVisible(true)
y = y - self.sideBarHeight - SIDE_BAR_INTERVAL y = y - self.sideBarHeight - SIDE_BAR_INTERVAL
if minY > y then
minY = y
end
end end
end end
for i = minCount + 1, sideBarShowCount do for i = minCount + 1, sideBarShowCount do
@ -509,25 +534,49 @@ function MainCityUI:refreshLeftBtns()
end end
else else
for k, v in ipairs(self.leftBarList) do for k, v in ipairs(self.leftBarList) do
maxCount = maxCount - 1
v:setAnchoredPositionX(x)
v:setAnchoredPositionY(y) v:setAnchoredPositionY(y)
v:refresh() v:refresh()
v:setActive(true) v:setActive(true)
v:setVisible(true) v:setVisible(true)
y = y - self.sideBarHeight - SIDE_BAR_INTERVAL y = y - self.sideBarHeight - SIDE_BAR_INTERVAL
if minY > y then
minY = y
end
if maxCount == 0 then -- 换行
y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2
x = x + 110
bgSizeX = 228
otherColumn = true
end
end end
end end
if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then -- 小于3个不显示箭头 if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then -- 小于3个不显示箭头
y = y + self.sideBarHeight / 2 y = y + self.sideBarHeight / 2
self.leftSideBar:setSizeDeltaY(-y) if minY > y then
minY = y
end
self.leftSideBar:setSizeDeltaX(bgSizeX)
self.leftSideBar:setSizeDeltaY(-minY)
self.leftArrowBtn:stopClickAnimation() self.leftArrowBtn:stopClickAnimation()
self.leftArrowBtn:setVisible(false) self.leftArrowBtn:setVisible(false)
else else
local arrowHeight = self.leftArrowBtn:getRectHeight() local arrowHeight = self.leftArrowBtn:getRectHeight()
y = y + self.sideBarHeight/2 - SIDE_BAR_ARROW_INTERVAL - arrowHeight y = y + self.sideBarHeight/2 - SIDE_BAR_ARROW_INTERVAL - arrowHeight
self.leftSideBar:setSizeDeltaY(-y) if minY > y then
minY = y
end
self.leftSideBar:setSizeDeltaX(bgSizeX)
self.leftSideBar:setSizeDeltaY(-minY)
self.leftArrowImg:setLocalScale(1, isClose and -1 or 1, 1) self.leftArrowImg:setLocalScale(1, isClose and -1 or 1, 1)
self.leftArrowBtn:setVisible(true) self.leftArrowBtn:setVisible(true)
self.leftArrowBtn:setAnchoredPositionY(self.leftSideBar:fastGetAnchoredPositionY() + y + arrowHeight/2 + SIDE_BAR_BORDER_OFFSET) self.leftArrowBtn:setAnchoredPositionY(self.leftSideBar:fastGetAnchoredPositionY() + minY + arrowHeight/2 + SIDE_BAR_BORDER_OFFSET)
if otherColumn then
self.leftArrowBtn:setAnchoredPositionX(133)
else
self.leftArrowBtn:setAnchoredPositionX(73)
end
end end
end end
@ -558,6 +607,8 @@ function MainCityUI:refreshRightBtns()
if cell == nil then if cell == nil then
cell = self:addSideBarCellComp(v) cell = self:addSideBarCellComp(v)
cell:getBaseObject():setParent(self.rightSideBar, false) cell:getBaseObject():setParent(self.rightSideBar, false)
cell:getBaseObject():setAnchorMin(1, 1)
cell:getBaseObject():setAnchorMax(1, 1)
end end
cell:initWithParentUI(self, v, false) cell:initWithParentUI(self, v, false)
table.insert(self.rightBarList, cell) table.insert(self.rightBarList, cell)
@ -570,16 +621,25 @@ function MainCityUI:refreshRightBtns()
end end
self.rightNode:setAnchoredPositionX(0) self.rightNode:setAnchoredPositionX(0)
local y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2 local y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2
local x = -60
local maxCount = self.sideBarMaxCount
local minY = y
local bgSizeX = 112
local otherColumn = false
if isClose then -- 只显示一个 if isClose then -- 只显示一个
local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT
for i = 1, minCount do for i = 1, minCount do
local sideBarBtn = self.rightBarList[i] local sideBarBtn = self.rightBarList[i]
if i <= sideBarShowCount then if i <= sideBarShowCount then
sideBarBtn:setAnchoredPositionX(x)
sideBarBtn:setAnchoredPositionY(y) sideBarBtn:setAnchoredPositionY(y)
sideBarBtn:refresh() sideBarBtn:refresh()
sideBarBtn:setActive(true) sideBarBtn:setActive(true)
sideBarBtn:setVisible(true) sideBarBtn:setVisible(true)
y = y - self.sideBarHeight - SIDE_BAR_INTERVAL y = y - self.sideBarHeight - SIDE_BAR_INTERVAL
if minY > y then
minY = y
end
end end
end end
for i = minCount + 1, sideBarShowCount do for i = minCount + 1, sideBarShowCount do
@ -589,25 +649,50 @@ function MainCityUI:refreshRightBtns()
end end
else else
for k, v in ipairs(self.rightBarList) do for k, v in ipairs(self.rightBarList) do
maxCount = maxCount - 1
v:setAnchoredPositionX(x)
v:setAnchoredPositionY(y) v:setAnchoredPositionY(y)
v:refresh() v:refresh()
v:setActive(true) v:setActive(true)
v:setVisible(true) v:setVisible(true)
y = y - self.sideBarHeight - SIDE_BAR_INTERVAL y = y - self.sideBarHeight - SIDE_BAR_INTERVAL
if minY > y then
minY = y
end
if maxCount == 0 then -- 换行
y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2
x = x - 110
bgSizeX = 228
otherColumn = true
end
end end
end end
if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then
y = y + self.sideBarHeight / 2 y = y + self.sideBarHeight / 2
self.rightSideBar:setSizeDeltaY(-y) y = y + self.sideBarHeight / 2
if minY > y then
minY = y
end
self.rightSideBar:setSizeDeltaX(bgSizeX)
self.rightSideBar:setSizeDeltaY(-minY)
self.rightArrowBtn:stopClickAnimation() self.rightArrowBtn:stopClickAnimation()
self.rightArrowBtn:setVisible(false) self.rightArrowBtn:setVisible(false)
else else
local arrowHeight = self.rightArrowBtn:getRectHeight() local arrowHeight = self.rightArrowBtn:getRectHeight()
y = y + self.sideBarHeight / 2 - SIDE_BAR_ARROW_INTERVAL - arrowHeight y = y + self.sideBarHeight / 2 - SIDE_BAR_ARROW_INTERVAL - arrowHeight
self.rightSideBar:setSizeDeltaY(-y) if minY > y then
minY = y
end
self.rightSideBar:setSizeDeltaX(bgSizeX)
self.rightSideBar:setSizeDeltaY(-minY)
self.rightArrowImg:setLocalScale(1, isClose and -1 or 1, 1) self.rightArrowImg:setLocalScale(1, isClose and -1 or 1, 1)
self.rightArrowBtn:setVisible(true) self.rightArrowBtn:setVisible(true)
self.rightArrowBtn:setAnchoredPositionY(self.rightSideBar:fastGetAnchoredPositionY() + y + arrowHeight/2 + SIDE_BAR_BORDER_OFFSET) self.rightArrowBtn:setAnchoredPositionY(self.rightSideBar:fastGetAnchoredPositionY() + y + arrowHeight/2 + SIDE_BAR_BORDER_OFFSET)
if otherColumn then
self.rightArrowBtn:setAnchoredPositionX(-133)
else
self.rightArrowBtn:setAnchoredPositionX(-73)
end
end end
end end