2013-05-08 6 views
5

Ich bin neu in der iOS-Programmierung und habe nur sehr wenig Wissen über COCOA Touch. Ich versuche, auf dem Bildschirm unten auf Google Maps eine Schaltfläche hinzuzufügen, um dem Benutzer die Möglichkeit zu geben, zum vorherigen Bildschirm zurückzukehren. Ich weiß nur, dass UIButton eine Unterklasse von UIView ist, und wir können die Schaltfläche in einer Ansicht erscheinen lassen, indem wir sie zur Unteransicht dieser Klasse machen. Zuvor verwendete iOS standardmäßig Google Maps unter MKMapView und ich habe Beispiele in Büchern und im Internet gesehen, die Screenshots von Apps zeigen, wo eine Schaltfläche oder ein Textfeld auf der Karte erscheinen würde. Aber das Ziehen der Schaltfläche im Interface Builder hilft jetzt nicht.Hinzufügen einer Unteransicht wie UISlider oder UIButtom in Google Maps im iPhone

Text box over MKMapView

Hier ist mein Code:

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 

Bitte lassen Sie mich k jetzt, wie es gemacht werden kann.

Danke.

+0

Google Maps und MKMapView sind nicht verwendet und haben ein diffent Feature-Set/folgen einem anderen Ansatz –

+0

aber .. nur den Schieber einen Subview von der Karte machen. würde gut mit MKMapView funktionieren –

+1

Ich weiß, dass es gut mit MKMapView funktionieren würde. Aber soweit ich weiß, würde MKMapView mir Google Maps nicht geben. Es wird mir die Karten von Apple zur Verfügung stellen. Das ist mein wirkliches Problem. –

Antwort

6

Haben normale UI Gebäude auf der aktuellen Ansicht, dann ist das hinzufügen GMSMapView als subview (bei index 0) des self.view (NICHT self.view = mapView; tun DO)

Hier ist der wesentliche Code:

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

Durch das Einfügen der Kartenansicht unter index 0 werden die restlichen Objekte in den Vordergrund verschoben.

+0

Ich habe den von Ihnen vorgeschlagenen Code in meinem Programm hinzugefügt. Aber als ich das Programm ausführte und auf die Schaltfläche in meiner Anwendung klickte, um zur Kartenansicht zu gelangen, blieb die Anwendung hängen und der nächste Bildschirm, auf dem die Karte hätte erscheinen sollen, wurde nicht geladen. So ging ich wieder zurück zum alten Code - 'self.view = mapView_' –

+0

Würden Sie Ihren Code senden, um zu sehen, wo das Problem liegt? Achtet darauf, den obigen Code in die viewDidLoad-Methode zu schreiben, nicht in loadView. –

+0

hat das funktioniert? –

1

Ich schlage vor, erstellen Sie Ihre Schaltfläche programmgesteuert nicht mit storyBoard, ich habe dies auf "Google Maps SDK Version: 1.4.0.4450" getestet und es hat funktioniert.

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

Meine Absicht, diese Frage zu stellen, war, grundsätzlich zum vorherigen Bildschirm zu gehen. Also habe ich mein Problem gelöst, indem ich die Karte durch Einbetten in einen Navigations-Controller angezeigt habe. Aber der einzige Nachteil ist, dass die Navigationsleiste etwas Platz auf dem Bildschirm einbüßt, obwohl ich nur an einem kleinen Knopf interessiert bin, um das Notwendige zu tun. –

Verwandte Themen