Marcio Trindade

Galeria de Imagens com Objective-c

Seguindo o raciocínio do post anterior onde mostrei como adicionar uma subView vou mostrar agora como fazer uma galeria de imagens bem simples. Pra dar início coloquei dentro do diretório Resources do projeto criado no Xcode um outro diretório chamado images com arquivos de nome 1.jpg até 11.jpg.

Então com o código abaixo consegui montar um exemplo bem simples e funcional de uma galeria de imagens que utilizei como base pra adicionar em meu projeto iPad.

GalleryController.h
#import <UIKit/UIKit.h>
@interface GalleryController : UIViewController {
}
- (CGSize)screenSize:(UIInterfaceOrientation)orientation;
@end
GalleryController.m
#import "GalleryController.h"

#define UIInterfaceOrientationIsPortrait(orientation) ((orientation) == UIInterfaceOrientationPortrait || (orientation) == UIInterfaceOrientationPortraitUpsideDown)
#define UIInterfaceOrientationIsLandscape(orientation) ((orientation) == UIInterfaceOrientationLandscapeLeft || (orientation) == UIInterfaceOrientationLandscapeRight)

@implementation GalleryController

- (void)viewDidLoad {
        CGRect screenFrame = [UIScreen mainScreen].bounds;
        UIScrollView *scrollView = [[[UIScrollView alloc] initWithFrame:screenFrame] autorelease];
        scrollView.backgroundColor = [UIColor blackColor];
        scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
        scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 10, scrollView.frame.size.height);
        scrollView.tag = 100;
        scrollView.pagingEnabled = YES;
        scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
        [self.view addSubview:scrollView];

        int i;
        for (i = 1; i <= 10; i++){
                // Foto
                UIImageView *imgView = [[[UIImageView alloc] initWithFrame:screenFrame] autorelease];
                imgView.tag = i;
                imgView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", i]];
                imgView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

                if(imgView.image.size.width < screenFrame.size.width && imgView.image.size.height < screenFrame.size.height){
                        imgView.contentMode = UIViewContentModeCenter;
                }else{
                        imgView.contentMode = UIViewContentModeScaleAspectFit;
                }

                [scrollView addSubview:imgView];
        }

        [self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
        [super viewDidLoad];
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
        CGSize size = [self screenSize:toInterfaceOrientation];
        UIScrollView *scrollView = (UIScrollView *)[self.view viewWithTag:100];

        int i = 1;
        for (UIImageView* imgView in scrollView.subviews) {
                if (imgView.tag == i) {
                        CGRect frame = imgView.frame;
                        frame.origin.x = (size.width * (i-1));
                        imgView.frame = frame;
                }
                i++;
        }

        int currentIndex = roundf(scrollView.contentOffset.x / scrollView.bounds.size.width);
        scrollView.contentSize = CGSizeMake(size.width * 10, size.height);
        [scrollView setContentOffset:CGPointMake(currentIndex * size.width, 0) animated:NO];
}

- (CGSize)screenSize:(UIInterfaceOrientation)orientation {
        int width = 1024;
        int height = 748;
        if(UIInterfaceOrientationIsPortrait(orientation)){
                width = 768;
                height = 1004;
        }
        return CGSizeMake(width, height);
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return YES;
}

- (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
}


- (void)dealloc {
        [super dealloc];
}

@end

Espero que ajude que precisar fazer uma galleria de imagens com mudança de orientação tanto no iPad como no iPod.