Sử dụng Google Maps dành cho iOS SDK, nút "My Location" là theo mặc định được đặt ở góc dưới bên phải:Google Maps iOS SDK di chuyển nút "My Location" xuống dưới tay trái góc
Tôi muốn đặt nó ở góc dưới cùng bên trái (vâng, tôi nhận ra rằng tôi cần phải cẩn thận để không làm mờ logo "Google" ở đó). Tôi không tin rằng SDK có cách "chính thức" để thực hiện việc này, nhưng dựa trên this answer Tôi đã tìm ra cách để có được một tổ chức của subview nút Vị trí của tôi để tôi có thể định vị nó.
Phần khiến tôi bối rối là những giá trị tôi nên đưa cho khung và/hoặc giới hạn của chế độ xem Vị trí của tôi để có được nó ở nơi tôi muốn. Đối với người mới bắt đầu, nút Vị trí của tôi như hiện tại là frame.origin.x
= -74
và frame.origin.y
= -54
. Đây là lần đầu tiên tôi nhìn thấy tọa độ âm cho một số frame.origin.x
hoặc frame.origin.y
và tôi thậm chí không chắc cách iOS xử lý tọa độ phủ định. Suy nghĩ đầu tiên của tôi là frame.origin.x = -74
tương đương với [view superview].frame.size.width - 74
, tức là giá trị âm được trừ khỏi chiều rộng hoặc chiều cao của người giám sát. Nhưng sau đó tôi nhìn vào chiều rộng và chiều cao của superview và cả hai đều là 0.0
. Dưới đây là mã của tôi mà kết quả đầu ra một số thông tin về tất cả các bản đồ và các khung nút vị trí của tôi vọt:
- (void)loadView {
GMSCameraPosition *cam = [GMSCameraPosition cameraWithLatitude:jcuTownsvilleCenterCampusLat longitude:jcuTownsvilleCenterCampusLon zoom:17];
self.campusMap = [GMSMapView mapWithFrame:CGRectZero camera:cam];
self.campusMap.myLocationEnabled = YES;
self.campusMap.settings.myLocationButton = YES;
self.view = self.campusMap;
for (UIView *view in self.campusMap.subviews) {
NSLog(@"view.description: %@",view.description);
if ([view isKindOfClass:[UIButton class]]) {
// these four values in the conditional below are just what happen to
// be the values corresponding to the "my location button" in Google Maps
// for iOS SDK version 1.3.0.3430. They might change over time, so this
// code is somewhat fragile.
if (view.frame.size.width == 76 && view.frame.size.height == 54 &&
view.frame.origin.x == -76 && view.frame.origin.y == -54) {
NSLog(@"we may have found the 'my location' button");
NSLog(@"self.campusMap coord stats:");
NSLog(@"bounds.origin.x: %f", self.campusMap.bounds.origin.x);
NSLog(@"bounds.origin.y: %f", self.campusMap.bounds.origin.y);
NSLog(@"bounds.size.width: %f", self.campusMap.bounds.size.width);
NSLog(@"bounds.size.height: %f", self.campusMap.bounds.size.height);
NSLog(@"frame.origin.x: %f", self.campusMap.frame.origin.x);
NSLog(@"frame.origin.y: %f", self.campusMap.frame.origin.y);
NSLog(@"frame.size.width: %f", self.campusMap.frame.size.width);
NSLog(@"frame.size.height: %f", self.campusMap.frame.size.height);
NSLog(@"view coord stats:");
NSLog(@"bounds.origin.x: %f", view.bounds.origin.x);
NSLog(@"bounds.origin.y: %f", view.bounds.origin.y);
NSLog(@"bounds.size.width: %f", view.bounds.size.width);
NSLog(@"bounds.size.height: %f", view.bounds.size.height);
NSLog(@"frame.origin.x: %f", view.frame.origin.x);
NSLog(@"frame.origin.y: %f", view.frame.origin.y);
NSLog(@"frame.size.width: %f", view.frame.size.width);
NSLog(@"frame.size.height: %f", view.frame.size.height);
}
}
}
}
Và đây là kết quả:
self.campusMap coord stats:
bounds.origin.x: 0.000000
bounds.origin.y: 0.000000
bounds.size.width: 0.000000
bounds.size.height: 0.000000
frame.origin.x: 0.000000
frame.origin.y: 0.000000
frame.size.width: 0.000000
frame.size.height: 0.000000
view coord stats:
bounds.origin.x: 0.000000
bounds.origin.y: 0.000000
bounds.size.width: 76.000000
bounds.size.height: 54.000000
frame.origin.x: -76.000000
frame.origin.y: -54.000000
frame.size.width: 76.000000
frame.size.height: 54.000000
tôi đã cố gắng như một thử nghiệm đơn giản để xác định vị trí các " My nút Vị trí" trong đầu góc tay trái với:
CGRect frame = view.frame;
frame.origin.x = 0;
frame.origin.y = 0;
frame.size.width = 76;
frame.size.height = 54;
[view setFrame:frame];
nhưng sau đó vào nút Vị trí của tôi không hiển thị gì cả.
Tôi cũng đã cố gắng sửa đổi nhỏ cho các giá trị hiện tại (ví dụ như thay đổi frame.origin.x
-76.0
--66.0
và có thể thấy sự khác biệt về vị trí, như vậy ít nhất tôi tự tin tôi đang thay đổi vị trí của các quan điểm đúng đắn. Tôi vẫn không hiểu i) cách phối hợp tiêu cực hoạt động và ii) cách định vị đúng cách trong khung cảnh cụ thể này. Sau khi đọc các câu trả lời cho this question Tôi nghĩ rằng tôi đã có một nắm bắt hợp lý trên khung xem và giới hạn, nhưng cho rằng tôi đã không nhận được điều này để làm việc được nêu ra, dường như không.
trong 'loadView' bạn vừa phân bổ xem bản đồ với một siz e số không (làm cho nó được thay đổi kích cỡ để lấp đầy màn hình sau). Nó có thể là giá trị kiểm tra những gì tất cả các giá trị là tại một số điểm sau này - ví dụ như trong 'viewDidLoad' hoặc' viewDidAppear' hoặc một cái gì đó như thế? –
Cũng có thể đáng để kiểm tra các giá trị của thuộc tính 'transform' của nút, để xem liệu biến đổi có được đặt thành một cái gì đó không bình thường hay không. –