Strange UI View Анимационный эффект - PullRequest
1 голос
/ 31 января 2011

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

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

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

- (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];}

Есть идеи?Спасибо.

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Важно выложить все в анимацию вида до ее запуска. Фиксированный код ниже:

- (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];

}

1 голос
/ 31 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...