Переключение видов с эффектом перехода - PullRequest
0 голосов
/ 18 марта 2012

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

Вот мой код:

-(void)orientationChanged:(NSNotification *)object{
UIDeviceOrientation deviceOrientation = [[object object] orientation];
if (deviceOrientation == UIInterfaceOrientationPortrait)
{ 
    /* If I run with this block, I have a Exc Bad Access Error and can't run, so I put it 
       under comment

    [UIView transitionWithView:self.view  duration:1.0 
options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        [self.view addSubview:self.portraitView];
                    } completion:NULL];
    */ 

    self.view = self.portraitView;

    //[self dismissModalViewControllerAnimated:YES];

} 
else  if (deviceOrientation == UIInterfaceOrientationLandscapeLeft || deviceOrientation == 
UIInterfaceOrientationLandscapeRight) 
{   
    [UIView transitionWithView:self.view  duration:1 
options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        [self.view addSubview:self.landscapeView];
                    } completion:NULL];
   [self dismissModalViewControllerAnimated:NO];
}
}

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

EDIT:

Я только что отредактировал свой код выше:

-(void)orientationChanged:(NSNotification *)object{
UIDeviceOrientation deviceOrientation = [[object object] orientation];
if (deviceOrientation == UIDeviceOrientationPortrait)
{ 

    if (self.isViewLoaded  && self.view.window)
    {
    NSLog(@"Portrait1");
    [UIView transitionWithView:self.view  duration:1 
    options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        NSLog(@"Portrait2");
                        [self.view.window addSubview:self.portraitView];
                    } completion:NULL];
    [self dismissModalViewControllerAnimated:YES];
    }   
}
else  if (deviceOrientation == UIDeviceOrientationLandscapeLeft || deviceOrientation == 
UIDeviceOrientationLandscapeRight) 
{   

    [UIView transitionWithView:self.view  duration:1 
options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        [self.view addSubview:self.landscapeView];
                    } completion:NULL];
   [self dismissModalViewControllerAnimated:NO];
    NSLog(@"Landscape");
}
}

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

1 Ответ

0 голосов
/ 23 марта 2012

Обращаясь к обновленному коду, когда ваша ориентация устройства становится UIDeviceOrientationPortrait, вы делаете ошибку, добавляя PortraitView в качестве подпредставления к self.view.window вместо self.view.

Кроме того, какова цель [self dismissModalViewControllerAnimated: NO]? На самом деле вы нигде не представили модальный контроллер вида, поэтому он не служит никакой цели.

...