анимация перехода при вращении Ipad - PullRequest
0 голосов
/ 17 марта 2011

Привет и заранее спасибо за любые ответы.

У меня есть приложение для IPad с двумя разными видами: одно для портрета, другое для ландшафта.Когда я поворачиваю устройство, переход между видами не очень плавный. Я хотел анимировать переход между двумя видами, чтобы он выглядел лучше.Вот как мой код выглядит для моего поворота:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

    if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){
        self.view = corePlotContent.view; //make graph the landscape view 
        self.view.transform = CGAffineTransformMakeRotation(deg2rad*(-360)); 
        self.view.bounds = CGRectMake(0.0, 0.0, 1024.0, 748.0);
    }else{
        self.view = portraitView;
        self.view.transform = CGAffineTransformMakeRotation(0);
        self.view.bounds = CGRectMake(0.0, 0.0, 768.0, 1004.0);
    }
}

Я думаю, мне нужно переопределить метод willAnimateRotationToInterfaceOrientation и добавить туда анимацию, но я не уверен, как написать код.Я ничего раньше не анимировал, поэтому я не делаю успехов.Может кто-нибудь, пожалуйста, помогите мне, спасибо!

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Метод: willRotateToInterfaceOrientation:duration: вызывается непосредственно перед тем, как пользовательский интерфейс начинает вращаться, он используется для подготовки представления к вращению - для настройки состояния просмотра до того, как произошла анимация перехода.

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

Вместо этого вы должны использовать willAnimateRotationToInterfaceOrientation:duration: метод. Этот метод вызывается из блока анимации , который используется для поворота представления - каждое изменение визуального свойства, сделанное внутри этого вызова, будет должным образом анимировано.

Надеюсь, это решит вашу проблему.

1 голос
/ 17 марта 2011

Вы, вероятно, не хотите фиксировать рамку и систему координат вашего графика вручную, поскольку UIViewController фактически поворачивает свое представление соответственно.

Используйте что-то вроде этого, чтобы автоматически изменять его размер при изменении кадра основного вида:

corePlotContent.view.autoresizeMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

И используйте метод layoutSubviews в графическом представлении, чтобы вносить любые локальные изменения в граф.

Недостаток производительности, вероятно, связан с интенсивным рисованием во время анимации вращения (график перерисовывается для каждого кадра во время вращения). Я предлагаю вам использовать willRotateToInterfaceOrientation , чтобы на мгновение отключить перерисовку графика и повторно включить его при вызове didRotateFromInterfaceOrientation .

Также вы можете использовать инструменты с инструментом CPU Profiler для обнаружения узкого места в вашем коде.

Надеюсь, это поможет.

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