Анимация UIView не работает должным образом

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

Вот код в функции обработки событий:

- (void)tapGestureHandler: (UITapGestureRecognizer *)recognizer
{
NSLog(@"tap");

CGRect frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);
UIView *topBar = [[UIView alloc] initWithFrame:frame];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"topbar.png"]];
topBar.backgroundColor = background;

if (topBarState == 0) {
     [self.view addSubview:topBar];
    [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, 41.0f);}];
    topBarState = 1;
} else if (topBarState == 1){
    [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);} completion:^(BOOL finished){[topBar removeFromSuperview];}];

    NSLog(@"removed");
    topBarState = 0;
}

}

Как я могу сделать так, чтобы subview анимировал и был удален правильно?

С наилучшими пожеланиями

FreeSirenety

2
добавлено
Просмотры: 2
nl ja de

1 ответы

вы всегда устанавливаете рамку topBar с y = -41, поэтому для topBarState = 1 анимация работает для y = -41 до y = -41 и, кажется, работает не так

CGRect frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);
UIView *topBar = [[UIView alloc] initWithFrame:frame];

каждый раз, когда вы создаете представление topBar.
Объявите topBar в .h и выделите init в viewDidLoad.

- (void)viewDidLoad {
    CGRect frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);
    topBar = [[UIView alloc] initWithFrame:frame];
    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"topbar.png"]];
    topBar.backgroundColor = background;
        [self.view addSubview:topBar];
    topBarState = 0;
}

- (void)tapGestureHandler: (UITapGestureRecognizer *)recognizer
{
    if (topBarState == 0) {
            [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, 41.0f);}];
            topBarState = 1;
    } else if (topBarState == 1){
        [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);} completion:^(BOOL finished){[topBar removeFromSuperview];}];
        topBarState = 0;
    }
}
2
добавлено
Спасибо за ответ, он отлично работает! :)
добавлено автор FreeSirenety, источник