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

Шрифт
Фон

@property (retain, nonatomic) NSArray *elementos;

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

@end

Agora temos diversas tarefas para fazer, de tal maneira que, ao iniciar, o aplicativo

conecte-se a API do 500px, baixe as informações das últimas fotos postadas pelos

usuários, e mostre-as em um scroll na medida que interagimos com ele. A lista de

tarefas pode ser resumida desta maneira:

Configurar os blocks de sucesso e erro do AFNetworking

Configurar o scroll, para que tenha tamanho suficiente para comportar todas

as imagens

Pré-gerar os componentes de imagens (porém sem carregá-las ainda)

Código para carregar uma determinada imagem

Carregar as outras imagens à medida que interagimos com o scroll

6.6

Configurar os blocks de sucesso e erro do AF-

Networking

A primeira parte do código ficará no método viewDidLoad, que é um método de-

clarado na classe UIViewController da qual a nossa classe ViewController herda

(note que os nomes são muito parecidos, cuide para não fazer confusão). Ele é exe-

cutado automaticamente pelo iOS assim que a view do controller é carregada em

memória, portanto é um bom lugar para preparar o controller para uso, como inici-

alizar variáveis, criar outras views auxiliares etc.

Lembre-se dos imports

Não esqueça de importar o arquivo AFNetworking.h, através da

instrução #import "AFNetworking.h" logo no início do arquivo

ViewController.m

112

Casa do Código

Capítulo 6. Realizando operações com a Internet

1 -(void) viewDidLoad

2 {

3

[super viewDidLoad];

4

5

NSString *url = @"http://bit.ly/livroios-500px";

6

AFHTTPRequestOperationManager *manager =

7

[AFHTTPRequestOperationManager manager];

8

9

manager.responseSerializer = [AFJSONResponseSerializer serializer];

10

11

[manager GET:url parameters:nil

12

success:^(AFHTTPRequestOperation *operation, id json) {

13

_elementos = json[@"photos"];

14

[self mostraMensagem:[NSString

15

stringWithFormat:@"%d imagens encontradas",

16

_elementos.count]];

17

18

if (_elementos.count > 0) {

19

[self inicializaScroll];

20

}

21

}

22

failure:^(AFHTTPRequestOperation *operation, NSError *error) {

23

[self mostraMensagem:[NSString stringWithFormat:@"Erro: %@",

24

[error localizedDescription]]];

25

}

26

];

27 }

A linha 9 configura o request para lidar com dados JSON, utilizando uma classe

própria para isso do AFNetworking, a AFJSONResponseSerializer. Na linha

12 declaramos o bloco de sucesso, sendo que o último parâmetro id json é

o que conterá os dados do JSON em si, porém já convertidos para um NSDictionary

pelo AFNetworking. Esta é a parte em que usar AFJSONResponseSerializer é

vantajoso, pois caso contrário teríamos que lidar manualmente com alguma biblio-

teca JSON. Na linha 13 pegamos todos os itens retornados pelo 500px, e guardamos

para uso posterior na classe.

113

6.7. Configurar o scroll e pré-gerar os componentes de imagens

Casa do Código

Como saber o que terá no NSDictionary?

Dois detalhes importantes: primeiro, a declaração do bloco success

passa o parâmetro json como sendo do tipo id, que é um tipo coringa.

Se você conhece Java ou C#, é como se fosse o Object destas lingua-

gens. Além disso, a documentação do AFNetworking não diz nada ex-

plicitamente que o tipo passado será um NSDictionary, porém nos testes

realizados foi este o caso, então assume-se que ao menos será um tipo

compatível. Em segundo lugar, uma maneira fácil de descobrir a estru-

tura dos dados no dicionário (que foi a usada a primeira vez que utili-

zei a biblioteca) é simplesmente jogar o conteúdo no console, através de

NSLog(@"%@", json). Como você pode ver, não há nenhuma má-

gica envolvida, apenas um pouco de programação orientada à tentativa

e erro

O block failure, na linha 22, simplesmente mostra a mensagem de erro ao usuá-

rio, caso a requisição falhe por qualquer motivo.

6.7

Configurar o scroll e pré-gerar os componen-

tes de imagens

O componente UIScrollView que adicionamos no arquivo Main.storyboard foi

criado apenas com as configurações padrão, e agora vamos definir o tamanho da área

em que o usuário poderá navegar, assim como adicionar as outras views que serão

responsáveis por mostrar as imagens. Uma das propriedades mais importantes do

UIScrollView é a contentSize, que especifica a largura e altura do conteúdo e que,

dependendo dos valores informados e do tamanho da tela, permite que o usuário

faça scroll para cima ou para baixo. O tipo da propriedade contentSize é CGSize,

que é uma estrutura que comporta largura e altura, com ponto flutuante ( float),

e é relativa ao tamanho do frame do scroll. Portanto, se o scroll tem 320x480 de

tamanho, um contentSize com as mesmas dimensões não permitirá a rolagem do

conteúdo, porém se o contentSize for de, digamos, 3200x500, será possível rolar uma

grande quantidade na horizontal, e um pouco na vertical. Simples assim.

1 -(void) inicializaScroll {

2

float largura = self.scroll.bounds.size.width;

114

Casa do Código

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

0
Шрифт
Фон

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