|
|
- local GameObject = GameObject
- local Util = Util
- local LuaEventListener = LuaEventListener
- local LuaClickListener = LuaClickListener
- local LuaDragListener = LuaDragListener
- local LuaDragExtendListener = LuaDragExtendListener
- local WordManager = WordManager
-
- --设置position位置
- function SetGlobalPosition(transform, x, y, z)
- if transform then
- Util.SetPosition(transform, x, y, z)
- end
- end
-
- function SetGlobalPosition3D(transform, x, y, z)
- if transform then
- Util.SetPosition(transform, x, z, y)
- end
- end
-
- function SetGlobalPositionX(transform, x)
- if transform then
- x = x or 0
- Util.SetPositionX(transform, x)
- end
- end
-
- function SetGlobalPositionY(transform, y)
- if transform then
- y = y or 0
- Util.SetPositionY(transform, y)
- end
- end
-
- function SetGlobalPositionZ(transform, z)
- if not IsNull(transform) then
- z = z or 0
- Util.SetPositionZ(transform, z)
- end
- end
-
- function GetGlobalPosition( transform )
- if not transform then return end
- return Util.GetPosition(transform)
- end
-
- function GetGlobalPositionXY( transform )
- if not transform then return end
- return transform:GetLocalPosXY()
- end
-
- function GetGlobalPositionX(transform)
- return Util.GetPositionX(transform)
- end
-
-
- function GetGlobalPositionY(transform)
- return Util.GetPositionY(transform)
- end
-
-
- function GetGlobalPositionZ(transform)
- return Util.GetPositionZ(transform)
- end
-
- --设置localPosition位置
- function SetLocalPosition(transform, x, y, z)
- if transform then
- x = x or 0
- y = y or x
- z = z or x
- Util.SetLocalPosition(transform, x, y, z)
- end
- end
-
- function SetLocalPositionX(transform, x)
- if transform then
- x = x or 0
- Util.SetLocalPositionX(transform, x)
- end
- end
-
- function SetLocalPositionY(transform, y)
- if transform then
- y = y or 0
- Util.SetLocalPositionY(transform, y)
- end
- end
-
- function SetLocalPositionZ(transform, z)
- if transform then
- z = z or 0
- Util.SetLocalPositionZ(transform, z)
- end
- end
-
- function GetAnchoredPosition( transform )
- if not transform then return end
- return Util.GetAnchoredPosition(transform)
- end
-
- function SetAnchoredPosition( transform, x, y )
- if not transform then return end
- return Util.SetAnchoredPosition(transform, x, y)
- end
-
- function SetAnchoredPositionX( transform, x )
- if not transform then return end
- local old_x, old_y = GetAnchoredPosition(transform)
- return Util.SetAnchoredPosition(transform, x, old_y)
- end
-
- function SetAnchoredPositionY( transform, y )
- if not transform then return end
- local old_x, old_y = GetAnchoredPosition(transform)
- return Util.SetAnchoredPosition(transform, old_x, y)
- end
-
- function GetLocalPosition( transform )
- if not transform then return end
- return Util.GetLocalPosition(transform)
- end
-
- function GetLocalPositionX(transform)
- return Util.GetLocalPositionX(transform)
- end
-
- function GetLocalPositionY(transform)
- return Util.GetLocalPositionY(transform)
- end
-
- function GetLocalPositionZ(transform)
- return Util.GetLocalPositionZ(transform)
- end
-
- --设置localscale
- function SetLocalScale(transform, x, y, z)
- if transform then
- x = x or 1
- y = y or x
- z = z or x
- Util.SetLocalScale(transform, x, y, z)
- end
- end
-
- function GetLocalScale(transform)
- if transform then
- return Util.GetLocalScale(transform)
- end
- end
-
- --获取包围盒的y值
- function GetRenderBoundsSize(render)
- if render then
- return Util.GetRenderBoundsSize(render)
- end
- end
-
- --设置localRotation
- function SetLocalRotation(transform, x, y, z, w)
- if transform then
- x = x or 0
- y = y or x
- z = z or x
- w = w or 1
- Util.SetLocalRotation(transform, x, y, z, w)
- end
- end
-
- function GetLocalRotation(transform)
- if transform then
- return Util.GetLocalRotation(transform)
- end
- end
-
- --实际是调用Rotate()方法,在原有角度基础上,继续旋转
- function SetRotate(transform, x, y, z)
- if transform then
- Util.SetRotate(transform, x, y, z)
- end
- end
-
- function SetSizeDelta(transform, x, y)
- if transform then
- Util.SetSizeDelta(transform, x, y)
- end
- end
-
- function SetSizeDeltaX(transform, x)
- if transform then
- Util.SetSizeDeltaX(transform, x)
- end
- end
-
- function SetSizeDeltaY(transform, y)
- if transform then
- Util.SetSizeDeltaY(transform, y)
- end
- end
-
- function GetSizeDeltaXY(transform)
- if transform then
- return transform:GetDeltaSizeXY()
- end
- end
-
- function GetSizeDeltaX(transform)
- if transform then
- return Util.GetSizeDeltaX(transform)
- end
- end
-
- function GetSizeDeltaY(transform)
- if transform then
- return Util.GetSizeDeltaY(transform)
- end
- end
-
- function SetTMPSharedMaterial(tmp_text, mat_type)
- if tmp_text then
- local temp_mat = ShaderTools.GetTMPSharedMaterial( mat_type )
- if temp_mat then
- tmp_text.fontSharedMaterial = temp_mat
- end
- end
- end
-
- function SetBgBySprite( self, img, bg_res, is_auto_size, loaded_call_back )
- if not img then return end
- img.gameObject:SetActive(false)
- local on_loaded = function ( )
- img.gameObject:SetActive(true)
- if loaded_call_back then
- loaded_call_back()
- end
- end
- lua_resM:setOutsideImageSprite(self, img, GameResPath.GetViewBigBg(bg_res), is_auto_size, on_loaded)
- end
-
- function SetBg( self, img, bg_res, is_auto_size, loaded_call_back )
- if not img then return end
- img.gameObject:SetActive(false)
- local on_loaded = function ( )
- img.gameObject:SetActive(true)
- if loaded_call_back then
- loaded_call_back()
- end
- end
- lua_resM:setOutsideRawImage(self, img, GameResPath.GetViewBigBg(bg_res), is_auto_size, on_loaded)
- end
-
- --添加点击事件
- function AddClickEvent(target, call_back, use_sound, support_up_event)
- if not IsNull(target) then
- use_sound = use_sound or LuaSoundManager.SOUND_UI.CLICK
- if use_sound < 100 then
- use_sound = LuaSoundManager.SOUND_UI.CLICK
- end
-
- --[[
- support_up_event 按钮抬起时执行回调,默认为false;
- 基于点击按钮边缘缩放后无响应的优化,需要侦听抬起事件,只在需要缩放的按钮上面开启;
- 因为滚动容器中的item,在滑动时也会触发piontup, 所以滚动容器下的item需要排除;
- ]]
- local temp_listener = LuaClickListener.Get(target)
- if support_up_event == nil then
- local is_need_scale = target:GetComponent("ExtendButtonScale") or target:GetComponent("ButtonExtend")
- if is_need_scale then
- support_up_event = true
- end
- end
- if support_up_event then
- temp_listener.IsSupporUpEvent = true
- end
-
- if use_sound then
- local function call_back_2(target,...)
- GlobalUserOperateTime = Time.time
- lua_soundM:PlayUIEffectSound(use_sound)
- call_back(target,...)
- end
-
- temp_listener.onClick = call_back_2
- else
- local function call_back_1( target,... )
- GlobalUserOperateTime = Time.time
- call_back(target,...)
- end
- temp_listener.onClick = call_back_1
- end
- end
- end
-
- -- 限制点击频率
- function AddClickEventHz(deltatime, target, call_back, use_sound)
- if target then
- use_sound = use_sound or LuaSoundManager.SOUND_UI.CLICK
- if use_sound < 100 then
- use_sound = LuaSoundManager.SOUND_UI.CLICK
- end
- -------------------------
- local callback = call_back
- if use_sound then
- callback = function (target,...)
- lua_soundM:PlayUIEffectSound(use_sound)
- call_back(target,...)
- end
- end
-
- local value = true
- local function delay_fun()
- value = true
- end
- local function call_back_2(target,...)
- if value then
- value = false
- callback(target,...)
- setTimeout(delay_fun,deltatime)
- end
- end
- LuaClickListener.Get(target).onClick = call_back_2
- end
- end
-
- function RemoveClickEvent(target)
- if target then
- LuaClickListener.Remove(target)
- end
- end
-
- --[[
- 添加点击穿透事件
- @param is_over: 是否点击穿透
- @param overSameFunc: true穿透后只触发传过来的回调函数 fasle穿透所有用AddOverClickEvent监听的ui
- ]]
- function AddOverClickEvent(target,call_back,use_sound,is_over,overSameFunc)
- if target then
- local listen = LuaOverClickListener.Get(target)
- if use_sound then
- function call_back_2(target,...)
- GlobalEventSystem:Fire(EventName.PLAY_UI_EFFECT_SOUND,use_sound)
- call_back(target,...)
- end
- listen.onClick = call_back_2
- else
- listen.onClick = call_back
- end
- listen.isOver = is_over
- listen.overSameFunc = overSameFunc
- end
- end
-
- --添加按下事件
- function AddDownEvent(target,call_back,use_sound)
- if target then
- if use_sound then
- local function call_back_2(target,...)
- EventSystem.Fire(GlobalEventSystem,EventName.PLAY_UI_EFFECT_SOUND,use_sound)
- call_back(target,...)
- end
-
- LuaEventListener.Get(target).onDown = call_back_2
- else
- LuaEventListener.Get(target).onDown = call_back
- end
- end
- end
-
- function RemoveEvent(target)
- if target then
- LuaEventListener.Remove(target)
- end
- end
-
- --添加进入事件
- function AddEnterEvent(target,call_back)
- if target then
- LuaEventListener.Get(target).onEnter = call_back
- end
- end
-
- --添加离开事件
- function AddExitEvent(target,call_back)
- if target then
- LuaEventListener.Get(target).onExit = call_back
- end
- end
-
- --添加松开事件
- function AddUpEvent(target,call_back)
- if target then
- LuaEventListener.Get(target).onUp = call_back
- end
- end
-
- --添加拖拽事件
- function AddDragEvent(target,call_back)
- if target then
- LuaDragListener.Get(target).onDrag = call_back
- end
- end
-
- --添加拖拽开始事件
- function AddDragBeginEvent(target,call_back)
- if target then
- LuaDragListener.Get(target).onDragBegin = call_back
- end
- end
-
- --添加拖拽结束事件
- function AddDragEndEvent(target,call_back)
- if target then
- LuaDragListener.Get(target).onDragEnd = call_back
- end
- end
-
- --添加额外拖拽的触发事件
- function LuaDragExtendTriggeListener(target,call_back)
- if target then
- LuaDragExtendListener.Get(target).onDragTrigger = call_back
- end
- end
-
- --添加额外拖拽的组件
- function GetLuaDragExtendListener(target)
- if target then
- return LuaDragExtendListener.Get(target)
- end
- end
-
- function RemoveDragEvent(target)
- if target then
- LuaDragListener.Remove(target)
- end
- end
-
- --添加Text首行缩进
- function AddSpace(num,str)
- if str ~= "" then
- return Util.AddSpace(num,WordManager:changeWords(str))
- else
- return WordManager:changeWords(str)
- end
- end
-
- --下列接口会尝试多种设置的,如果你已经知道你的节点是什么类型的就别用下列接口了
-
-
- -- function GetLocalPositionX( transform )
- -- if not transform then return end
-
- -- return GetLocalPositionX(transform)
- -- end
-
- -- function GetLocalPositionY( transform )
- -- if not transform then return end
-
- -- return GetLocalPositionY(transform)
- -- end
-
- -- function GetLocalPositionZ( transform )
- -- if not transform then return end
-
- -- return GetLocalPositionZ(transform)
- -- end
-
- -- function SetLocalPosition( transform, x, y, z )
- -- if not transform then return end
-
- -- SetLocalPositionX(transform, x)
- -- SetLocalPositionY(transform, y)
- -- SetLocalPositionZ(transform, z)
- -- end
-
- function SetVisible( obj, is_show )
- if not obj then return end
- if obj.SetActive then
- obj:SetActive(is_show)
- elseif obj.SetVisible then
- obj:SetVisible(is_show)
- end
- end
- --上列接口会尝试多种设置的,如果你已经知道你的节点是什么类型的就别用上列接口了
-
- -- 利用角度转换实现显隐
- function SetVisibleByRotate( transform, is_show )
- if not transform then return end
- if is_show then
- transform.localRotation = Quaternion.Euler(0,0,0)
- else
- transform.localRotation = Quaternion.Euler(90,90,0)
- end
- end
-
- UpdateVisibleJuryTable = {}
- UpdateVisibleJuryTableForValue = {}
- function InitForUIHelper( )
- setmetatable(UpdateVisibleJuryTable, {__mode = "k"})
- setmetatable(UpdateVisibleJuryTableForValue, {__mode = "v"})
- end
-
- --你显示隐藏前都要给我一个理由,我会综合考虑,只会在没有任何理由隐藏时我才会真正地显示出来
- function UpdateVisibleByJury( obj, is_show, reason )
- if not obj then return end
- local tab_str = tostring(obj)
- UpdateVisibleJuryTableForValue[tab_str] = obj
- if not UpdateVisibleJuryTable[obj] then
- local jury = Jury.New()
- --当陪审团的投票结果变更时触发
- local on_jury_change = function ( )
- --之所以用UpdateVisibleJuryTableForValue弱表是因为直接引用obj的话将影响到obj的gc,因为Jury等着obj释放时跟着自动释放,但Jury引用了本函数,而本函数又引用obj的话就循环引用了(想依赖弱引用做自动回收是会有这个问题的)
- if UpdateVisibleJuryTableForValue[tab_str] then
- --没人投票的话就说明可以显示啦
- -- print('Cat:UIHelper.lua[obj] jury:IsNoneVote()', jury:IsNoneVote())
- SetVisible(UpdateVisibleJuryTableForValue[tab_str], jury:IsNoneVote())
- end
- end
- jury:CallBackOnResultChange(on_jury_change)
- UpdateVisibleJuryTable[obj] = jury
- end
- if is_show then
- UpdateVisibleJuryTable[obj]:UnVote(reason)
- else
- --想隐藏就投票
- UpdateVisibleJuryTable[obj]:Vote(reason)
- end
- end
-
- --滚动到目标点,让其尽量显示在滚动容器的中间
- function ScrollToCenter( Content, item, item_width, size )--最后一个是容器 size 的大小
- -- print("huangcong: [318] Content, item, item_width: ",Content, item, item_width,size)
- --画布 item item_width scrollSize
- item_width = item_width or 80--默认把节点的高度当作80
- local scroll_size = size
- local scroll_real_size = Content.sizeDelta
- local item_real_pos = nil
- item_real_pos = item:GetPosition()
- local new_fit_x = 0
- local condition1 = item_real_pos.x - scroll_size.x/2 --第一部分是判断左边极限
- local condition2 = item_real_pos.x + scroll_size.x/2 - scroll_real_size.x--右边极限
- if condition1 > 0 and condition2 < 0 then
- new_fit_x = -(item_real_pos.x - scroll_size.x/2) - item_width/2
- elseif condition1 <= 0 then
- new_fit_x = 0
- elseif condition2 >= 0 then
- new_fit_x = -(scroll_real_size.x - scroll_size.x)+1
- end
- print("huangcong:UIHelper [423]: ",new_fit_x,item_real_pos.x,scroll_size.x)
- SetAnchoredPosition(Content.transform,new_fit_x,0)
- end
-
- --ScrollView滚到最底时触发,注意AddDragEndEvent事件只是拉滚动窗口动画结束时触发
- function BindScrollViewEndEvent(scroll_view_obj, scroll_rect , drag_end_call_back)
- local on_scroll_end = function ( )
- if scroll_rect.verticalNormalizedPosition <= 0 then
- if drag_end_call_back then
- drag_end_call_back()
- end
- end
- end
- AddDragEndEvent(scroll_view_obj, on_scroll_end)
- end
-
- function SetImageGray( image, isGray )
- if not image then return end
- if isGray then
- -- image.color = Color(148/255,148/255,148/255)
- image.material = Resources.Load("material/Gray")
- else
- -- image.color = ColorUtilValue.WHITE
- image.material = nil
- end
- end
-
- function SetTextGray( text, isGray, color )
- if not text then return end
- if isGray then
- text.color = Color(148/255,148/255,148/255)
- else
- text.color = color or ColorUtilValue.WHITE
- end
- end
-
- function SetButtonGray( image, outline, isGray )
- if not image then return end
- if isGray then
- -- image.color = Color(148/255,148/255,148/255)
- image.material = Resources.Load("material/Gray")
- if outline then
- outline.enabled = false
- end
- else
- -- image.color = ColorUtilValue.WHITE
- image.material = nil
- if outline then
- outline.enabled = true
- end
- end
- end
-
- function SetChildrenGray( parent, is_gray, ignore_dic )
- local images = parent:GetComponentsInChildren(typeof(UnityEngine.UI.Image))
- for i=0,images.Length-1 do
- if not ignore_dic or not ignore_dic[images[i]] then
- SetImageGray(images[i], is_gray)
- end
- end
- end
-
- local find = string.find
- local gsub = string.gsub
- local Split = Split
- G_ComponentMapForGetChildren = {
- img = typeof(UnityEngine.UI.Image),
- txt = typeof(UnityEngine.UI.Text),
- tog = typeof(UnityEngine.UI.Toggle),
- imgex = typeof(LuaFramework.ImageExtend),
- outline = typeof(UnityEngine.UI.Outline),
- raw = typeof(UnityEngine.UI.RawImage),
- rawex = typeof(LuaFramework.RawImageExtend),
- scroll = typeof(UnityEngine.UI.ScrollRect),
- input = typeof(UnityEngine.UI.InputField),
- shadow = typeof(UnityEngine.UI.Shadow),
- adtxt = typeof(LuaFramework.AdaptiveText),
- tmp = typeof(TMPro.TextMeshProUGUI),
- cg = typeof(UnityEngine.CanvasGroup),
- tmpInput = typeof(TMPro.TMP_InputField),
- }
-
- function GetChildren( self, names )
- assert(self.transform, "UIHelper:GetChildren() cannot find transform!")
- local find_child = self.transform.Find
- for i=1,#names do
- local name_parts = Split(names[i], ":")
- local full_name = name_parts[1]
- local short_name = full_name
- if short_name and find(short_name,"/") then
- short_name = gsub(short_name,".+/","")
- end
- assert(self[short_name] == nil, short_name .. " already exists")
- if short_name then
- self[short_name] = find_child(self.transform, full_name)
- end
- assert(self[short_name], "cannot find child : "..short_name)
- for j=2,#name_parts do
- if name_parts[j] == "obj" then
- self[short_name.."_"..name_parts[j]] = self[short_name].gameObject
- elseif G_ComponentMapForGetChildren[name_parts[j]] then
- local component = self[short_name]:GetComponent(G_ComponentMapForGetChildren[name_parts[j]])
- -- if name_parts[j] == "txt" then
- -- --兼容tmp
- -- component = component or self[short_name]:GetComponent(G_ComponentMapForGetChildren["tmp"])
- -- end
- if component==nil then
- print(component, "cannot find component "..name_parts[j].." in child "..short_name)
- end
- if name_parts[j] == "adtxt" then -- 自动文本兼容txt
- self[short_name.."_txt"] = component
- else
- self[short_name.."_"..name_parts[j]] = component
- end
- else
- assert(false, "cannot find this component short name : "..name_parts[j])
- end
- end
- end
- end
-
- function RemoveChildren(parent)
- if not parent then return end
-
- for i=0,parent.childCount-1 do
- GameObject.Destroy(parent:GetChild(i).gameObject)
- end
- parent:DetachChildren()
- end
-
- function SetParent( transform, parent )
- if transform then
- transform:SetParent(parent)
- SetLocalPosition(transform, 1, 1, 1)
- SetLocalScale(transform, 1, 1, 1)
- end
- end
-
- --返回对齐方式字符串
- function AlignTypeToStr( alignment )
- local vert_align = "Upper"
- if alignment == UnityEngine.TextAnchor.UpperLeft
- or alignment == UnityEngine.TextAnchor.UpperCenter
- or alignment == UnityEngine.TextAnchor.UpperRight then
- vert_align = "Upper"
- elseif alignment == UnityEngine.TextAnchor.MiddleLeft
- or alignment == UnityEngine.TextAnchor.MiddleCenter
- or alignment == UnityEngine.TextAnchor.MiddleRight then
- vert_align = "Middle"
- elseif alignment == UnityEngine.TextAnchor.LowerLeft
- or alignment == UnityEngine.TextAnchor.LowerCenter
- or alignment == UnityEngine.TextAnchor.LowerRight then
- vert_align = "Lower"
- end
-
- local hori_align = "Left"
- if alignment == UnityEngine.TextAnchor.UpperLeft
- or alignment == UnityEngine.TextAnchor.MiddleLeft
- or alignment == UnityEngine.TextAnchor.LowerLeft then
- hori_align = "Left"
- elseif alignment == UnityEngine.TextAnchor.UpperCenter
- or alignment == UnityEngine.TextAnchor.MiddleCenter
- or alignment == UnityEngine.TextAnchor.LowerCenter then
- hori_align = "Center"
- elseif alignment == UnityEngine.TextAnchor.UpperRight
- or alignment == UnityEngine.TextAnchor.MiddleRight
- or alignment == UnityEngine.TextAnchor.LowerRight then
- hori_align = "Right"
- end
- return hori_align, vert_align
- end
-
- --获取背景图设置为全屏之后的宽度的宽度(以y值为基础比例,去铺满屏幕)
- function GetWideScreenSize( )
- local size_x, size_y = 1560, 720 --背景图默认尺寸
- local scale = size_y/ScreenHeight
- if size_y < ScreenHeight then
- scale = ScreenHeight/size_y
- end
- local width = scale*size_x
- return width, ScreenHeight
- end
-
- function ChangeParentAndKeepTransform( transform, parent )
- local abs_pos_x, abs_pos_y, abs_pos_z = GetGlobalPosition(transform)
- transform:SetParent(parent)
- SetGlobalPosition(transform, abs_pos_x, abs_pos_y, abs_pos_z)
- end
-
- --加载图片完成后显示
- function SetImgAndSetShow( ref_tar,node,abName,resName,setNativeSize, call_back )
- local raw_img = node:GetComponent("RawImage")
- local img = node:GetComponent("Image")
-
- local gameObject = node.gameObject
- if (img or raw_img) and gameObject then
- local function visible_call_back( )
- gameObject:SetActive(true)
- end
- if abName then
- lua_resM:setImageSprite(ref_tar, raw_img or img, abName, resName,setNativeSize,call_back or visible_call_back)
- else
- if not string.find( resName, ".png" ) then
- resName = resName .. ".png"
- end
- if raw_img then
- lua_resM:setOutsideRawImage(ref_tar, raw_img, resName, setNativeSize, call_back or visible_call_back)
- else
- lua_resM:setOutsideImageSprite(ref_tar, img, resName, setNativeSize, call_back or visible_call_back)
- end
- end
- end
- end
-
- --scroll_view的轴点需要是(0,1) 水平排列奖励列表等东西
- function AnchorItemListH( item_list, scroll_view, item_width, item_space_x, off_x, is_no_resize_view )
- item_space_x = item_space_x or 0
- off_x = off_x or 0
- local count = item_list.__count__ and item_list.__count__ or (#item_list)
- local scroll_width,_ = GetSizeDeltaXY(scroll_view)
- --计算开始显示的位置
- local size = count*(item_width+item_space_x)-item_space_x
- local start_x = ( scroll_width - size )/2
- if start_x < 0 then
- start_x = 0
- end
- for i,item in ipairs(item_list) do
- local x = (i-1) * (item_width+item_space_x) + start_x + off_x
- item:SetPosition(x, 0)
- end
- if not is_no_resize_view then
- SetSizeDelta(scroll_view,start_x+count*(item_width+item_space_x)-item_space_x, 100)
- end
- end
-
- --横向方向对齐,直接传节点(X轴锚点需要是0)),不是传组件
- function ItemSetHorizontal( off_x, ... )
- local node_list = {...}
- local off_x = off_x or 0--节点间的间隔
- local pos_x = 0
- local function get_node_is_label( node )
- return node:GetComponent("TMPro.TextMeshProUGUI") or node:GetComponent("Text")
- end
- for i,v in ipairs(node_list) do
- lb_component = get_node_is_label(v)
- if i == 1 then
- pos_x = GetAnchoredPosition( v.transform )
- else
- SetAnchoredPositionX( v.transform, pos_x )
- end
- pos_x = lb_component and (lb_component.preferredWidth + pos_x) or (pos_x + GetSizeDeltaX(v.transform))
- pos_x = off_x + pos_x
- end
- end
-
- --垂直方向对齐,直接传节点,不是传组件
- --(Y轴锚点需要是1,而且文本垂直方向要Upper)
- function ItemSetVerticle( off_y, ... )
- local node_list = {...}
- local off_y = off_y or 0--节点间的间隔
- local pos_y = 0
- local _ = false--无用参数
- local function get_node_is_label( node )
- return node:GetComponent("Text")
- end
- for i,v in ipairs(node_list) do
- lb_component = get_node_is_label(v)
- if i == 1 then
- _,pos_y = GetAnchoredPosition( v.transform )
- else
- SetAnchoredPositionY( v.transform, pos_y )
- end
- pos_y = lb_component and (lb_component.preferredHeight - pos_y) or (GetSizeDeltaY(v.transform) - pos_y)
- pos_y = off_y - pos_y
- end
- end
-
- --获取图片大小和维度, 获取 N维 图片UV数据UI
- function GetImageSplitUVRectInfo( size_x, size_y, row, col)
- local list = {}
- local cell_x = size_x / row
- local cell_y = size_y / col
- local uv_cell_x = 1 / row
- local uv_cell_y = 1 / col
- local uv_cell_w = uv_cell_x
- local uv_cell_h = uv_cell_y
- for i=1,row do
- for ii=1,col do
- local d = {}
- d.cell_x = cell_x
- d.cell_y = cell_y
- d.uv_cell_x = (i - 1)* uv_cell_x
- d.uv_cell_y = (ii - 1)* uv_cell_y
- d.uv_cell_w = uv_cell_w
- d.uv_cell_h = uv_cell_h
- table.insert(list, d)
- end
- end
- return list, cell_x, cell_y
- end
|