. Crie o seu próprio serviço de web para um aplicativo iOS, parte três - Tudo Sobre Tecnologia

Essa parcela de nossa série desenvolvimento iOS explora criar e armazenar as etiquetas, a fim de trocá-los. 
Para criar etiquetas, é preciso ter uma classe para conter nossas informações tag. Então, crie uma nova subclasse NSObject chamado Tag e explorar seu arquivo h.:

# Import <Foundation/Foundation.h>
@ Tag Interface: NSObject {
NSNumber * rglatitude;
NSNumber * rglongitude;
NSString * originUdid;
NSString * destintyUdid;
NSString * rgcountry;
NSString * remetente;
NSString * receptor;
}
@ Property (não atômica, cópia) NSString * destintyUdid;
@ Property (não atômica, cópia) NSNumber * rglatitude;
@ Property (não atômica, cópia) NSNumber * rglongitude;
@ Property (não atômica, cópia) NSString * originUdid;
@ Property (, cópia não atômica) NSString * rgcountry;
@ Property (não atômica, cópia) NSString * remetente;
@ Property (não atômica, cópia) NSString * receptor;
- (Id) initWithOriginUdid: (NSString *) oudid
rglatitude: (NSNumber *) lati
rglongitude: (NSNumber *) longi;
- (Id) initWithSender: (NSString *) senderi
receptor: (NSString *) receiveri
rglatitude: (NSNumber *) lati
rglongitude: (NSNumber *) longi
rgcountry: (NSString *) rgcountri;
- (Id) initWithOriginUdid: (NSString *) oudid
destintyUdid: (NSString *) dudid
rglatitude: (NSNumber *) lati
rglongitude: (NSNumber *) longi
rgcountry: (NSString *) rgcountri;
@ End
e sua m de arquivo:.
# Import "Tag.h"
@ Tag implementação
@ Sintetizar originUdid, destintyUdid, remetente, destinatário;
@ Sintetizar rglatitude, rglongitude, rgcountry;
/ / Unsused até agora
- (Id) initWithOriginUdid: (NSString *) oudid
rglatitude: (NSNumber *) lati
rglongitude: (NSNumber *) longi
{
NSLog (@ "INIT TAG");
if ((self = [super init]) == nil)
retornam nil;
self.rglatitude = lati;
self.rglongitude = longi;
self.originUdid = oudid;
retornar auto;
}
- (Id) initWithSender: (NSString *) senderi
receptor: (NSString *) receiveri
rglatitude: (NSNumber *) lati
rglongitude: (NSNumber *) longi
rgcountry: (NSString *) rgcountri
{
NSLog (@ "TAG INIT DO TIPO EMISSOR RECEPTOR");
if ((self = [super init]) == nil)
retornam nil;
self.receiver = receiveri;
self.rglatitude = lati;
self.rglongitude = longi;
self.sender = senderi;
self.rgcountry = rgcountri;
retornar auto;
}
- (Id) initWithOriginUdid: (NSString *) oudid
destintyUdid: (NSString *) dudid
rglatitude: (NSNumber *) lati
rglongitude: (NSNumber *) longi
rgcountry: (NSString *) rgcountri
{
NSLog (@ "INIT TAG");
if ((self = [super init]) == nil)
retornam nil;
self.destintyUdid = dudid;
self.rglatitude = lati;
self.rglongitude = longi;
self.originUdid = oudid;
self.rgcountry = rgcountri;
retornar auto;
}
@ End
Este é o código que vai criar as marcas individuais quando chamado. O lugar ideal para chamar um geotag é de uma vista de mapa, que é precisamente o que vamos criar - um MapViewController. Você vai encontrar o seu arquivo h abaixo.:
# Import <UIKit/UIKit.h>
# Import <MapKit/MapKit.h>
# Import "SantiappsHelper.h"
# Import "Tag.h"
# Import <iAd/iAD.h>
# Import "BumpClient.h"
@ Classe CLGeocoder;
@ Classe ModalViewController;
@ MapViewController Interface: UIViewController <MKMapViewDelegate,ADBannerViewDelegate> {
NSMutableData * received_data;
UIButton * bumpButton;
}
@ De propriedade (não-atômicas, reter) IBOutlet MKMapView * MapView;
@ Property (não atômica, reter) CLGeocoder * reverseGeocoder;
@ Property (não atômica, reter) CLLocationManager * locationManager;
@ Property (não atômica, reter) IBOutlet UIBarButtonItem * getAddressButton;
@ Property (não atômica, reter) IBOutlet UIBarButtonItem * plotMeButton;
@ Property (não atômica, reter) IBOutlet UIButton * buyMoreButton;
@ Property (não atômica, reter) NSArray * allUserTags;
@ Property (não atômica, reter) NSNumber * rglat;
@ Property (não atômica, reter) NSNumber * rglong;
@ Property (não atômica, reter) NSString * postUDID;
@ Property (não atômica, reter) NSDate * posteriores;
@ Property (não atômica, reter) NSString * país;
@ Property (não atômica, reter) NSString * post1;
@ Property (não atômica, reter) NSString * post2;
@ Property (readwrite) BOOL ceroIsSingle;
@ Property (não atômica, reter) Tag * newlyTag;
/ / iAds
@ Property (não atômica, reter) ADBannerView * ADView;
@ Property BOOL bannerIsVisible;
/ / COLISÃO API
@ Property (não atômica, reter) IBOutlet UIImageView * bumpFourLogo;
@ Property (não atômica, reter) IBOutlet UIBarButtonItem * bumpToConnectButton;
- (IBAction) startBumpButtonPress;
- (Void) postToFacebook;
- (IBAction) reverseGeocodeCurrentLocation;
- (IBAction) plotMeMethod;
- (IBAction) buyMoreSelector;
@ End
# Import "MapViewController.h"
# Import "PlaceMarkViewController.h"
# Import "MapViewAnnotation.h"
# Import "ModalViewController.h"
# Import "InAppPurchaseManager.h"
@ MapViewController implementação
/ / In App Purchase chamada de método
- (IBAction) buyMoreSelector {
InAppPurchaseManager * compra = [[InAppPurchaseManager alloc] init];
[Comprar loadStore];
}
# Pragma CRIAR tags simples ou trocados
/ / Trocas e cria tag com o valor 2 ---
- (IBAction) startBumpButtonPress {
self.ceroIsSingle = 1;
[Auto configureBump];
CLLocation * userLoc = self.mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;
self.rglat = [NSNumber numberWithDouble: self.mapView.userLocation.location.coordinate.longitude];
self.rglong = [NSNumber numberWithDouble: self.mapView.userLocation.location.coordinate.longitude];
/ / Obtém o identificador de e-mail armazenados NSUserPrefs ...
NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
NSString * storedUserName = [prefs objectForKey: @ "storedUser"];
self.newlyTag = [[Tag alloc] initWithSender: receptor storedUserName: nil rglatitude: self.rglat rglongitude: self.rglong rgcountry: nil];
NSLog (@ "newTag incompleto:% @,% @,% @,% @,% @", self.newlyTag.sender, self.newlyTag.rglatitude, self.newlyTag.rglongitude, self.newlyTag.receiver, self.newlyTag . rgcountry);
[Auto postToFacebook];
}
# REDES SOCIAIS ou parcela pragma
/ / Lotes suas tags
- (IBAction) plotMeMethod {
/ / Quando chamado loop thru matriz de VDL e enredo ...
NSLog (@ "allUserTags Array:% @", self.allUserTags);
NSDictionary * anEntry;
para (anEntry em self.allUserTags) {
/ / Cria uma variável local
CLLocationCoordinate2D localização;
location.latitude = [[anEntry objectForKey: @ "latitude"] doubleValue];
location.longitude = [[anEntry objectForKey: @ "longitude"] doubleValue];
/ / Adicionado para ver se os locais são impressos
NSLog (@ "coordlocation:% f,% f", location.latitude, location.longitude);
/ / Adiciona a anotação ao nosso ver no mapa
MapViewAnnotation * newAnnotation = [[MapViewAnnotation alloc] initWithTitle: @ "Tag" andCoordinate: local];
[Self.mapView AddAnnotation: newAnnotation];
[Release newAnnotation];
}
}
- (Void) {presentLogin
NSLog (@ "login");
NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
if ([prefs stringForKey: @ "storedUser"]! && [prefs stringForKey: @ "storedPass"]) {
NSLog (@ "Não prefs usuário armazenadas");
/ / Mas espere, antes de tudo isso, deixa aparecer um controlador de vista para o registro do usuário
UIStoryboard * sb = [UIStoryboard storyboardWithName: @ pacote "Storyboard": nil];
ModalViewController * popupController = [sb instantiateViewControllerWithIdentifier: @ "ModalViewController"];
[Auto presentViewController: popupController animado: NÃO conclusão: nil];
} Else {
NSString * storedUser = [NSString stringWithFormat: @ "Usuário:% @", [prefs stringForKey: @ "storedUser"]];
NSString * storedPass = [NSString stringWithFormat: @ "Usuário:% @", [prefs stringForKey: @ "storedPass"]];
UIAlertView * internetAlert = [[UIAlertView alloc] initWithTitle: storedUser
mensagem: storedPass
Delegado: auto
cancelButtonTitle: @ "Cancelar"
otherButtonTitles: @ "Ok", nil];
[InternetAlert show];
}
}
- (Void) viewDidAppear: (BOOL) animado {
[Super viewDidAppear: YES];
[Auto performSelector: @ selector (presentLogin) withObject: nil afterDelay: 1.5];
}
/ / Implementar viewDidLoad fazer a configuração adicional depois de carregar a vista, normalmente a partir de uma ponta.
- (Void) {viewDidLoad
[Super viewDidLoad];
self.mapView.delegate = auto;
self.mapView.showsUserLocation = YES;
/ / Obter usuário armazenado para carregar-buscar dados
NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
/ / Verifica se o local habilitado
BOOL locationAllowed = [CLLocationManager locationServicesEnabled];
if (locationAllowed == NÃO) {
UIAlertView * alerta = [[UIAlertView alloc] initWithTitle: @ "Location Service Disabled"
message: @ "Para reativar, por favor, vá para Configurações e ligue Location Service para este aplicativo."
Delegado: nil
cancelButtonTitle: @ "OK"
otherButtonTitles: nil];
[Mostrar alerta];
[Release alerta];
}
/ / iAds
self.adView = [[ADBannerView alloc] initWithFrame: CGRectZero];
self.adView.frame = CGRectOffset (self.adView.frame, 0, -50);
self.adView.requiredContentSizeIdentifiers = [NSSet setWithObjects: ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil];
self.adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
[Self.view addSubview: self.adView];
self.adView.delegate = auto;
self.bannerIsVisible = NO;
}
# pragma iAd Métodos de delegado
- (Void) bannerViewDidLoadAd: (ADBannerView *) bandeira {
if (self.bannerIsVisible!)
{
[UIView beginAnimations: @ contexto "animateAdBannerOn": null];
/ / Bandeira é invisível agora e mudou-se para fora da tela em 50 px
banner.frame = CGRectOffset (banner.frame, 0, 50);
[UIView commitAnimations];
self.bannerIsVisible = YES;
}
}
- (Void) BannerView: (ADBannerView *) bandeira didFailToReceiveAdWithError: erro (NSError *) {
if (self.bannerIsVisible)
{
[UIView beginAnimations: @ "animateAdBannerOff" contexto: NULL];
/ / Bandeira é visível e movê-lo para fora da tela, devido ao problema de conexão
banner.frame = CGRectOffset (banner.frame, 0, -50);
[UIView commitAnimations];
self.bannerIsVisible = NO;
}
}
- (BOOL) bannerViewActionShouldBegin: (ADBannerView *) bandeira willLeaveApplication: (BOOL) willLeave {
NSLog (@ "vista Bandeira está começando uma ação ad");
BOOL shouldExecuteAction = YES;
if (! willLeave && shouldExecuteAction)
{
/ / Parar todos os processos interativos no aplicativo
}
voltar shouldExecuteAction;
}
- (Void) bannerViewActionDidFinish: (ADBannerView *) bandeira {
/ / Retomar tudo o que você já parou
}
- (Void) {viewDidUnload
[Super viewDidUnload];
self.mapView = nulo;
self.getAddressButton = nulo;
/ / [BumpConn stopBump];
}
- (Void) {didReceiveMemoryWarning
/ / Libera a vista, se ele não tem um superview.
[Super didReceiveMemoryWarning];
/ / Libera quaisquer dados, imagens em cache, etc que não estão em uso.
}
MÉTODOS # pragma MapView DELEGADO
- (Void) MapView: (MKMapView *) MapView didUpdateUserLocation: (MKUserLocation *) userLocation {
/ / Nós temos local, fazer a sua lógica de definir a região do mapa aqui.
CLLocationCoordinate2D zoomLocation;
zoomLocation = self.mapView.userLocation.coordinate;
/ / NSLog (@ "self.ciudad é nula - a cidade não foi escolhida, usando% g,% g", zoomLocation.latitude, zoomLocation.longitude);
CLLocationDistance visibleDistance = 5000 / / 5 km
MKCoordinateRegion adjustedRegion = MKCoordinateRegionMakeWithDistance (zoomLocation, visibleDistance, visibleDistance);
[_mapView SetRegion: adjustedRegion animado: YES];
}
- (Void) MapView: (*) MKMapView didAddAnnotationViews MapView: (NSArray *) {visualizações
/ / Recebemos a nossa localização atual, para ativar o botão "Obter endereço atual"
[Self.getAddressButton setEnabled: YES];
}
# pragma MÉTODOS COLISÃO
- (Void) quickAlert: (NSString *) titleText msgText: (NSString *) msgText {
UIAlertView * alerta = [[UIAlertView alloc] initWithTitle: mensagem titleText: msgText delegado: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil];
[Mostrar alerta];
[Release alerta];
}
- (Void) {configureBump
NSLog (@ "configureBump>");
[BumpClient configureWithAPIKey: @ "9ed7d2fa665f462eb05d5f87d4c07124" andUserID: [[UIDevice currentDevice] nome]];
[[BumpClient sharedClient] setMatchBlock: ^ (canal BumpChannelID) {
NSLog (@ "Combinado com usuário:% @", [[BumpClient sharedClient] userIDForChannel: canal]);
[[BumpClient sharedClient] confirmMatch: SIM onChannel: canal];
}];
NSLog (@ "setMatchBlock>");
[[BumpClient sharedClient] setChannelConfirmedBlock: ^ (canal BumpChannelID) {
NSLog (@ "Canal com @% confirmada.", [[BumpClient sharedClient] userIDForChannel: canal]);
/ / Username 1.Enviar armazenados como dados >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
NSData * moveChunk = [NSKeyedArchiver archivedDataWithRootObject: [prefs stringForKey: @ "storedUser"]];
[[BumpClient sharedClient] sendData: moveChunk toChannel: canal];
}];
NSLog (@ "setChannelConfirmedBlock>");
[[BumpClient sharedClient] setDataReceivedBlock: ^ (canal BumpChannelID, NSData * Dados) {
/ / 2.Receber DADOS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>
NSString * dataReceived = [NSKeyedUnarchiver unarchiveObjectWithData: dados];
NSLog (@ "Dados recebidos do% @:% @", [[BumpClient sharedClient] userIDForChannel: canal], dataReceived);
[Auto quickAlert: @ "Data Got :)" msgText: dataReceived];
}];
NSLog (@ "setDataReceivedBlock>");
[[BumpClient sharedClient] setConnectionStateChangedBlock: ^ (BOOL conectado) {
if (ligado) {
NSLog (@ "Bump conectado ...");
} Else {
NSLog (@ "Bump desligado ...");
}
}];
NSLog (@ "setConnectionStateChangedBlock>");
[[BumpClient sharedClient] setBumpEventBlock: ^ (bump_event
event) {
switch (event) {
caso BUMP_EVENT_BUMP:
NSLog (@ "Bump detectado.");
break;
caso BUMP_EVENT_NO_MATCH:
NSLog (@ ". No match");
break;
}
}];
NSLog (@ "setBumpEventBlock>");
}
@ End
Para complementar essa classe, você deve criar uma interface do usuário, criando uma cena de subclasse UIViewController e adicionar um MapView nele entre a barra de navegação ea barra de guia ( Figura A ).
Figura A
MKMapView_iGlobe112913.png
É hora de passar o passo a passo do código. Você vai ver algum código extra que usaremos na seção final deste tutorial onde somamos iAds e social.
Lembre-se de adicionar MapKit e iAdKit ao projeto no Target Settings | Build Phases | Link Libraries. O MapViewController importa o quadro MapKit, a classe SantiappsHelper, a classe Tag, o quadro iAD, e uma classe chamada BumpClient, que é é o BumpAPI que vamos acrescentar mais tarde. No MapViewController, usamos duas novas classes: InAppPurchaseManager e MapViewAnnotation. Não vamos usar a classe InAppPurchaseManager até mais tarde.
Vamos cobrir as classes que vamos usar nesta parte do tutorial. Primeiro, a classe MapViewAnnotation:
# Import <Foundation/Foundation.h>
# Import <MapKit/MapKit.h>
@ MapViewAnnotation Interface: NSObject <MKAnnotation> {
NSString * título;
CLLocationCoordinate2D coordenar;
}
@ Property (, cópia não atômica) NSString * título;
@ Property (não atômica, readonly) CLLocationCoordinate2D coordenar;
- (Id) initWithTitle: (NSString *) ttl andCoordinate: (CLLocationCoordinate2D) C2D;
@ End
e sua implementação se parece com isso:
# Import "MapViewAnnotation.h"
@ MapViewAnnotation implementação
@ Sintetizar título, coordenar;
- (Id) initWithTitle: (NSString *) ttl andCoordinate: (CLLocationCoordinate2D) C2D {
[Super init];
title = TTL;
coordenar = C2D;
retornar auto;
}
@ End
Isso cria um MKAnnotation por subclasse-lo e adicionar um título e um coordenar real. No final, nós criamos uma MapViewAnnotation com um inicializador de costume.
Autor:

Sobre Marcio Valenzuela

Meu nome é Marcio Valenzuela e eu sou de Honduras. Tenho vindo a codificação em iOS por 5 anos e eu já trabalhei em aplicações web em ASP e PHP / MySQL. Eu tenho alguns aplicativos se na app store e estou trabalhando atualmente em um par de jogos Cocos2d ...

0 comentários Goocle+ 0 Facebook

Postar um comentário

 
Tudo Sobre Tecnologia © 2013-2020. Todos os direitos reservados. Tudo Sobre Tecnologia. Desenvolvido por TST
Topo