2011-01-31 3 views
1

У меня возникла эта странная проблема при попытке сделать анимацию пользовательского интерфейса между двумя представлениями в контроллере представления.Strange UI View Animation Effect

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

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

- (void)gotoMain_t{ 

NSLog(@"switch to main"); 

[UIView beginAnimations:nil context:NULL]; { 

    for(UIView *v in [containerView subviews]) { 
     v.frame = CGRectMake(0, 0, 1024, 768); 
     [UIView setAnimationDidStopSelector:@selector(removeT:finished:context:)]; 
    } 

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

    MainMenu *mainMenu = [[MainMenu alloc] init]; 
    mainMenu.frame = CGRectMake(-1024, 0, 1024, 768); 
    [containerView insertSubview:mainMenu atIndex:1]; 


    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:.4]; 
    [UIView setAnimationDelegate:self]; 

    [[self.view.subviews objectAtIndex:0] setFrame:CGRectMake(1024, 0, 1024, 768)]; 

    mainMenu.frame = CGRectMake(0, 0, 1024, 768); 

    [mainMenu release]; 

} 

[UIView commitAnimations];} 

Любые идеи? Благодарю.

+0

setAnimationDidStopSelector выглядит странно, это не ясно, что вы должны установить его внутри цикла, так как я думаю, что это только будет вызвана после commitAnimation. –

+0

Что вы ожидаете? –

+0

Я просто хочу, чтобы представление переместилось на другое в каждом направлении. Но вы понимаете, о чем я говорю? Серая полоса идет от середины к основанию без видимой причины. – VagueExplanation

ответ

1

Важно, чтобы все это было в анимации вида до его начала. Фиксированный код ниже:

- (void)gotoMain_t{ 

NSLog(@"switch to main"); 

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

for(UIView *v in [containerView subviews]) { 
    v.frame = CGRectMake(0, 0, 1024, 768); 
} 

MainMenu *mainMenu = [[MainMenu alloc] init]; 
mainMenu.frame = CGRectMake(-1024, 0, 1024, 768); 
[containerView insertSubview:mainMenu atIndex:1]; 

[UIView beginAnimations:nil context:NULL]; { 

    [UIView setAnimationDidStopSelector:@selector(removeT:finished:context:)]; 

    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:.4]; 
    [UIView setAnimationDelegate:self]; 

    [[self.view.subviews objectAtIndex:0] setFrame:CGRectMake(1024, 0, 1024, 768)]; 

    mainMenu.frame = CGRectMake(0, 0, 1024, 768); 

    [mainMenu release]; 

} 

[UIView commitAnimations]; 

}

+0

т. Е. Обратите внимание на то, что кадр установлен для v и mainMenu перед началомAnimations. – VagueExplanation

1

Прежде чем beginAnimations:, попробуйте установить координаты этой серой полосы в конечное положение. Поэтому CoreAnimation не пытается его оживить. Если это сработает, вы можете настроить его положение, чтобы анимация выглядела красивой в конце. Похоже, что y-позиция серого полотна меняется на средний экран.

+0

На самом деле я не выложил все, прежде чем начать анимацию. Благодаря! – VagueExplanation