Steil Rafael - iOS: Programe para iPhone e iPad стр 30.

Шрифт
Фон

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) {

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке