Изменение UIViews во время UIInterfaceOrientation на iPad - PullRequest
1 голос
/ 24 июня 2011

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

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

В моем методе "viewDidLoad"

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];      
[[NSNotificationCenter defaultCenter] addObserver:self  
                                         selector:@selector(didRotate:)  
                                             name:UIDeviceOrientationDidChangeNotification   
                                           object:nil];      

Затем я вызываю его для вращения:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return YES;
}

- (void)didRotate:(NSNotification *)notification  
{          
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];  

    if ((orientation == UIDeviceOrientationLandscapeLeft) ||
        (orientation == UIDeviceOrientationLandscapeLeft))
    {  
        // present the other viewController, it's only viewable in landscape  
        [self.view addSubview:landScapeView];
    }

    if ((orientation == UIDeviceOrientationLandscapeRight) ||
        (orientation == UIDeviceOrientationLandscapeRight))
    {  
        // present the other viewController, it's only viewable in landscape  
        [self.view addSubview:landScapeView];
    }  
    else if ((orientation == UIDeviceOrientationPortrait ||
             (orientation == UIDeviceOrientationPortrait))
    {
        // get rid of the landscape controller  
        [self.view addSubview:portrait];
    }  
    else if ((orientation == UIDeviceOrientationPortraitUpsideDown ||
             (orientation == UIDeviceOrientationPortraitUpsideDown))
    {
        // get rid of the landscape controller  
        [self.view addSubview:portrait];
    }  
}

1 Ответ

2 голосов
/ 24 июня 2011

Вы добавляете свой ориентированный на ориентацию вид при повороте, но никогда не удаляете другой, так что вам нужно.

// get rid of the landscape controller  
    ((orientation == UIDeviceOrientationPortraitUpsideDown || orientation == 
UIDeviceOrientationPortraitUpsideDown)) {

[landScapeView removeFromSuperview];      
[self.view addSubview:portrait];
    }  

И аналогично в другом направлении.

Имейте в виду, что удалениеиз выпусков superview, поэтому вам необходимо сохранить оба вида извне.

...