UIScrollView como el HomePage del iPhone

El HomePage del iPhone posee un conjunto de elementos que hacen bastante vistoso y útil, de tal manera que alguna vez queramos el mismo efecto para alguna de nuestras aplicaciones. Para lógralo haremos uso de dos controles, el UIScrollView y el UIPageControl.

Nuestro primer paso sera abrir nuestro xib en Xcode y agregar los dos controles a la vista junto con sus Outlets, como se puede ver en la siguiente imagen:


 

Luego en el código del controller agregaremos los métodos CreatePanel, que será el encargado de crear los paneles del ScrollView, junto con su respectivo contenido, en el caso en particular de nuestra aplicación tendrá una imagen (UIImage) y un texto (UILabel):
        private void CreatePanels( int count )
        {
             scrollView.Scrolled += ScrollViewScrolled;
             RectangleF scrollFrame = scrollView.Frame;
             scrollFrame.Width = scrollFrame.Width * count;
             scrollView.ContentSize = scrollFrame.Size;    
 
            for (int i=0; i< count; i++) 
            {
                UIImageView imageView = new UIImageView ();
                UITextView textView = new UITextView ();
                textView.TextColor = UIColor.White;
                textView.Font = UIFont.ItalicSystemFontOfSize (18.0f);
                textView.BackgroundColor = UIColor.Clear;
                textView.TextAlignment = UITextAlignment.Center;
                textView.Text = CreateFormatingText (ImagesNames[i]);
                imageView.Image = LoadImage (ImagesNames[i]);
 
                //Begin Frames
                RectangleF frameImg = scrollView.Frame;
                frameImg.Height = 220.0f;//450
                PointF locationImg = new PointF ();
                locationImg.X = frameImg.Width * i;
                frameImg.Location = locationImg;
                RectangleF frameTxt = scrollView.Frame;
                frameTxt.Height = 200.0f;//450
                PointF locationTxt = new PointF ();
                locationTxt.X = frameTxt.Width * i;
                locationTxt.Y = frameImg.Height + 25;
                frameTxt.Location = locationTxt;
                textView.Frame = frameTxt;
                imageView.Frame = frameImg;
                scrollView.AddSubview (textView);
                scrollView.AddSubview (imageView);
            }
            pageControl.Pages = count;
        }   
Nuestro siguiente método será, el encargado de revisar si el panel actual ha pasado de la mitad de nuestra pantalla, para así generar el cambio de panel:
        private void ScrollViewScrolled( object sender, EventArgs e )
        {
            double page = Math.Floor( ( scrollView.ContentOffset.X - scrollView.Frame.Width / 2 ) / scrollView.Frame.Width ) + 1;
            pageControl.CurrentPage = (int) page;
        }   
Y nuestro 2 últimos métodos que se describen a continuación serán los encargados de formatear el texto que se mostrara en pantalla con la ayuda de un StringBuilder y el método encargado de asignar una imagen a nuestro UIViewImage en base a un nombre, además si no existe una imagen para ese nombre, nos devolverá una imagen predeterminada que indica que no existe.
        private string CreateFormatingText (string name)
        {
            StringBuilder Text = new StringBuilder ();
            Text.Append ("Name of Image: ");
            Text.Append (name);
            return Text.ToString ();
        }


        private UIImage LoadImage (string Name)
        {
            UIImage temp = UIImage.FromFile ("Images/" + Name);
            if (temp == null) 
            {
                temp = new UIImage ("Images/photo_not_available-png.png");
                return temp;
            } 
            else 
                return temp;
        }   
Después, vamos a crear una lista de Strings, que almacene los nombres de archivos a buscar y lo inicializamos en el constructor del controlador:
 
        private List ImagesNames;
        public ScrollViewExampleViewController () 
            : base ("ScrollViewExampleViewController", null)
        {
            ImagesNames = new List (){
            "0.png",
            "1.png",
            "2.png",
            "3.png",
            "4.png",
            "5.png",
            "6.png"
            } ;
        }  
Y por último vamos a llamar al método que inicializa los paneles en el método ViewDidLoad:
 
CreatePanels (ImagesNames.Count);  
El resultado se verá como sigue:
Suerte!
Source

Comentarios

Entradas populares de este blog

Conectarse a un Web Service en PHP con WPF

Ejecutar comandos en el CMD de Windows desde C#

Usar Log4Net en un proyecto ASP.NET MVC