赞
踩
UGUI实现提示工具UITooltip(1)
适用情况:1、按钮的功能提示
2、 文本、表格的展示不完里面的文字时,展示其完整信息。
如何设计:
Panel(UITooltip):提示工具窗口,设计提示工具的样式、背景图片
Text(UITooltip.text):显示文本
Text(TooltipEnableButton ):需要显示提示信息的控件
1、按钮功能提示:当鼠标移动到按钮区域,在其下方显示功能提示;鼠标移出后自动关闭功能提示。
2、完整文本提示:当鼠标移动到按钮区域,在其下方显示功能提示;鼠标移出后自动关闭功能提示。
代码实现:
需要提示的按钮(文本):TooltipEnableButton 继承自Button,因为要通过OnPointerEnter和OnPointerExit来判断鼠标是否进入控件
using UnityEngine; using System.Collections; using UnityEngine.UI; public class TooltipEnableButton :Button{ public string tipStr=""; private RectTransform rTrsf; protected override void Awake() { base.Awake (); rTrsf = gameObject.GetComponent<RectTransform> (); } public override void OnPointerEnter (UnityEngine.EventSystems.PointerEventData eventData) { //屏幕坐标转换为UI坐标 RectTransformUtility.ScreenPointToLocalPointInRectangle (DataExecute.instance.uiParent.GetComponent<RectTransform> (), eventData.position, null,out vec); DataExecute.instance .tooltipWin.transform.localPosition = new Vector2(vec.x,vec.y-30); DataExecute.instance.tooltipWin.Show (tipStr); } public override void OnPointerExit (UnityEngine.EventSystems.PointerEventData eventData) { base.OnPointerExit (eventData); DataExecute.instance.tooltipWin.Hide (); } }
提示工具(窗口):UITooltip
using UnityEngine; using System.Collections; using UnityEngine.UI; public class UIToolTip : MonoBehaviour { public Text text; RectTransform rTrsf; void Awake() { gameObject.SetActive (false); rTrsf = gameObject.GetComponent<RectTransform> (); text=transform.FindChild ("Text"); } //计算行数,默认一行 private int CountCol(string str) { int col = 1; if (str.Length>0) { if (str.Contains("\n")) { string s="\n"; char[] c = s.ToCharArray (); string[] strArr= str.Split (c); col = strArr.Length; for (int i = 0; i < strArr.Length; i++) { int cc = strArr [i].Length; int col_1 = cc / 22;//每行20个字符 int d = cc % 22; if (d>0) {col_1 = col_1 + 1;} col = col + col_1 - 1; } } } return col; } private void ChangeRect(int col) { rTrsf.sizeDelta = new Vector2 (300, 20 + col * 18); } public void Show(string str) { if(str!="") { gameObject.SetActive (true); int col = CountCol (str); ChangeRect (col); text.text = str; Debug.Log ("Show()"); } } public void Hide() { if (gameObject.activeSelf) { gameObject.SetActive (false); Debug.Log ("Hide()"); } } }
遇到的问题:
当鼠标进入控件区域时,提示窗口一直不停闪烁.在OnPointerEnter和OnPointerExtit中进行Debug调试,发现一真触发OnPointerExit中的Hide()方法,却没有调用OnPointerEnter中Show().
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。