Как показать/скрыть UIView с анимацией в iOS?

Основной UIView содержит два подзаголовка - UIView_1 и UIView_2.
В UIView_2 есть кнопка для отображения или скрытия UIView_1.
Например, когда пользователь прикасается к кнопке, чтобы показать UIView_1, тогда UIView_1 сдвинется вниз, а UIView_2 будет двигаться вниз с переходом.
У меня очень мало знаний в анимации. Может ли кто-нибудь показать мне пример кода для справки?
Должен ли я использовать CGAffineTransformMakeTranslation?
Спасибо. enter image description here

Ответ 1

Вам не нужно ничего такого сложного. Просто измените размер рамки просмотра.

    NSTimeInterval animationDuration = /* determine length of animation */;
    CGRect newFrameSize = /* determine what the frame size should be */;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:animationDuration];
    theViewToChange.frame = newFrameSize;
    [UIView commitAnimations];

Ответ 2

Просто скрыть/показать с эффектом fadein/out `

/Показать/

sliderView.hidden = NO;
sliderView.alpha = 0.1;
[UIView animateWithDuration:0.25 animations:^{
    sliderView.alpha = 1.0f;
} completion:^(BOOL finished) {
    // do some
}];

/Чтобы скрыть /

[UIView animateWithDuration:0.25 animations:^{
    sliderView.frame =  CGRectMake(130, 30, 0, 0);
    [sliderView setAlpha:0.1f];
} completion:^(BOOL finished) {
    sliderView.hidden = YES;
}];

`

Ответ 3

Это зависит от того, что вы хотите сделать с UIView_2.

  • Поместите UIView_1 ниже UIView_2 в Interface Builder.

  • Размер UIView_2 займет все пространство ниже UINavigationBar.

  • Используйте следующий код, чтобы изменить размер (используя uiview2_resized_rect) фрейм для UIView_2 или перевести/переместить фрейм для UIView_2 (используя uiview2_translated_rect):


CGRect uiview1_original_rect = UIView_1.frame;
CGRect uiview2_original_rect = UIView_2.frame;

CGRect uiview2_translated_rect = CGRectMake(uiview2_original_rect.origin.x, uiview2_original_rect.origin.y+uiview1_original_rect.size.height, uiview2_original_rect.size.width, uiview2_original_rect.size.height);

CGRect uiview2_resized_rect = CGRectMake(uiview2_original_rect.origin.x, uiview2_original_rect.origin.y+uiview1_original_rect.size.height, uiview2_original_rect.size.width, uiview2_original_rect.size.height-uiview1_original_rect.size.height);

[UIView animateWithDuration:0.300 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionBeginFromCurrentState animations:^{ //uncomment this and comment out the other if you want to move UIView_2 down to show UIView_1 //UIView_2.frame = uiview2_translated_rect; UIView_2.frame = uiview2_resized_rect; } completion:^(BOOL finished) {

}];