+2500
Empresas han confiado en nosotros
51,5k
Personas que hemos formado
13
años de liderazgo

Aprende a implementar un scroll en iOS

En este tutorial aprenderemos a implementar un scroll en iOS con un efecto parallax, que consiste en desplazar ligeramente las imágenes a medida que el scroll avanza, revelando diferentes partes de las imágenes.

Paso 1: Crear un nuevo proyecto

El primer paso es crear un nuevo proyecto de tipo Single View Application en Xcode.

Paso 2: Añadir un UIScrollView a la vista

El segundo paso consiste en añadir un UIScrollView a la vista del controlador principal. Para ello, creamos una propiedad scrollView y la enlazamos. Asegúrate de añadir la siguiente línea al archivo .m para la propiedad scrollView:

@synthesize scrollView;

Además, mediante Interface Builder, asignamos el File's Owner como delegado del UIScrollView. Para hacer esto, haz clic derecho sobre el UIScrollView, arrastra desde "delegate" hacia el File's Owner en el lateral de Interface Builder.

Paso 3: Implementar el protocolo UIScrollViewDelegate

Dado que hemos asignado nuestro controlador como delegado del scroll, debemos implementar el protocolo UIScrollViewDelegate. Añade la siguiente importación y declaración en el archivo de cabecera (.h):

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@end

Paso 4: Añadir vistas e imágenes al scroll

En el método viewDidLoad, añadiremos las vistas e imágenes necesarias a nuestro scroll. Podemos hacerlo con el siguiente código:

int y = 0;

for (int i = 1; i < 10; i++) {
    // Creamos la vista que contendrá y limitará la imagen
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, y, self.view.frame.size.width, 100)];
    
    // Es importante esta propiedad para evitar que las imágenes se vean fuera de los límites de la vista al desplazar
    view.clipsToBounds = YES;
    
    // Creamos la imagen
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"Image%d.png", i % 3 + 1]]];
    
    // Asignamos el frame para que la imagen esté ligeramente subida y se vea correctamente al desplazar
    imageView.frame = CGRectMake(0, -20, imageView.frame.size.width, imageView.frame.size.height);
    
    // Añadimos la imagen a la vista
    [view addSubview:imageView];
    
    // Añadimos la vista al scroll
    [self.scrollView addSubview:view];
    
    // Aumentamos el valor de y para que la siguiente vista aparezca por debajo de la anterior
    y += view.frame.size.height + 5;
}

// Ajustamos el alto del contenido del scroll
[self.scrollView setContentSize:CGSizeMake(self.scrollView.contentSize.width, y)];

// Almacenamos el offset inicial
lastOffset = self.scrollView.contentOffset;

Observa que hay una variable que no se ha declarado, la variable lastOffset. Por lo tanto, debemos declararla en la cabecera del archivo (.h):

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    CGPoint lastOffset;
}

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@end

Si ejecutamos la aplicación, dispondremos de un scroll con diversas imágenes añadidas.

Paso 5: Implementar el efecto parallax

Ahora vamos a implementar el efecto parallax en nuestro scroll.

Para ello, debemos implementar el método scrollViewDidScroll: del delegate. En este método, calcularemos la diferencia entre el offset anterior y el actual, y trasladaremos todas las imágenes según esta diferencia.

(void)scrollViewDidScroll:(UIScrollView *)_scrollView {
    // Calculamos la diferencia entre el offset anterior y el actual
    float difference = lastOffset.y - _scrollView.contentOffset.y;
    
    // Ajustamos la diferencia para evitar un desplazamiento excesivo de las imágenes
    difference = difference / 10;
    
    // Recorremos las vistas contenidas por el scroll
    for (UIView *subviewIterator in _scrollView.subviews) {
        // Recorremos las imágenes contenidas en las vistas
        for (UIImageView *imageViewIterator in subviewIterator.subviews) {
            // Trasladamos la imagen según la diferencia del offset anterior y el actual
            imageViewIterator.transform = CGAffineTransformMakeTranslation(0, difference);
        }
    }
}

Consideraciones adicionales

Para obtener el mejor efecto posible, debemos tener en cuenta el tamaño de las fotos y el desplazamiento que les asignamos. Si las imágenes son muy pequeñas, debemos desplazarlas solo ligeramente para evitar que se vean mal. Asegúrate de situar correctamente las imágenes para evitar que se revele el fondo de la vista al desplazar el scroll desde la posición inicial.

¡Con estos simples pasos tendrás un scroll con imágenes que se desplazan al hacer scroll! Solo queda buscar imágenes adecuadas para lograr el mejor efecto posible.

Aprende a programar en iOS

Tras este tutorial, te recomendamos consultar la página de nuestro curso de programación en iOS, así como nuestro curso de iOS avanzado.

Contáctanos
Contáctanos

Solicita la información que necesites

Facilítanos tus datos y uno de nuestros asesores se pondrá en contacto contigo, para informarte sobre el curso que mejor se adapta a tus necesidades. Todas nuestras formaciones se pueden bonificar hasta el 100%, a través de FUNDAE, sujeto a realizar la formación a través de la empresa y a tener crédito disponible. Tenemos diferentes modalidades de formación; Online o Aula Virtual Personalizada, a medida