Неправильная ориентация UIView после первого розыгрыша - PullRequest
2 голосов
/ 30 сентября 2010

У меня есть контроллер вида, который чередует 2 вида на каждое прикосновение.Каждое из представлений переопределяет функцию drawRect.

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

Что не так?

В ViewController:

- (void)loadView 
{
 v= [[View2 alloc] init];
 self.view =v;
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
 x++;
 if (x%2==0)
 {
  v= [[View2 alloc] init];
 }
 else {
  v=[[View3 alloc] init];
 }
 self.view = v;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

1 Ответ

0 голосов
/ 30 сентября 2010

Я исправил проблему.Это просто и имеет смысл.В основном проблема заключается в том, что только ПЕРВЫЙ вид получает события ориентации.При изменении вида обработчики событий должны быть снова подключены, чтобы новое представление могло определять ориентацию.

Простое решение - создать фиктивный вид в качестве родителя и добавить view1 и view2 как подпредставления.Мой новый код контроллера выглядит следующим образом:

- (void)loadView 
{
    self.view =[[UIView alloc] init];

    v= [[View2 alloc] init];
    [self.view addSubview:v];
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    x++;
    if (v!=NULL)
        [v removeFromSuperview];

    if (x%2==0)
    {
        v= [[View2 alloc] init];

    }
    else {
        v=[[View3 alloc] init];
    }

    [self.view addSubview:v];

}
...