2013-05-08 15 views
5

iOS Programlama konusunda yeniyim ve COCOA Touch hakkında çok az bilgiye sahibim. Kullanıcıya bir önceki ekrana geri dönme seçeneği sunması için ekranda Google Haritalar üzerinde bir düğme eklemeye çalışıyorum. Ben sadece UIButtonUIView bir alt sınıf olduğunu biliyorum ve biz bu sınıfın alt görünümünü yaparak bir görünümde düğmeyi görünebilir. Önceden iOS, Google Haritalar'ı varsayılan olarak MKMapView'da kullanıyordu ve İnternet'te bir düğmenin veya metin kutusunun haritada görüneceği ekran görüntülerini gösteren kitaplarda örnekler gördüm. Ancak şimdi sadece arayüz oluşturucudaki düğmeyi sürüklemek yardımcı olmuyor. İşte iPhone'da Google Haritalar'da UISlider veya UIButtom gibi bir alt görünüm ekleme

Text box over MKMapView

benim kodudur:

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 

bana k izin verin şimdi nasıl yapılabilir?

Teşekkürler.

+0

google haritalar ve MKMapView ilgili bir diffent özellik setine sahip değildir/farklı bir yaklaşım –

+0

izleyin ama .. sadece kaydırıcıyı haritanın bir subview olun. MKMapView –

+1

ile iyi çalışır MKMapView ile iyi çalışır biliyorum. Ama bildiğim kadarıyla MKMapView bana Google Maps vermezdi. Bana Apple tarafından sağlanan haritaları verecektir. Bu benim gerçek problemim. –

cevap

6

sonra ekleyin geçerli görünüme normal UI binayı yapın GMSMapView İşte

önemli kodudur self.view ( self.view = mapView; YAPMAYIN) ait ( index 0) subview olarak:

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

Harita görünümünün index 0'a eklenmesi, nesnelerin geri kalanını önden ayarlayacaktır. i film şeridi kullanmayan programlı düğmesine oluşturmanızı öneririz

+0

Programımda sizin tarafınızdan önerilen kodu ekledim. Fakat programı çalıştırdığımda ve uygulamaya tıkladığımda butona tıkladıktan sonra haritaya gidip uygulamayı kapatıp haritanın görünmesi gereken bir sonraki ekranı yüklemedim. Bu yüzden tekrar eski koda geri döndüm - 'self.view = mapView_' –

+0

Sorunun nerede olduğunu görmek için kodunuzu gönderir misiniz? Oh, yukarıdaki kodu viewDidLoad yöntemine yüklediğinizden emin olun, loadView değil. –

+0

bu işi yaptı mı? –

1

i "Google Haritalar SDK sürümü: 1.4.0.4450" bu test edilmiş ve işe yaradı.

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

Bu soruyu sorma amacım temel olarak önceki ekrana gitmek oldu. Bu yüzden haritayı bir Gezinme denetleyicisine yerleştirerek görüntüleyerek sorunu çözdüm. Ancak tek dezavantajı ise, navigasyon çubuğunun ekranın biraz uzağında yer almasına rağmen, ihtiyacım olanı yapmak için sadece küçük bir butonla ilgilenmeme rağmen. –

İlgili konular