2013-08-09 6 views
1

Я использую пользовательский segue для перемещения между двумя контроллерами представления. Пользовательский segue использует CGAffineTransformMakeScale для создания эффекта масштабирования на контроллере назначения.пользовательская ориентация segue, не использующая правильную ориентацию в ландшафте

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

В проекте, который я использую для тестирования, используются два контроллера вида, каждый с кнопкой, которая запускает сеанс.

Это мой CustomZoomSegue.m файл:

#import "CustomZoomSegue.h" 

@implementation CustomZoomSegue 

- (void)perform 
{ 
    UIViewController *destinationViewController = (UIViewController *)self.destinationViewController; 
    UIViewController *sourceViewController = (UIViewController *)self.sourceViewController; 
    UIWindow *mainWindow = [[UIApplication sharedApplication].windows objectAtIndex:0]; 

    UIView *sourceView = [sourceViewController view]; 
    UIView *destinationView = [destinationViewController view]; 

    destinationView.frame = sourceView.frame; 
    [mainWindow addSubview:destinationView]; 

    [destinationView setAlpha:0.0f]; 
    [destinationView setTransform:CGAffineTransformMakeScale(0.0, 0.0)]; 

    // slide newView over oldView, then remove oldView 
    [UIView animateWithDuration:0.8 
        animations:^{ 
         [destinationView setTransform:CGAffineTransformMakeScale(1.0, 1.0)]; 
         [destinationView setAlpha:1.0f]; 
        } 
        completion:^(BOOL finished){ 
         [destinationView removeFromSuperview]; 
         [sourceViewController presentViewController:destinationViewController animated:NO completion:nil]; 
        }]; 
} 

@end 

Кто-нибудь есть какие-либо идеи, почему это происходит? Это сводит меня с ума

ответ

0

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

Вот код, который управляет масштаб и увеличить одновременно в блоке анимации:

- (void)perform 
{ 
    UIViewController *sourceViewController = (UIViewController *) self.sourceViewController; 
    UIViewController *destinationViewController = (UIViewController *) self.destinationViewController; 

    [sourceViewController.view addSubview:destinationViewController.view]; 
    [destinationViewController.view setFrame:sourceViewController.view.window.frame]; 

    [destinationViewController.view setBounds:sourceViewController.view.bounds]; 
    CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
    [destinationViewController.view setCenter:CGPointMake(screenSize.width/2 + 127, screenSize.height/2 - 138)]; 

    [destinationViewController.view setTransform:CGAffineTransformMakeScale(0.0,0.0)]; 

    [UIView animateWithDuration:1.8 
          delay:0.0 
         options:UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
         [destinationViewController.view setAlpha:0.0]; 
         [destinationViewController.view setTransform:CGAffineTransformMakeScale(1.0,1.0)]; 
         [destinationViewController.view setAlpha:0.8]; 
        } 
        completion:^(BOOL finished){ 
         [destinationViewController.view setAlpha:1.0]; 
         [destinationViewController.view removeFromSuperview]; 
         [sourceViewController presentViewController:destinationViewController animated:NO completion:nil]; 
        }]; 
} 
0

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