вопрос о willAnimateRotate и didRotateFrom при выполнении поворота - PullRequest
1 голос
/ 11 февраля 2012

Пока у меня есть

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    NSLog(@"willAnimateRotationToInterfaceOrientation");
    if(toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        NSLog(@"PortraitUpsideDown");
        // Do method A
    } else {
        [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
        // Do method B
    } 
}

и

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    NSLog(@"didRotateFromInterfaceOrientation");
    if( fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
        NSLog(@"OrientationPortrait or PortraitUpsideDown");
        [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
        // Do method B
    } else {
        NSLog(@"From else");
        [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
        // Do method A
    }
}

Моя логика заключается в том, что после нажатия кнопки RUN из кода xcode будет вызываться willAnimateRotationToInterfaceOrientation:, потому что я установил Поддерживаемая ориентация устройства должна быть UpsideDown из Сводка из MyApp.xcodeproj .Более того, я также думаю, что didRotateFromInterfaceOrientation: не следует вызывать, потому что мы только что запустили приложение.Это означает, что нет предыдущих состояний вообще.

К сожалению, это то, что я получил после выполнения отладчика

2012-02-11 12: 04: 08.776 MyApp [7505: 10703] willAnimateRotationToInterfaceOrientation:

2012-02-11 12: 04: 08.776 MyApp [7505: 10703] PortraitUpsideDown

2012-02-11 12: 04: 08.778 MyApp [7505: 10703] didRotateFromInterfaceOrientation:

2012-02-11 12: 04: 08.779 MyApp [7505: 10703] OrientationPortrait или PortraitUpsideDown

Я заблудился сейчас.Кто-нибудь есть какие-либо идеи по этому вопросу, пожалуйста, помогите.Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2012

У меня были некоторые проблемы с ротацией, похожие на вашу. Короткая версия заключается в том, что методы воли и делания не являются надежными на 100%. Вы должны попробовать быстро вращаться взад и вперед и посмотреть, что произойдет. Это может быть потому, что я новичок, или это может быть настоящая ошибка. То, что я сделал, в didRotateFromInterfaceOrientation: проверил текущую ориентацию и действовал соответственно:

if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation) {
// do your portrait stuff
} else {
// do your landscape stuff
}

Прежде чем я нашел тест UIInterfaceOrientationIsPortait, я на самом деле проверял фрейм, чтобы убедиться, что self.view.frame.size.width> self.view.frame.size.height, и это тоже надежно, но довольно уродливо. *

Любой способ надежен. У меня есть пара приложений в магазине, QPalettes и QColor, которые выполняют ротацию на куче созданных пользователем экранных элементов. Мне нужно было сохранить размеры, и после didRotateFromInterfaceOrientation я проверяю новые размеры и, если они различаются, перерисовываю все на экране. Свяжитесь со мной, если вы хотите, чтобы промо-код проверял вращение в любом приложении (они вращаются одинаково - QColor более сложный, поскольку он также рисует пересечения).

Наслаждайтесь,

Дэмиен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...