Google Maps iOS SDK переместить кнопку «Мое местоположение» в левый нижний угол
При использовании Google Maps для iOS SDK кнопка «Мое местоположение» по умолчанию размещается в правом нижнем углу:
Я хотел бы разместить его в левом нижнем углу (да, я понимаю, что должен быть осторожен, чтобы не заслонить там логотип Google). Я не верю, что у SDK есть «официальный» способ сделать это, но на основеэтот ответ Я понял, как заполучить подпредставление кнопки «Мое местоположение», чтобы расположить его.
Смущает меня то, какие значения я должен дать рамке представления My Location и / или границам, чтобы получить его там, где я хочу. Для начала, кнопка «Мое местоположение» в том виде, в котором она установлена в данный момент, имеетframe.origin.x
= -74
а такжеframe.origin.y
= -54
, Это первый раз, когда я видел отрицательные координатыframe.origin.x
илиframe.origin.y
и я даже не уверен, как iOS обрабатывает отрицательные координаты. Моей первой мыслью было, например,frame.origin.x = -74
эквивалентно[view superview].frame.size.width - 74
, т.е. отрицательное значение вычитается из ширины или высоты суперпредставления. Но потом я посмотрел на ширину и высоту суперпредставления, и они оба0.0
, Вот мой код, который выводит некоторую информацию как о карте, так и о фреймах и границах кнопки my location:
- (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);
}
}
}
}
И вот вывод:
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
Я попытался в качестве простого теста расположить кнопку «Мое местоположение» вВверх левый угол с:
CGRect frame = view.frame;
frame.origin.x = 0;
frame.origin.y = 0;
frame.size.width = 76;
frame.size.height = 54;
[view setFrame:frame];
но тогда кнопка «Мое местоположение» вообще не отображалась.
Я также пробовал небольшие модификации существующих значений (например, изменениеframe.origin.x
из-76.0
в-66.0
и вижу разницу в положении, так что, по крайней мере, я уверен, что я изменяю позицию правильного вида. Я все еще не понимаю, i) как работают отрицательные координаты и ii) как правильно расположить представление в этом конкретном сценарии. После прочтения ответов наэтот вопрос Я думал, что у меня есть разумное понимание рамок и границ обзора, но, учитывая, что я еще не получил это работать, по-видимому, нет.