2013-12-13 18 views
5

Tôi muốn khởi tạo trung tâm của bản đồ thành vị trí tùy chỉnh. Đây là mã mà tôi sử dụng để khởi tạo:Cách đặt vị trí trung tâm của đối tượng GMSMapView được xác định tại Storyboard

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    //mapView 
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.0109 
                  longitude:28.998 
                   zoom:6]; 
    self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
    [self.mapView setCenter:CGPointMake(41.0109,28.998)]; 
} 

Khi tôi chạy mã này, tôi thấy một bản đồ tập trung vào Greenwich chứ không phải là vị trí mà ta đã ban cho máy ảnh (41.0109,28.998).

Khi tôi gỡ lỗi mã và in vị trí của self.mapView.camera, đây là đầu ra: GMSCameraPosition 0x17742ee0: target:(41.011, 28.998) bearing:0.000 zoomLevel:6.000 viewingAngle:0.000 lookAhead:0.000. Vì vậy, tôi đã thiết lập thành công vị trí của máy ảnh, tại sao nó lại mở với vị trí của Greenwich?

Edit:

Xin lưu ý rằng, MapView là một subview (UIView) mà tôi thêm vào trang chính và tôi đã cố gắng để thiết lập và sửa đổi vị trí trung tâm. Đây là ảnh chụp nhanh bảng phân cảnh của tôi: enter image description here

Khi tôi cố gắng sửa đổi mapView, tôi không thể đặt vị trí của bản đồ. Tuy nhiên, nếu tôi sử dụng "chế độ xem" là chế độ xem chính của cửa sổ, tôi có thể thay đổi thành công trung tâm của bản đồ.

Tại sao lại là lý do?

Làm cách nào để đặt vị trí khởi động của GMSMapView?

Chỉnh sửa 2 Mã nguồn cho dự án này có thể được tìm thấy here

+0

Bạn đã cập nhật lên phiên bản GoogleMaps.framework mới nhất chưa. – Linuxios

+0

Linuxios, tôi đang sử dụng cocoapods và đây là PodFile của tôi: "pod" Google-Maps-iOS-SDK "," ~> 1.6.1 "'. Nó nói tại [Google Maps iOS SDK] (https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios) rằng 1.6.1 là phiên bản mới nhất. – ankakusu

+0

Thử thêm một cuộc gọi vào '[map startRendering]' ở cuối phương thức của bạn. Xem nếu điều đó giúp. – Linuxios

Trả lời

6

Bạn đã kết thúc với hai GMSMapView đối tượng. Đầu tiên là cái mà bạn đã tạo trong Interface Builder và cái thứ hai là cái mà bạn đã tạo lập trình với đối tượng GMSCameraPosition trong phương thức -viewDidLoad.

Dường như self.mapsView tham chiếu chế độ xem mà bạn đã tạo trong Trình tạo giao diện. Khi bạn gán một đối tượng GMSMapView mới với dòng này;

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

bạn đang thực sự mất đi một trong đó được tạo ra trong Interface Builder, vì vậy bạn cố gắng để thay đổi vị trí camera không hoạt động, bởi vì bạn đang gửi thông điệp đến đối tượng sai.

Cũng vì không thêm đối tượng thứ hai GMSMapView vào chế độ xem sau khi bạn đã tạo nó theo cách lập trình, theo phương pháp -viewDidLoad, bạn không nhìn thấy nó trong ứng dụng của mình. Mặc dù nó đặt vị trí camera chính xác.

Vì vậy, bạn có hai tùy chọn;

1- Xóa bản đồXem từ trình tạo giao diện (và hủy liên kết ổ cắm của nó) và không chạm vào mã nhưng thay thế dòng này;

[self.mapView setCenter:CGPointMake(41.0109,28.998)];

với dòng này;

[self.view addSubview:self.mapView];

Vì vậy, bạn sẽ có chế độ xem bản đồ được tạo theo chương trình.

2- Không chạm vào bảng phân cảnh, nhưng xóa dòng này;

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

Vì vậy, bạn sẽ tạo ra một bản đồ trong Interface Builder, và cấu hình nó.

Sau đó, tất cả sẽ ổn thôi.

+0

câu trả lời hoàn hảo! –

0

Những gì bạn có thể, thường làm, trong khi thêm GMSMapView hoặc bất kỳ chế độ xem tùy chỉnh tùy chỉnh nào khác và bạn vẫn muốn sử dụng cơ chế của Trình tạo giao diện. Để thêm một đơn giản View từ thư viện IB, sau đó truy cập Trình kiểm tra nhận dạng và thay đổi Lớp thành GMSMapView. Và bạn đã sẵn sàng - bạn có thể áp dụng các ràng buộc, tạo một lối thoát cho ViewController của bạn, v.v.

Các vấn đề liên quan