2013-05-08 5 views
5

Sono nuovo alla programmazione iOS e ho poche conoscenze su COCOA Touch. Sto cercando di aggiungere un pulsante sullo schermo nella parte inferiore delle mappe di Google per dare un'opzione all'utente di tornare alla schermata precedente. So solo che UIButton è una sottoclasse di UIView e possiamo far apparire il pulsante su una vista rendendolo la vista secondaria di quella classe. In precedenza iOS utilizzava Google Maps per impostazione predefinita in MKMapView e ho visto esempi nei libri e su Internet che mostravano schermate di app in cui un pulsante o una casella di testo venivano visualizzati sulla mappa. Ma ora il semplice trascinamento del pulsante nel builder dell'interfaccia non aiuta.Aggiunta di una sottoview come UISlider o UIButtom in Google Maps in iPhone

Text box over MKMapView

Ecco il mio codice:

ViewController.h

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


@interface ViewController : UIViewController 

@property (weak, nonatomic) IBOutlet UIButton *btn; 


@end 

ViewController.m

#import "ViewController.h" 
#import <MapKit/MapKit.h> 
#import <GoogleMaps/GoogleMaps.h> 
#import <CoreLocation/CoreLocation.h> 


@interface ViewController() 

@end 

@implementation ViewController 
{ 
    GMSMapView *mapView_; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)loadView 
{ 
    CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 

    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; 
    [locationManager startUpdatingLocation]; 

    //Latitude and longitude of the current location of the device. 
    double lati = locationManager.location.coordinate.latitude; 
    double longi = locationManager.location.coordinate.longitude; 
    NSLog(@"Latitude = %f", lati); 
    NSLog(@"Longitude = %f", longi); 

    CLLocation *myLocation = [[CLLocation alloc] initWithLatitude:lati longitude:longi]; 

    // Create a GMSCameraPosition that tells the map to display the coordinate 

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:lati 
                  longitude:longi 
                   zoom:11.5]; 

    mapView_ = [GMSMapView mapWithFrame:[[UIScreen mainScreen] bounds] camera:camera]; 
    mapView_.myLocationEnabled = YES; 
    self.view = mapView_; 

    // Creates a marker in the center of the map. 
    GMSMarker *marker = [[GMSMarker alloc] init]; 
    marker.position = CLLocationCoordinate2DMake(lati, longi); 
    marker.title = @"It's Me"; 
    marker.snippet = @"My Location"; 
    marker.map = mapView_; 

    [mapView_ addSubview:_btn]; 
    [mapView_ bringSubviewToFront:_btn]; 

} 

@end 

favore fatemi k ora come può essere fatto.

Grazie.

+0

mappe e MKMapView google non sono relative e hanno un set di funzionalità diffent/seguire un approccio diverso –

+0

ma .. solo fare il cursore una visualizzazione secondaria della mappa. funzionerebbe bene con MKMapView –

+1

So che funzionerebbe bene con MKMapView. Ma per quanto ne so MKMapView non mi avrebbe dato Google Maps. Mi darà le mappe fornite da Apple. Questo è il mio vero problema –

risposta

6

Fare normale edificio interfaccia utente su visualizzazione corrente, quindi aggiungere il GMSMapView come subview (a index 0) del self.view (non faccio self.view = mapView;)

ecco il codice significativo:

mapView = [GMSMapView mapWithFrame:self.view.bounds camera:camera]; 
[self.view insertSubview:mapView atIndex:0]; 

L'inserimento della vista mappa su index 0 imposterà il resto degli oggetti in primo piano.

+0

Ho aggiunto il codice suggerito da voi nel mio programma. Ma quando ho eseguito il programma e cliccato sul pulsante nella mia applicazione per andare alla visualizzazione della mappa, l'applicazione si è bloccata e non è stata caricata la schermata successiva in cui la mappa avrebbe dovuto apparire. Quindi sono tornato di nuovo al vecchio codice - 'self.view = mapView_' –

+0

Vuoi inviare il tuo codice per vedere dove si trova il problema? Oh assicurati di inserire il codice sopra nel metodo viewDidLoad, non loadView. –

+0

ha fatto questo lavoro ?? –

1

Suggerisco di creare il pulsante non usando programmaticamente StoryBoard, l'ho provato su "Versione di Google Maps SDK: 1.4.0.4450" e ha funzionato.

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
button.frame  = CGRectMake(10, 10, 100, 40); 
[button setTitle:@"title" forState:UIControlStateNormal]; 

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:40.279526 
                 longitude:-96.987305 
                  zoom:2]; 

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];; 
self.view  = self.mapView; 

[self.view addSubview:button]; 
+0

Il mio scopo di porre questa domanda era di andare fondamentalmente alla schermata precedente. Quindi ho risolto il mio problema visualizzando la mappa incorporandola in un controller di navigazione. Ma l'unico svantaggio è che la barra di navigazione mangerà un po 'di spazio sullo schermo anche se mi interessa solo un piccolo pulsante per fare il necessario. –