Анимация 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
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, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.