Casa do Código
Importar a biblioteca auxiliar de imagens
Para que o código compile corretamente é necessário importar al-
gumas classes adicionais que vem junto com o AFNetworking. Vá ao
menu File -> Add files to VisualizadorImagens e localize a pasta UI-
Kit+AFNetworking no diretório onde descompactou a biblioteca ante-
riormente.
Clique em Add e em seguida adicione a seguinte linha logo no início
do arquivo ViewController.m:
# import "UIImageView+AFNetworking.h"
6.9
Carregar as outras imagens à medida que inte-
ragimos com o scroll
A última parte do código é responsável por carregar as demais imagens à medida
que navegamos pelo scroll.
O método scrollViewDidScroll: é um método es-
pecial, especificado no UIScrollViewDelegate que declaramos no arquivo ViewCon-
troller.h anteriormente. O UIScrollViewDelegate tem diversos métodos que podem
ser implementados, como início e fim de zoom, animação e aceleração. O com-
portamento do scrollViewDidScroll é ser executado diversas vezes, permitindo por
exemplo que alguma ação (como carregar a imagem) seja feita enquanto o scroll está
sendo rolado. Contudo, optamos por fazer esta tarefa apenas quando o usuário esti-
ver parado em uma determinada posição:
-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
int x = (int)self.scroll.contentOffset.x;
int largura = self.scroll.frame.size.width;
// Somente carrega a próxima imagem
// caso o scroll tenha parado em uma página
if (x % largura == 0) {
int pagina = x / largura;
[self carregaImagemRemota:pagina];
}
}
118
Casa do Código
Capítulo 6. Realizando operações com a Internet
A propriedade contentOffset, utilizada na linha 1, contêm a posição x e y em
que a rolagem do scroll se encontra. Ela é do tipo CGPoint. Caso queira visualizar
em detalhes os valores desta propriedade, você pode jogar no console desta forma:
NSLog("contentOffset: %@",
NSStringFromCGPoint(self.scroll.contentOffset));
Rode o aplicativo ( Command + R) e navegue pelas fotos. O código completo do
aplicativo encontra-se na pasta VisualizadorImagens.
6.10
Faça seu aplicativo funcionar em todas as ori-
entações
Um dos problemas que o nosso aplicativo tem é que, se você tentar girá-lo para a ori-
entação landscape (ou horizontal, como muitas pessoas utilizam, especial leigos),
verá que as coisas simplesmente ficam totalmente tortas, conforme mostra a figura
6.10.
Figura 6.10: Aplicativo com problemas para funcionar em landscape
119
6.10. Faça seu aplicativo funcionar em todas as orientações
Casa do Código
Simulando funcionalidades de um dispositivo real
O iOS Simulator que vem com Xcode funciona surpreendentemente
bem, sendo inclusive possível simular diferentes orientações, Geoloca-
lização e alertas de memória. Você encontra diversas opções no menu
Hardware do simulador. Eis algumas comumente utilizadas:
Girar a tela para a esquerda:
Command + Seta para
esquerda
Girar a tela para a direita: Command + Seta para direita
Chacoalhar: CTRL + Command + Z
Tela em escala 100%: Command + 1
Tela em escala 75%: Command + 2
Tela em escala 50%: Command + 3
Para solucionar o problema precisamos reorganizar as imagens depois que o apli-
cativo mudar de orientação, posicionando-as no lugar correto. Isso é necessário por-
que, quando iniciamos o aplicativo pela primeira vez, ele abre em portrait (ou ver-
tical), e tanto o componente UIScrollView quando cada UIImageView nele
adicionadas levam em consideração o tamanho da tela. Ao mudar a orientação, o
tamanho da tela também muda, e temos que lidar com isso caso a caso.
Vamos precisar de três coisas: uma variável de controle para sabermos qual
é o índice da imagem sendo visualizada no momento, permitir a rotação para
todas orientações, e lidar com o evento de rotação do dispositivo. Para a pri-
meira parte, declare uma variável do tipo int no arquivo ViewController.h
chamada
paginaAtual. Em seguida, salve nela o valor passado ao método
carregaImagemRemota:, conforme o pedaço de código abaixo:
1 -(void) carregaImagemRemota:(int) indice {
2
// Armazena o índice da imagem atual para usar no evento de rotação
3
paginaAtual = indice;
4
120
Casa do Código
Capítulo 6. Realizando operações com a Internet
5
// Restante do código já existente no método
6
// ...
7 }
Para
permitir
rotação
para
todas
as
orientações,
o
método
shouldAutorotate: precisa retornar YES, conforme abaixo:
- (BOOL)shouldAutorotate {
return YES;
}
Agora precisamos reorganizar as imagens depois que a tela girar, e para isso basta
sobrescrever o método didRotateFromInterfaceOrientation::
1 -(void) didRotateFromInterfaceOrientation:
2 (UIInterfaceOrientation)orientacao {
3
float largura = self.scroll.frame.size.width;
4
float altura = self.scroll.frame.size.height;
5
int indice = 0;
6
7
self.scroll.contentSize = CGSizeMake(largura * _elementos.count,
8
altura);
9
10
for (UIImageView *img in self.scroll.subviews) {
11
if (img.frame.size.width > 7 && img.frame.size.height > 7) {