ImageViewerManager.cs 2.15 KB
using System;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections;
using TMPro;

/**
 * 功能描述: 图片放大组件
 * @author wangQc
 * @date 2025/6/4 09:17
 */
public class ImageViewerManager : MonoBehaviour
{
    public static ImageViewerManager Instance;
    public GameObject panel;
    public Image fullImage;
    public TextMeshProUGUI contentTextMeshProUGUI;
    public Image logoImage;

        
    public Transform timeGrid; 
    public GameObject timePrefab;

    
    void Awake()
    {
        Instance = this;
        panel.SetActive(false);
        var panelBtn = panel.GetComponent<Button>();
        panelBtn.onClick.AddListener(() =>
        {
            fullImage.sprite = null;
            panel.SetActive(false);
        });
    }

    public void ShowImage(string url,string content,string logo,string time)
    {
        panel.SetActive(true);
        StartCoroutine(ImageLoader.LoadImage(url, fullImage));
        StartCoroutine(ImageLoader.LoadImage(logo, logoImage));
        contentTextMeshProUGUI.text = content;
        
        
        //时间
        foreach (Transform child in timeGrid)
        {
            Destroy(child.gameObject);
        }
        time = time.Replace("年", "p").Replace("月", "p").Replace("日", "");
        foreach (char c in time)
        {
            GameObject timeObj = Instantiate(timePrefab, timeGrid);
            var timeTextMeshPro = timeObj.GetComponent<TextMeshProUGUI>();
            
            timeTextMeshPro.text = "<sprite name=\""+c+"\">";
        }
        
        //初始高度180
        int initHeight = 180;
        RectTransform contentParentRect = contentTextMeshProUGUI.transform.parent.GetComponent<RectTransform>();
        contentParentRect.sizeDelta = new Vector2(contentParentRect.sizeDelta.x, initHeight);
        //动态设置高度,每行23个字
        int height =  (int)Math.Ceiling((double)content.Length / 23) * 65;
        if (height>initHeight)
        {
            contentParentRect.sizeDelta = new Vector2(contentParentRect.sizeDelta.x, height);
        }
        
    }

    public void Hide()
    {
        panel.SetActive(false);
    }
}