Author Topic: Expand Sprite to available space?  (Read 2862 times)

Oakshiro

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 16
    • View Profile
Expand Sprite to available space?
« on: July 26, 2013, 07:51:38 AM »
Hi there,
I have two sprites, one anchored on the top of the screen and the other one to the bottom.
I need a center sprite which expands to the screen available space. But I cannot achieve it, i suppose i am missing some concept about NGUI.

Here is my code so far, without luck:

  1.         //get available height         
  2.         float availableHeight = (float)Screen.height;                          
  3.         foreach (Transform t in delimiters)
  4.         {
  5.                 availableHeight -= (t.localScale.y);
  6.         }                              
  7.        
  8.         //set new height
  9.         Vector3 newHeight = transform.localScale;
  10.         newHeight.y = availableHeight;
  11.         transform.localScale = newHeight;
  12.  
  13.  

jeldrez

  • Sr. Member
  • ****
  • Thank You
  • -Given: 8
  • -Receive: 4
  • Posts: 352
    • View Profile
Re: Expand Sprite to available space?
« Reply #1 on: July 26, 2013, 11:42:00 AM »
You can use the script UIStretch for this

Oakshiro

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 16
    • View Profile
Re: Expand Sprite to available space?
« Reply #2 on: July 29, 2013, 02:45:14 AM »
But, does UIStretch allow you to set a vertical and horizontal margin? I don't think so....

Oakshiro

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 16
    • View Profile
Re: Expand Sprite to available space?
« Reply #3 on: July 29, 2013, 03:30:39 AM »
I finally managed to make it work, although only vertically (It doesn't work if Screen width is higher than Screen height), because it uses the UIRootAdjustment script combined with the UIRoot default one.

Here is the code for the grid:
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. [RequireComponent (typeof(UIGrid))]
  5. public class ExpandGridToFit : MonoBehaviour {
  6.        
  7.        
  8.         //WARNING: THIS COMPONENT WILL ONLY WORK ON PORTRAIT SCREENS
  9.         public float marginHeight;
  10.         private UIGrid grid =null;     
  11.         private UIRoot root;
  12.  
  13.         // Use this for initialization
  14.         void Start ()
  15.         {
  16.                 root = GameObject.FindObjectOfType(typeof(UIRoot)) as UIRoot;
  17.                 grid = this.gameObject.GetComponent<UIGrid>();
  18.         }
  19.        
  20.         // Update is called once per frame
  21.         void Update ()
  22.         {      
  23.                                                                        
  24.                 //get available height         
  25.                 int rows = (int)Mathf.Round(((float)grid.transform.childCount / (float)grid.maxPerLine));                      
  26.                 float availableHeight = ((float)root.manualHeight - marginHeight) / rows;                                                      
  27.                
  28.                 if (grid.cellHeight != availableHeight)
  29.                 {                                              
  30.                         //set cellHeight       
  31.                         grid.cellHeight = availableHeight;
  32.                        
  33.                         //refresh!
  34.                         grid.Reposition();
  35.                        
  36.                         //refresh childrens if I should
  37.                         foreach (Transform t in transform)
  38.                         {
  39.                                 ExpandToCellSize etcs = t.GetComponent<ExpandToCellSize>();
  40.                                 if (etcs != null)
  41.                                 {
  42.                                         etcs.resizeNow = true;
  43.                                 }
  44.                         }
  45.                 }
  46.         }
  47. }
  48.  


And Here is the code for the containing Sprites:
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class ExpandToCellSize : MonoBehaviour {
  5.        
  6.         public bool expandHeight = false;
  7.         public bool expandWidth = false;       
  8.         public bool resizeNow = false;
  9.        
  10.         private UIGrid parentGrid = null;
  11.        
  12.         void Awake()
  13.         {
  14.                 parentGrid = transform.parent.GetComponent<UIGrid>();
  15.         }
  16.        
  17.         // Use this for initialization
  18.         void Start ()
  19.         {
  20.                 resizeNow = true;
  21.         }
  22.        
  23.         // Update is called once per frame
  24.         void Update ()
  25.         {              
  26.                 if (parentGrid == null || (!expandWidth && !expandHeight))
  27.                         return;
  28.                
  29.                 if (resizeNow)
  30.                 {
  31.                         Vector3 newScale = this.transform.localScale;
  32.                        
  33.                         if (expandWidth)
  34.                         {
  35.                                 newScale.x = parentGrid.cellWidth;
  36.                         }
  37.                        
  38.                         if (expandHeight)
  39.                         {
  40.                                 newScale.y = parentGrid.cellHeight;
  41.                         }
  42.                        
  43.                         this.transform.localScale = newScale;
  44.                        
  45.                         resizeNow = false;
  46.                 }
  47.         }
  48. }
  49.