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

У меня проблемы с анимацией подпредставления 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;
}

}

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

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

Бесплатно


person FreeSirenety    schedule 09.01.2013    source источник


Ответы (1)


вы всегда устанавливаете кадр topBar с y = -41, поэтому для topBarState = 1 анимация работает для y=-41 to 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;
    }
}
person Amit Battan    schedule 09.01.2013