Вращение iPhone и изменение взглядов - PullRequest
0 голосов
/ 25 января 2011

Я никогда не играл с iPhone в горизонтальной плоскости, но у меня есть полностью работающее приложение для iPhone, которое предполагает, что пользователь смотрит на iPhone в вертикальном положении.Я хотел бы поиграть с вращением телефона, и для этого я сделал что-то очень простое:

Я добавил следующий код в мой View Controller:

-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
    NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);

    if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight))
        tableView.frame = CGRectMake(0, 0, 480, 320);
    else
        tableView.frame = CGRectMake(0,73,320,390);


}

и я получаю ошибку BAD_ACCESS.Я вообще не вижу видовой нагрузки.Итак, в чем проблема, и как правильно реализовать метод willRotate, чтобы при повороте телефона я мог изменять размеры всех своих компонентов?

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Сбой вызван этой строкой:

NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);

orientation - это значение enum, поэтому спецификатор формата должен быть %i, а не %@.

Самый простой способ поддержки вращения - реализовать:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

Возврат YES для ориентаций, которые вы хотите поддерживать. Не делайте изменения размера в этом методе. Используйте распорки и пружины видов, чтобы убедиться, что они изменяют размер и корректно изменяют свое положение для альтернативных вращений.

0 голосов
/ 25 января 2011

Это проблема с вашим кодом регистрации:

NSLog(@"WILL ROTATE TO INTERFACE ORIENTATION: %@",orientation);

Спецификатор форматирования %@ в вашей строке регистрации является заполнителем для указателя NSString.Когда приложение достигает этой точки, оно смотрит на переменную ориентации, пытается разыменовать ее, чтобы получить экземпляр NSString, и вылетает, потому что это вообще не указатель, а значение enum.

...