当前位置:   article > 正文

UGUI实现提示工具UITooltip(1)_ugui 弹消息提示

ugui 弹消息提示

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 ();
	}    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

提示工具(窗口):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()");
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

遇到的问题:
当鼠标进入控件区域时,提示窗口一直不停闪烁.在OnPointerEnter和OnPointerExtit中进行Debug调试,发现一真触发OnPointerExit中的Hide()方法,却没有调用OnPointerEnter中Show().

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/118375?site
推荐阅读
相关标签
  

闽ICP备14008679号