Цель C: код Route-Me ведет себя по-разному в симуляторе iPad 4.2 и 5 - PullRequest
0 голосов
/ 15 ноября 2011

Я пытаюсь выяснить, что происходит с моим кодом Route-Me, используя симулятор Xcode iPad 4.2 и симулятор iPad 5 и оба симулятора и давая разные результаты. Вот фрагмент кода:

    //set size of the map view
    [self setMapView:[[[RMMapView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024, 768)] autorelease]];
    [mapView setBackgroundColor:[UIColor blackColor]]; 
    self.view = mapView; 
    //set locked on default location of view, currently on conus
    CLLocationCoordinate2D newLocation;
    newLocation.latitude = 37.83;
    newLocation.longitude = -96.58;
    [[mapView contents] moveToLatLong:newLocation]; 
    [[mapView contents] setZoom:4.5];

Тогда ниже я настроил приложение на использование только ландшафтного режима:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
         if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) { return YES; } return NO;
 }

Я запускаю этот код в Xcode iPad Simulator 4.2, и я получаю это изображение ниже, которое выглядит идеально: looks good here

Затем я запускаю этот же код на Xcode iPad Simulator 5 и получаю странное изображение: This is weird

Я запутался, разве они не должны давать одинаковые результаты? или я что-то здесь упускаю?

РЕДАКТИРОВАТЬ: я установил начальную ориентацию интерфейса и поддерживаемые ориентации интерфейса в моем файле plist, чтобы иметь только альбомную ориентацию.

EDIT2: я попытался запустить его с приведенным ниже кодом, как есть, и, похоже, он работает, но если вы вставите строку setZoom в код, изображение снова обрезается, см. Скриншот:

[self setMapView:[[RMMapView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024, 768)]];
[mapView setBackgroundColor:[UIColor grayColor]];
self.view = mapView;

enter image description here

Становится очень странно, когда я добавляю строку [mapView.contents setZoom: 4.5]; это происходит снова с отсутствующей правой частью экрана.

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Я понял это, кажется, я не могу предположить, что я изменяю размер родительского представления.Чтобы решить эту проблему, мне нужно было сначала назначить self.view родительскому контроллеру, а затем подчинить mapView:

UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
parentView.autoresizesSubviews = YES;
self.view = parentView;

mapView = [[RMMapView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024, 768)];
[parentView addSubview:mapView]; 

CLLocationCoordinate2D newLocation;
newLocation.latitude = 37.83;
newLocation.longitude = -96.58;
[mapView.contents moveToLatLong:newLocation];

[mapView setBackgroundColor:[UIColor grayColor]];
[mapView.contents setZoom:4.5];
0 голосов
/ 11 апреля 2012

Когда в ландшафте вам нужно изменить ширину и высоту.

RMMapView *baseMap = [[[RMMapView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width)] autorelease];

Помните, что устройство сохраняет свою высоту и ширину, ваш прямоугольник просто нужно изменить для измененной ориентации.

...