Advertisement
josebezerra

Silvio

Jan 16th, 2015
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //
  2. //  ViewController.m
  3. //  Táxi Tarifa 2015 - Recife
  4. //
  5. //  Created by Jose Bezerra on 1/4/15.
  6. //  Copyright (c) 2015 Jose Bezerra. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10. #import "SobreViewController.h"
  11. #import "MapViewController.h"
  12. #import <CoreLocation/CoreLocation.h>
  13. @interface ViewController (){
  14.    
  15.     CLLocationManager *locationManager;
  16.     CLGeocoder *geocoder;
  17.     CLPlacemark *origem;
  18.     CLPlacemark *destinoplacemark;
  19.     MKRoute *routeDetails;
  20.    
  21.    
  22. }
  23.  
  24. @end
  25.  
  26. @implementation ViewController
  27. @synthesize mapView;
  28.  
  29. -(UIStatusBarStyle)preferredStatusBarStyle
  30. {
  31.     return UIStatusBarStyleLightContent;
  32. }
  33.  
  34.  
  35. - (void)viewDidLoad {
  36.     [super viewDidLoad];
  37.     // Do any additional setup after loading the view, typically from a nib.
  38.     [calcular addTarget:self action:@selector(calcularact) forControlEvents:UIControlEventTouchUpInside];
  39.    
  40.     [origeminvisivel addTarget:self action:@selector(origemact) forControlEvents:UIControlEventTouchUpInside];
  41.     [destinoinvisivel addTarget:self action:@selector(destinoact) forControlEvents:UIControlEventTouchUpInside];
  42.     locationManager = [[CLLocationManager alloc] init];
  43.     geocoder = [[CLGeocoder alloc] init];
  44.    
  45.     self->locationManager = [[CLLocationManager alloc] init];
  46.     self->locationManager.delegate = self;
  47.    
  48.    
  49.     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
  50.    
  51.     if ([self->locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
  52.         [self->locationManager requestWhenInUseAuthorization];
  53.     }
  54.     //[self.mapView setShowsUserLocation:YES];
  55.     [self.mapView setDelegate:self];
  56.    
  57.     //TOP BAR
  58.     self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar.png"]];
  59.    
  60.     self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
  61.    
  62.    
  63.     //HIDE
  64.    
  65.     destinoinvisivel.hidden = YES;
  66.     origeminvisivel.hidden = YES;
  67.    
  68.     distanciabel.hidden = YES;
  69.     distancia.hidden = YES;
  70.     tempo.hidden = YES;
  71.     tempolabel.hidden = YES;
  72.     destinolabel.hidden = YES;
  73.     destino.hidden = YES;
  74.     mapView.hidden = YES;
  75.     precolabel.hidden = YES;
  76.     bandeira1.hidden = YES;
  77.     bandeira1preco.hidden = YES;
  78.     bandeira2.hidden = YES;
  79.     bandeira2preco.hidden =YES;
  80.    
  81.    
  82.    
  83. }
  84.  
  85. -(void)viewDidUnload{
  86.    
  87.     [self setMapView:nil];
  88.     [super viewDidUnload];
  89.    
  90. }
  91.  
  92. -(void)origemact{
  93.    
  94.    
  95. }
  96.  
  97. -(void)destinoact{
  98.    
  99.     destinoinvisivel.hidden = YES;
  100.     CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  101.     [geocoder geocodeAddressString:de.text completionHandler:^(NSArray *placemarks, NSError *error) {
  102.         if (error) {
  103.            
  104.             UIAlertView *alerta = [[UIAlertView alloc]initWithTitle:@"Erro" message:@"Local Nao Encontrado,Por Favor Especifique" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
  105.            
  106.             [alerta show];
  107.            
  108.             NSLog(@"%@", error);
  109.         } else {
  110.            
  111.            
  112.             origem = [placemarks lastObject];
  113.             float spanX = 1.00725;
  114.             float spanY = 1.00725;
  115.             MKCoordinateRegion region;
  116.             region.center.latitude = origem.location.coordinate.latitude;
  117.             region.center.longitude = origem.location.coordinate.longitude;
  118.             region.span = MKCoordinateSpanMake(spanX, spanY);
  119.             de.text = [NSString stringWithFormat:@"%@ %@ %@ %@ %@",
  120.                        origem.thoroughfare,
  121.                        origem.postalCode, origem.locality,
  122.                        origem.administrativeArea,
  123.                        origem.country];
  124.             [self.mapView setRegion:region animated:YES];
  125.         //    [self addAnnotation:origem];
  126.            
  127.            
  128.            
  129.         }
  130.     }];
  131.     [de resignFirstResponder];
  132. }
  133. -(IBAction)iract{
  134.    
  135.     [self.mapView removeOverlay:routeDetails.polyline];
  136.    
  137.    
  138.    
  139.     de.hidden =YES;
  140.     para.hidden = YES;
  141.     calcular.hidden = YES;
  142.     gps.hidden = YES;
  143.    
  144.     distanciabel.hidden = NO;
  145.     distancia.hidden = NO;
  146.     tempo.hidden = NO;
  147.     tempolabel.hidden = NO;
  148.     destinolabel.hidden = NO;
  149.     destino.hidden = NO;
  150.     mapView.hidden = NO;
  151.     precolabel.hidden = NO;
  152.     bandeira1.hidden = NO;
  153.     bandeira1preco.hidden = NO;
  154.     bandeira2.hidden = NO;
  155.     bandeira2preco.hidden = NO;
  156.    
  157.    
  158.    
  159.    
  160. }
  161. -(void)calcularact{
  162. //POLYLINE
  163.     if([de.text isEqualToString:@""] && [para.text isEqualToString:@""] && [de.text isEqualToString:@""] || [para.text isEqualToString:@""] && [para.text isEqualToString:@""] || [de.text isEqualToString:@""] ){
  164.        
  165.         UIAlertView *alerta = [[UIAlertView alloc] initWithTitle:@"Erro" message:@"Campo Vazio" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
  166.        
  167.         [alerta show];
  168.        
  169.     }
  170.    
  171.     else{
  172.     MKPlacemark *source = [[MKPlacemark alloc]initWithCoordinate:CLLocationCoordinate2DMake(origem.location.coordinate.latitude,origem.location.coordinate.longitude) addressDictionary:[NSDictionary dictionaryWithObjectsAndKeys:@"",@"", nil] ];
  173.    
  174.     MKMapItem *srcMapItem = [[MKMapItem alloc]initWithPlacemark:source];
  175.     [srcMapItem setName:@""];
  176.    
  177.     MKPlacemark *destination = [[MKPlacemark alloc]initWithCoordinate:CLLocationCoordinate2DMake(destinoplacemark.location.coordinate.latitude,destinoplacemark.location.coordinate.longitude) addressDictionary:[NSDictionary dictionaryWithObjectsAndKeys:@"",@"", nil] ];
  178.    
  179.     MKMapItem *distMapItem = [[MKMapItem alloc]initWithPlacemark:destination];
  180.     [distMapItem setName:@""];
  181.    
  182.     MKDirectionsRequest *request = [[MKDirectionsRequest alloc]init];
  183.     [request setSource:srcMapItem];
  184.     [request setDestination:distMapItem];
  185.     [request setTransportType:MKDirectionsTransportTypeAutomobile];
  186.    
  187.     MKDirections *direction = [[MKDirections alloc]initWithRequest:request];
  188.    
  189.     [direction calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
  190.        
  191.      //   NSLog(@"response = %@",response);
  192.         NSArray *arrRoutes = [response routes];
  193.         [arrRoutes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  194.            
  195.             MKRoute *rout = obj;
  196.            
  197.             MKPolyline *line = [rout polyline];
  198.             [self.mapView addOverlay:line];
  199.         //    NSLog(@"Rout Name : %@",rout.name);
  200.         //  NSLog(@"Total Distance (in Meters) :%f",rout.distance);
  201.            
  202.             NSArray *steps = [rout steps];
  203.            
  204.           //  NSLog(@"Total Steps : %d",[steps count]);
  205.            
  206.             [steps enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  207.         //        NSLog(@"Rout Instruction : %@",[obj instructions]);
  208.         //        NSLog(@"Rout Distance : %f",[obj distance]);
  209.             }];
  210.         }];
  211.     }];
  212.    
  213.    
  214.    
  215. //
  216.    
  217.    
  218.    
  219.    
  220.    
  221.    
  222.    
  223.         [self destinoannotation:destinoplacemark];
  224.  
  225.         [self addAnnotation:origem];
  226.    
  227.    
  228.         CLLocation *location1 = [[CLLocation alloc] initWithLatitude:origem.location.coordinate.latitude longitude:origem.location.coordinate.longitude];
  229.        
  230.         CLLocation *location2 = [[CLLocation alloc] initWithLatitude:destinoplacemark.location.coordinate.latitude longitude:destinoplacemark.location.coordinate.longitude];
  231.        
  232.         NSString *rota =[NSString stringWithFormat:@"%.2f Km", [location1 distanceFromLocation:location2]/ 1000];
  233.        
  234.         [de resignFirstResponder];
  235.         [para resignFirstResponder];
  236.        
  237.         int rotaint = [rota intValue];
  238.        
  239.         distancia.text = rota;
  240.        
  241.         destino.text = para.text;
  242.        
  243.        
  244.         float x = rotaint *2.10 +4.32;
  245.        
  246.         NSString *bandeira1str = [NSString stringWithFormat:@"R$ %.2f",x];
  247.        
  248.         bandeira1preco.text = bandeira1str;
  249.         float y = rotaint *2.54 + 4.32;
  250.         NSString *bandeira2str = [NSString stringWithFormat:@"R$ %.2f",y];
  251.        
  252.         bandeira2preco.text = bandeira2str;
  253.        
  254.         tempo.text = [NSString stringWithFormat:@"%d minutos",routeDetails.expectedTravelTime/60];
  255.    
  256.    
  257.        
  258.        
  259.         //---------------------------------------------------------------------------------------------
  260.         de.hidden =YES;
  261.         para.hidden = YES;
  262.         calcular.hidden = YES;
  263.         gps.hidden = YES;
  264.        
  265.         distanciabel.hidden = NO;
  266.         distancia.hidden = NO;
  267.         tempo.hidden = NO;
  268.         tempolabel.hidden = NO;
  269.         destinolabel.hidden = NO;
  270.         destino.hidden = NO;
  271.         mapView.hidden = NO;
  272.         precolabel.hidden = NO;
  273.         bandeira1.hidden = NO;
  274.         bandeira1preco.hidden = NO;
  275.         bandeira2.hidden = NO;
  276.         bandeira2preco.hidden = NO;
  277.        
  278.        
  279.    
  280.     }
  281. }
  282. -(IBAction)getLocation:(id)sender{
  283.    
  284.    
  285.     locationManager.delegate = self;
  286.     locationManager.desiredAccuracy = kCLLocationAccuracyBest;
  287.    
  288.     [locationManager startUpdatingLocation];
  289.    
  290.     [de becomeFirstResponder];
  291.    
  292.     destinoinvisivel.hidden = NO;
  293.    
  294.    
  295. }
  296.  
  297.  
  298.  
  299.  
  300. - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
  301. {
  302.    
  303.     CLLocation *currentLocation = newLocation;
  304.    
  305.    
  306.     [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
  307.         if (error == nil && [placemarks count] > 0) {
  308.             origem = [placemarks lastObject];
  309.             de.text = [NSString stringWithFormat:@"%@ %@ %@ %@ %@",
  310.                        origem.thoroughfare,
  311.                        origem.postalCode, origem.locality,
  312.                        origem.administrativeArea,
  313.                        origem.country];
  314.            
  315.             // [self addAnnotation:origem];
  316.         } else {
  317.             //NSLog(@"%@", error.debugDescription);
  318.         }
  319.     } ];
  320.    
  321. }
  322.  
  323.  
  324. - (BOOL)prefersStatusBarHidden {
  325.     return NO;
  326. }
  327. - (void)didReceiveMemoryWarning {
  328.     [super didReceiveMemoryWarning];
  329.    
  330. }
  331.  
  332. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)evento
  333. {
  334.    
  335.     UITouch *touch = [[evento allTouches] anyObject];
  336.    
  337.     if ([para isFirstResponder] && [touch view] != para){
  338.        
  339.         CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  340.         [geocoder geocodeAddressString:para.text completionHandler:^(NSArray *placemarks, NSError *error) {
  341.             if (error) {
  342.                
  343.                 UIAlertView *alerta = [[UIAlertView alloc]initWithTitle:@"Erro" message:@"Local Nao Encontrado,Por Favor Especifique" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
  344.                
  345.                 [alerta show];
  346.                
  347.                 NSLog(@"%@", error);
  348.             } else {
  349.                
  350.                
  351.                 destinoplacemark = [placemarks lastObject];
  352.                 float spanX = 1.00725;
  353.                 float spanY = 1.00725;
  354.                 MKCoordinateRegion region;
  355.                 region.center.latitude = destinoplacemark.location.coordinate.latitude;
  356.                 region.center.longitude = destinoplacemark.location.coordinate.longitude;
  357.                 region.span = MKCoordinateSpanMake(spanX, spanY);
  358.                 para.text = [NSString stringWithFormat:@"%@ %@ %@ %@ %@",
  359.                            destinoplacemark.thoroughfare,
  360.                            destinoplacemark.postalCode, destinoplacemark.locality,
  361.                            destinoplacemark.administrativeArea,
  362.                            destinoplacemark.country];
  363.                 [self.mapView setRegion:region animated:YES];
  364.                // [self destinoannotation:destinoplacemark];
  365.                
  366.                
  367.                 [para resignFirstResponder];
  368.  
  369.                
  370.             }
  371.         }];
  372.        
  373.     }
  374.     if ([de isFirstResponder] && [touch view] != de)
  375.     {
  376.         destinoinvisivel.hidden =YES;
  377.         CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  378.         [geocoder geocodeAddressString:de.text completionHandler:^(NSArray *placemarks, NSError *error) {
  379.             if (error) {
  380.                
  381.                 UIAlertView *alerta = [[UIAlertView alloc]initWithTitle:@"Erro" message:@"Local Nao Encontrado,Por Favor Especifique" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
  382.                
  383.                 [alerta show];
  384.                
  385.                 NSLog(@"%@", error);
  386.             } else {
  387.                
  388.                
  389.                 origem = [placemarks lastObject];
  390.                 float spanX = 1.00725;
  391.                 float spanY = 1.00725;
  392.                 MKCoordinateRegion region;
  393.                 region.center.latitude = origem.location.coordinate.latitude;
  394.                 region.center.longitude = origem.location.coordinate.longitude;
  395.                 region.span = MKCoordinateSpanMake(spanX, spanY);
  396.                 de.text = [NSString stringWithFormat:@"%@ %@ %@ %@ %@",
  397.                              origem.thoroughfare,
  398.                              origem.postalCode, origem.locality,
  399.                              origem.administrativeArea,
  400.                              origem.country];
  401.                 [self.mapView setRegion:region animated:YES];
  402.                
  403.                
  404.                
  405.                
  406.             }
  407.         }];
  408.         [de resignFirstResponder];
  409.  
  410.        
  411.        
  412.     }
  413.    
  414.     [super touchesBegan:touches withEvent:evento];
  415. }
  416.  
  417. // -------------------------------------------------------------------------------------------------------------------------------------------------------SEGUNDA VIEW CONTROLLER--------------------------------------
  418. // -----------------------------------------------------------------------------------------------------------
  419. - (IBAction)desearch:(UITextField *)sender{
  420.     CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  421.     [geocoder geocodeAddressString:sender.text completionHandler:^(NSArray *placemarks, NSError *error) {
  422.         if (error) {
  423.            
  424.             UIAlertView *alerta = [[UIAlertView alloc]initWithTitle:@"Erro" message:@"Local Nao Encontrado,Por Favor Especifique" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
  425.            
  426.             [alerta show];
  427.            
  428.             NSLog(@"%@", error);
  429.         } else {
  430.            
  431.            
  432.             origem = [placemarks lastObject];
  433.             float spanX = 1.00725;
  434.             float spanY = 1.00725;
  435.             MKCoordinateRegion region;
  436.             region.center.latitude = origem.location.coordinate.latitude;
  437.             region.center.longitude = origem.location.coordinate.longitude;
  438.             region.span = MKCoordinateSpanMake(spanX, spanY);
  439.             de.text = [NSString stringWithFormat:@"%@ %@ %@ %@ %@",
  440.                          origem.thoroughfare,
  441.                          origem.postalCode, origem.locality,
  442.                          origem.administrativeArea,
  443.                          origem.country];
  444.             [self.mapView setRegion:region animated:YES];
  445.             //   [self addAnnotation:origem];
  446.            
  447.            
  448.            
  449.         }
  450.     }];
  451.  
  452.    
  453. }
  454. - (IBAction)addressSearch:(UITextField *)sender {
  455.     CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  456.    
  457.    
  458.    
  459.     [geocoder geocodeAddressString:sender.text completionHandler:^(NSArray *placemarks, NSError *error)
  460.      {
  461.          if (error) {
  462.              
  463.              UIAlertView *alerta = [[UIAlertView alloc]initWithTitle:@"Erro" message:@"Local Nao Encontrado,Por Favor Especifique" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
  464.              
  465.              [alerta show];
  466.              
  467.              
  468.          } else {
  469.              
  470.              destinoplacemark = [placemarks lastObject];
  471.              float spanX = 1.00725;
  472.              float spanY = 1.00725;
  473.              MKCoordinateRegion region;
  474.              region.center.latitude = destinoplacemark.location.coordinate.latitude;
  475.              region.center.longitude = destinoplacemark.location.coordinate.longitude;
  476.              region.span = MKCoordinateSpanMake(spanX, spanY);
  477.              para.text = [NSString stringWithFormat:@"%@ %@ %@ %@ %@",
  478.                         destinoplacemark.thoroughfare,
  479.                         destinoplacemark.postalCode, destinoplacemark.locality,
  480.                         destinoplacemark.administrativeArea,
  481.                         destinoplacemark.country];
  482.              [self.mapView setRegion:region animated:YES];
  483.              //  [self destinoannotation:destinoplacemark];
  484.              
  485.          }
  486.      }];
  487. }
  488.  
  489. - (void)destinoannotation:(CLPlacemark *)placemarkk {
  490.     MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
  491.     point.coordinate = CLLocationCoordinate2DMake(destinoplacemark.location.coordinate.latitude, destinoplacemark.location.coordinate.longitude);
  492.     point.title = [placemarkk.addressDictionary objectForKey:@"Streeta"];
  493.     point.subtitle = [placemarkk.addressDictionary objectForKey:@"Citya"];
  494.     [self.mapView addAnnotation:point];
  495. }
  496. - (void)addAnnotation:(CLPlacemark *)placemarkk {
  497.     MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
  498.     point.coordinate = CLLocationCoordinate2DMake(origem.location.coordinate.latitude, origem.location.coordinate.longitude);
  499.     point.title = [placemarkk.addressDictionary objectForKey:@"Street"];
  500.     point.subtitle = [placemarkk.addressDictionary objectForKey:@"City"];
  501.     [self.mapView addAnnotation:point];
  502. }
  503. //
  504. //PINPOINT
  505.  
  506. - (MKAnnotationView *)mapView:(MKMapView *)_mapView viewForAnnotation:(id <MKAnnotation>)annotation
  507. {
  508.     static NSString *AnnotationViewID = @"annotationViewID";
  509.    
  510.     MKAnnotationView *annotationView = (MKAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
  511.    
  512.    
  513.     if (annotationView == nil)
  514.     {
  515.         annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
  516.     }
  517.    
  518.    
  519.    
  520.     annotationView.image = [UIImage imageNamed:@"pinpoint.png"];
  521.     annotationView.annotation = annotation;
  522.    
  523.    
  524.     return annotationView;
  525. }
  526.  
  527. //POLYLINE
  528.  
  529. - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay {
  530.    
  531.     if ([overlay isKindOfClass:[MKPolyline class]]) {
  532.         MKPolylineView* aView = [[MKPolylineView alloc]initWithPolyline:(MKPolyline*)overlay] ;
  533.         aView.strokeColor = [UIColor yellowColor];
  534.         aView.lineWidth = 10;
  535.         return aView;
  536.     }
  537.     return nil;
  538. }
  539. //
  540.  
  541.  
  542.  
  543. //ZOOM
  544. /*
  545.  -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
  546.  {
  547.  
  548.  CLLocationCoordinate2D loc =[userLocation coordinate];
  549.  MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 1000, 1000);
  550.  [self.mapView setRegion:region animated:NO];
  551.  
  552.  }
  553.  */
  554.  
  555. @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement