2025-06-04 05:02:57 +08:00

374 lines
10 KiB
Plaintext

UIUtil = {}
--單行居中,多行靠左對其
function UIUtil.FitLabelLine(label)
if(label~=nil) then
local height = label.height
local size = label.fontSize
local line = math.floor(height/size)
if(line>1) then
label.pivot = UIWidget.Pivot.Left
else
label.pivot = UIWidget.Pivot.Center
end
end
end
function UIUtil.CenterLabelLine(label)
if(label~=nil) then
label.pivot = UIWidget.Pivot.Center
end
end
-- 單行自適應 多行高適應
function UIUtil.FitLabelHeight(label, width)
if(label~=nil) then
-- local outStr = "";
local labelText = label.text;
label.overflowMethod = 3; --UILabel.Overflow.ResizeHeight;
label.width = width;
label.text = "";
local bWarp, strOut, line;
if( string.find(labelText,"[\n]") )then
line = 2;
else
line = 1;
end
bWarp, strOut = label:Wrap (labelText, strOut, label.height * line);
if(bWarp and strOut~="")then
label.overflowMethod = 2; --UILabel.Overflow.ResizeFreely;
end
label.text = labelText;
end
end
function UIUtil.SceneCountDownMsg(id,params,removeWhenLoadScene)
MsgManager.ShowMsgByIDTable(id,params,id)
FloatingPanel.Instance:SetCountDownRemoveOnChangeScene(id,removeWhenLoadScene)
end
function UIUtil.StartSceenCountDown(text,data)
FloatingPanel.Instance:AddCountDown(text,data)
end
function UIUtil.EndSceenCountDown(id)
FloatingPanel.Instance:RemoveCountDown(id)
end
function UIUtil.FloatMiddleBottom(sortID,text)
FloatingPanel.Instance:FloatMiddleBottom(sortID,text)
end
function UIUtil.ClearFloatMiddleBottom()
FloatingPanel.Instance:ClearFloatMiddleBottom()
end
function UIUtil.FloatMsgByData(text)
FloatingPanel.Instance:TryFloatMessageByData(text)
end
function UIUtil.FloatShowyMsg(text)
FloatingPanel.Instance:FloatShowyMsg(text)
end
function UIUtil.FloatMsgByText(text)
FloatingPanel.Instance:TryFloatMessageByText(text)
end
function UIUtil.ShowEightTypeMsgByData(data,startPos,offset)
FloatingPanel.Instance:FloatTypeEightMsgByData(data,startPos,offset)
end
function UIUtil.StopEightTypeMsg()
FloatingPanel.Instance:StopFloatTypeEightMsg()
end
function UIUtil.PopUpConfirmView(titleText,contentText,confirmtext,canceltext,confirm,cancel,src,needCloseBtn,needExitDefaultHandle,unique)
if(needExitDefaultHandle==nil) then needExitDefaultHandle = true end
local viewData = {
viewname = "UniqueConfirmView",
title = titleText,
content = contentText,
confirmtext = confirmtext,
canceltext = canceltext,
confirmHandler = confirm,
cancelHandler = cancel,
source = src,
needCloseBtn = needCloseBtn,
needExitDefaultHandle = needExitDefaultHandle,
unique = unique,
}
GameFacade.Instance:sendNotification(UIEvent.ShowUI, viewData);
end
function UIUtil.PopUpDontAgainConfirmView(contentText,confirm,cancel,src,data)
if(needExitDefaultHandle==nil) then needExitDefaultHandle = true end
local viewData = {
viewname = "DontShowAgainConfirmView",
data = data,
content = contentText,
confirmHandler = confirm,
cancelHandler = cancel,
source = src,
}
GameFacade.Instance:sendNotification(UIEvent.ShowUI, viewData);
end
function UIUtil.PopUpConfirmYesNoView(title,content,confirmHandler,cancelHandler,source,confirmtext,canceltext,unique)
UIUtil.PopUpConfirmView(title,content,confirmtext,canceltext,confirmHandler,cancelHandler,source,false,false,unique)
end
function UIUtil.PopUpFuncView(title,content,confirmHandler,cancelHandler,source,confirmtext,canceltext)
UIUtil.PopUpConfirmView(title,content,confirmtext,canceltext,confirmHandler,cancelHandler,source,true,false)
end
function UIUtil.WarnPopup(titleText,contentText,confirm,cancel,src,confirmtext,canceltext)
local data = {
title = titleText,
content = contentText,
confirmtext = confirmtext,
canceltext = canceltext,
confirmHandler = confirm,
cancelHandler = cancel,
source = src,
}
if(UIWarning.Instance~=nil) then
UIWarning.Instance:AddWarnPopUp(data)
end
end
function UIUtil.ShowScreenMask(fadeInTime,fadeOutTime,fadeInCallBack,fadeOutCallBack,color)
color = color or ColorUtil.NGUIBlack
local viewData = {
viewname = "ScreenMaskView",
fadeInTime = fadeInTime,
fadeOutTime = fadeOutTime,
fadeInCallBack = fadeInCallBack,
fadeOutCallBack = fadeOutCallBack,
color = color,
}
GameFacade.Instance:sendNotification(UIEvent.ShowUI, viewData);
end
function UIUtil.RotateAround()
GameFacade.Instance:sendNotification(UIEvent.ShowUI, viewData);
end
function UIUtil.CenterScrollViewPos(scrollView, worldPos, springStr)
local mTrans = scrollView.transform;
local panel = scrollView.panel;
local cp = mTrans:InverseTransformPoint (worldPos);
local corners = panel.worldCorners;
local panelCenter = (corners[3] + corners[1]) * 0.5;
local cc = mTrans:InverseTransformPoint (panelCenter);
LuaGameObject.InverseTransformPointByVector3(mTrans, panelCenter);
-- local panelSize = panel:GetViewSize ();
-- local mBound = scrollView.bounds;
-- local tempV3 = LuaVector3(mBound.size.x - panelSize.x, mBound.size.y - panelSize.y);
-- local checkBound = Bounds(mBound.center, tempV3);
-- if (not checkBound:Contains (cp)) then
-- cp = checkBound:ClosestPoint (cp);
-- end
local localOffset = cp - cc;
if(springStr)then
SpringPanel.Begin(scrollView.gameObject, mTrans.localPosition - localOffset, springStr);
else
mTrans.localPosition = mTrans.localPosition - localOffset;
local co = panel.clipOffset;
panel.clipOffset = co + Vector2(localOffset.x, localOffset.y);
end
end
function UIUtil.GetUIParticle(effectID, depth, parent)
local containerResID = ResourcePathHelper.UICell("UIParticleHolder")
local container = Game.AssetManager_UI:CreateAsset(containerResID, parent);
local effectResID = ResourcePathHelper.EffectUI(effectID);
local effect = Game.AssetManager_UI:CreateAsset(effectResID, container);
local ctrl = container:GetComponent(ChangeRqByTex)
ctrl.transform.localPosition = LuaVector3.zero;
ctrl.depth = depth
ctrl:AddChild(effect)
return ctrl
end
function UIUtil.WrapLabel (uiLabel)
local strContent = uiLabel.text;
local bWarp, strOut;
bWarp, strOut = uiLabel:Wrap(strContent, strOut, uiLabel.height);
local length = StringUtil.getTextLen(strOut);
if(not bWarp)then
if (length > 2) then
local repStr = "";
local count = 0;
local rep_bWrap, rep_strOut = false, strOut;
repeat
count = count + 1;
repStr = StringUtil.getTextByIndex(rep_strOut, 1, length - count);
repStr = repStr .. "...";
rep_bWrap, rep_strOut = uiLabel:Wrap(repStr, rep_strOut, uiLabel.height);
until(rep_bWrap)
uiLabel.text = repStr;
end
end
end
function UIUtil.GetWrapLeftString (uiLabel, text)
uiLabel.text = text;
local bWarp, finalStr;
bWarp, finalStr = uiLabel:Wrap(text, finalStr, uiLabel.height);
if(not bWarp)then
local finallen = StringUtil.getTextLen(finalStr);
local textlen = StringUtil.getTextLen(text);
if(finallen < textlen)then
leftStr = StringUtil.getTextByIndex(text, finallen, textlen);
else
leftStr = "";
end
else
leftStr = nil;
end
return bWarp, leftStr;
end
function UIUtil.ChangeLayer(go, layer)
layer = layer or go.gameObject.layer;
go.gameObject.layer = layer;
local trans = go.gameObject.transform;
for i=0, trans.childCount-1 do
local transChild = trans:GetChild(i);
transChild.gameObject.layer = layer;
UIUtil.ChangeLayer(transChild.gameObject, layer);
end
end
function UIUtil.GetAllComponentInChildren(go, type)
local result = UIUtil.GetAllComponentsInChildren(go, type, true);
return result[1];
end
function UIUtil.GetAllComponentsInChildren(go, type, containSelf)
local comps = {};
local sp = go:GetComponent(type);
if(containSelf and sp)then
table.insert(comps, sp);
end
local childCount = go.transform.childCount;
for i=0,childCount-1 do
local trans = go.transform:GetChild(i);
local childComps = UIUtil.GetAllComponentsInChildren(trans.gameObject, type, true);
for i=1, #childComps do
table.insert(comps, childComps[i]);
end
end
return comps;
end
function UIUtil.GetComponentInParents(go, type)
if (go == nil) then
return nil;
end
local comp;
local t = go.transform.parent;
while (t ~= nil and comp == nil) do
comp = t.gameObject:GetComponent(type);
t = t.parent;
end
return comp;
end
function UIUtil.LimitInputCharacter(input, limitNum, validFunc)
local obj = input.gameObject;
if (not GameObjectUtil.Instance:ObjectIsNULL(obj)) then
local inputLimit = math.max(limitNum*5, 20);
input.characterLimit = inputLimit;
local func = function (go, state)
if(not state)then
local str = input.value;
if(type(validFunc) == "function")then
str = validFunc(str);
end
local length = StringUtil.ChLength(str);
if(length > limitNum)then
str = StringUtil.getTextByIndex(str, 1, limitNum);
end
input.value = str;
end
end
UIEventListener.Get(obj).onSelect = {"+=", func}
end
end
function UIUtil.PopupTipAchievement(achievement_conf_id)
UIViewAchievementPopupTip.Instance:ShowAchievementPopupTip(achievement_conf_id)
end
function UIUtil.isClickLeftScreenArea()
local tempVector3 = LuaVector3.zero;
local uiCamera = NGUIUtil:GetCameraByLayername("UI");
if not uiCamera then
return true
end
if(Input.touchCount > 1)then
for i=1,Input.touchCount do
local single = Input.GetTouch(i-1)
if(single.phase == TouchPhase.Ended)then
local x,y = LuaGameObject.GetTouchPosition(i-1,false)
tempVector3:Set(x,y,0)
break
end
end
else
local x,y,z = LuaGameObject.GetMousePosition()
tempVector3:Set(x,y,z)
end
local x,y,z = LuaGameObject.ScreenToWorldPointByVector3(uiCamera,tempVector3);
return x<=0
end
-- find child which name is @name
function UIUtil.FindGO(name, parent)
return parent ~= nil and GameObjectUtil.Instance:DeepFind(parent, name) or nil;
end
function UIUtil.FindComponent(name, comp, parent)
local go = UIUtil.FindGO(name, parent)
return go ~= nil and go:GetComponent(comp);
end
function UIUtil.FindAllComponents(parent, compType, containSelf)
if(parent == nil)then
return;
end
return GameObjectUtil.Instance:GetAllComponentsInChildren(parent, compType, containSelf) or {};
end
function UIUtil.AddClickEvent(obj,event)
if(event == nil)then
return;
end
UIEventListener.Get(obj).onClick = {"+=", event};
end
function UIUtil.RemoveClickEvent(obj,event)
if(event == nil)then
return;
end
UIEventListener.Get(obj).onClick = {"-=", event};
end