2013-05-08 43 views
5

Tôi mới sử dụng Lập trình iOS và có rất ít kiến ​​thức về COCOA Touch. Tôi đang cố thêm một nút trên màn hình ở phía dưới bản đồ Google để đưa ra tùy chọn cho người dùng quay lại màn hình trước đó. Tôi chỉ biết rằng UIButton là một phân lớp của UIView và chúng tôi có thể làm cho nút xuất hiện trên một chế độ xem bằng cách đặt làm chế độ xem phụ của lớp đó. Trước đây, iOS được sử dụng để sử dụng Google Maps theo mặc định trong MKMapView và tôi đã xem các ví dụ trong sách trên Internet hiển thị ảnh chụp màn hình ứng dụng có nút hoặc hộp văn bản sẽ xuất hiện trên bản đồ. Nhưng bây giờ chỉ cần kéo nút trong trình tạo giao diện không giúp được gì.Thêm tiểu sử như UISlider hoặc UIButtom vào Google Maps trong iPhone

Text box over MKMapView

Đây là mã của tôi:

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 

Xin vui lòng cho tôi k bây giờ làm thế nào nó có thể được thực hiện.

Cảm ơn.

+0

bản đồ google và MKMapView không liên quan và có tính năng khác được đặt/làm theo cách tiếp cận khác –

+0

nhưng .. chỉ làm cho thanh trượt làm hiển thị bản đồ. sẽ làm việc tốt với MKMapView –

+1

Tôi biết nó sẽ làm việc tốt với MKMapView. Nhưng Theo như tôi biết MKMapView sẽ không cho tôi Google Maps. Nó sẽ cho tôi những bản đồ do Apple cung cấp. Đó là vấn đề thực sự của tôi. –

Trả lời

6

Do xây dựng giao diện người dùng bình thường trên quan điểm hiện tại của bạn, sau đó thêm GMSMapView như subview (tại index 0) của self.view (KHÔNG làm self.view = mapView;)

Đây là mã có ý nghĩa:

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

Chèn chế độ xem bản đồ tại index 0 sẽ đặt phần còn lại của các đối tượng ở phía trước.

+0

Tôi đã thêm mã do bạn đề xuất trong chương trình của tôi. Nhưng khi tôi chạy chương trình và nhấp vào nút trong ứng dụng của tôi để đi đến chế độ xem bản đồ, ứng dụng đã treo và không tải màn hình tiếp theo nơi bản đồ sẽ xuất hiện. Vì vậy, tôi lại quay lại mã cũ - 'self.view = mapView_' –

+0

Bạn có gửi mã của mình để xem vấn đề ở đâu không? Oh chắc chắn để đặt mã ở trên trong phương thức viewDidLoad, chứ không phải loadView. –

+0

đã làm công việc này? –

1

tôi khuyên bạn nên tạo nút của mình theo lập trình không sử dụng storyBoard, tôi đã thử nghiệm điều này trên "phiên bản Google Maps SDK: 1.4.0.4450" và nó hoạt động.

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

Mục đích của tôi về việc đặt câu hỏi này là đi đến màn hình trước đó về cơ bản. Vì vậy, tôi đã giải quyết được vấn đề của mình bằng cách hiển thị bản đồ bằng cách nhúng nó vào bộ điều khiển Điều hướng. Nhưng nhược điểm duy nhất là thanh điều hướng sẽ ăn một số không gian của màn hình mặc dù tôi chỉ quan tâm đến một nút nhỏ để làm việc cần thiết. –