Desenvolvimento

31 mai, 2011

Objective-C e Xcode: Google Maps no iPhone e iPad

Publicidade

Olá, galera! Veremos hoje como usar o GoogleMaps em suas aplicações para iPhone/iPad. Vamos usar o MapKit.framework nativo do Xcode e também utilizar o Segmented Control.

Estou utilizando a versão do 3.2.6 do Xcode, mas creio que com algumas versões anteriores também podem funcionar. 

Primeiro vamos criar um projeto utilizando a opção View-based Application e dar o nome de Google Maps.

Clique com o botão direito do mouse em cima da pasta Frameworks e siga para Add > Existing Frameworks. Procure por MapKit.framework, selecione e clique no botão Add. O MapKit.framework irá aparecer dentro da pasta Frameworks

Feito isso, vamos agora criar os métodos necessários para nossa aplicação rodar. Vá até a pasta Class e clique no arquivo Google_MapsViewController.h. É nele que vamos criar nossas diretrizes e principalmente importar o MapKit.framework, vamos seguir o passo-a-passo abaixo.

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface Google_MapsViewController : UIViewController {

MKMapView *verMapa;

}

@property (nonatomic, retain)IBOutlet MKMapView *controleMapa;

- (IBAction)controleMapa:(id)sender;

@end

Repare que importei a biblioteca e criei um botão controleMapa, que será um Segmented Control. Também foi criado a MKMapView, chamada de verMapa.

Reconhecendo todo o ambiente de trabalho do Xcode, vamos para a pasta de cor lilás, chamada Interface Builder Files. Dê um duplo click no arquivo Google_MapsViewController.xib, isso abrirá o Interface Builder e a tela de edição fica em evidência.

Em nossa Library vamos arrastar uma Toolbar e retirar o botão default; no lugar desse botão, vamos arrastar o Segmented Control. Ele vem com dois botões, mas vamos colocar três (logo em seguida irei mostrar como editar e colocar os valores dentro dele) e depois arrastar uma Map View e jogá-la acima, ficando assim:

Para editar as configurações de um Segmented Control você tem que clicar nele, ir para aba Attributes, e na opção Segments: 2 você troca por 3 e terá um combo com três opções: Segment 0, Segment 1 e Segment 2. Abaixo dele existe um campo Title, é nele que você vai editar os valores do campo. Veja como ficou na imagem abaixo:

Ainda no Interface Builder, clique em File’s Owner e vá em Connections. Arraste o verMapa para o MKMap View e o controleMapa para o Segmented Control. Ficará assim:

OBS: quando você arrastar o controleMapa para o Segmented Control, vai aparecer uma lista de opções. Escolha a opção Value Changed, pois, quando você clicar no Segmented Control, ele vai passar os valores 0, 1 e 2 para a função controleMapa, que já está recebendo o (id)sender.

Salve e feche o Interface Builder. Vamos voltar para o Xcode. Volte para a pasta Class e abra o arquivo Google_MapsViewController.m e jogue o seguinte código:

#import "Google_MapsViewController.h"

@implementation Google_MapsViewController

- (IBAction)controleMapa:(id)sender {

switch (((UISegmentedControl *)sender).selectedSegmentIndex) {
case 0:
verMapa.mapType = MKMapTypeStandard;
break;

case 1:
verMapa.mapType = MKMapTypeSatellite;
break;

case 2:
verMapa.mapType = MKMapTypeHybrid;
break;
}

}

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

Repare que usei o UISegmentedControl para pegar o valor atual, que foi jogado no Segmented Control, e coloquei um switch para ficar mais fácil. Cada case tem sua funcionalidade, fechei meu projeto com o [verMapa dealloc]; e vamos ver como ele ficou:

É isso aí, galera, podem perguntar se tiverem dúvidas. Pegue aqui o código completo do projeto.

Abraços e até a próxima.