侧边栏

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)
end
function SideBarBaseCellComp:setAnchoredPositionX(x)
self.baseObject:setAnchoredPositionX(x)
end
function SideBarBaseCellComp:setVisible(visible)
self.visible = visible
self.baseObject:setVisible(visible)

View File

@ -390,7 +390,14 @@ end
function MainCityUI:initLeftRightBtns()
self.leftNode = self.uiMap["main_ui.left_node"]
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:setAnchorMin(0, 1)
self.leftArrowBtn:setAnchorMax(0, 1)
self.leftArrowBtn:addClickListener(function()
self:openOrCloseLeftSideBar()
end)
@ -398,7 +405,13 @@ function MainCityUI:initLeftRightBtns()
self.rightNode = self.uiMap["main_ui.right_node"]
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:setAnchorMin(1, 1)
self.rightArrowBtn:setAnchorMax(1, 1)
self.rightArrowBtn:addClickListener(function()
self:openOrCloseRightSideBar()
end)
@ -407,6 +420,7 @@ function MainCityUI:initLeftRightBtns()
self.sideBarCellObject = self.uiMap["main_ui.cache_node.side_bar_cell"]
local w, h = self.sideBarCellObject:fastGetSizeDelta()
self.sideBarHeight = h
self.sideBarMaxCount = 4
if self.leftBarList == nil then
self.leftBarList = {}
end
@ -478,6 +492,8 @@ function MainCityUI:refreshLeftBtns()
if cell == nil then
cell = self:addSideBarCellComp(v)
cell:getBaseObject():setParent(self.leftSideBar, false)
cell:getBaseObject():setAnchorMin(0, 1)
cell:getBaseObject():setAnchorMax(0, 1)
end
cell:initWithParentUI(self, v, true)
table.insert(self.leftBarList, cell)
@ -490,16 +506,25 @@ function MainCityUI:refreshLeftBtns()
end
self.leftNode:setAnchoredPositionX(0)
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个
local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT
for i = 1, minCount do
local sideBarBtn = self.leftBarList[i]
if i <= sideBarShowCount then
sideBarBtn:setAnchoredPositionX(x)
sideBarBtn:setAnchoredPositionY(y)
sideBarBtn:refresh()
sideBarBtn:setActive(true)
sideBarBtn:setVisible(true)
y = y - self.sideBarHeight - SIDE_BAR_INTERVAL
if minY > y then
minY = y
end
end
end
for i = minCount + 1, sideBarShowCount do
@ -509,25 +534,49 @@ function MainCityUI:refreshLeftBtns()
end
else
for k, v in ipairs(self.leftBarList) do
maxCount = maxCount - 1
v:setAnchoredPositionX(x)
v:setAnchoredPositionY(y)
v:refresh()
v:setActive(true)
v:setVisible(true)
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
if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then -- 小于3个不显示箭头
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:setVisible(false)
else
local arrowHeight = self.leftArrowBtn:getRectHeight()
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.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
@ -558,6 +607,8 @@ function MainCityUI:refreshRightBtns()
if cell == nil then
cell = self:addSideBarCellComp(v)
cell:getBaseObject():setParent(self.rightSideBar, false)
cell:getBaseObject():setAnchorMin(1, 1)
cell:getBaseObject():setAnchorMax(1, 1)
end
cell:initWithParentUI(self, v, false)
table.insert(self.rightBarList, cell)
@ -570,16 +621,25 @@ function MainCityUI:refreshRightBtns()
end
self.rightNode:setAnchoredPositionX(0)
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 -- 只显示一个
local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT
for i = 1, minCount do
local sideBarBtn = self.rightBarList[i]
if i <= sideBarShowCount then
sideBarBtn:setAnchoredPositionX(x)
sideBarBtn:setAnchoredPositionY(y)
sideBarBtn:refresh()
sideBarBtn:setActive(true)
sideBarBtn:setVisible(true)
y = y - self.sideBarHeight - SIDE_BAR_INTERVAL
if minY > y then
minY = y
end
end
end
for i = minCount + 1, sideBarShowCount do
@ -589,25 +649,50 @@ function MainCityUI:refreshRightBtns()
end
else
for k, v in ipairs(self.rightBarList) do
maxCount = maxCount - 1
v:setAnchoredPositionX(x)
v:setAnchoredPositionY(y)
v:refresh()
v:setActive(true)
v:setVisible(true)
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
if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then
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:setVisible(false)
else
local arrowHeight = self.rightArrowBtn:getRectHeight()
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.rightArrowBtn:setVisible(true)
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