Как показать / скрыть UIView с анимацией в iOS? - PullRequest
11 голосов
/ 17 декабря 2011

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

Ответы [ 3 ]

20 голосов
/ 17 декабря 2011

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

    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];
7 голосов
/ 17 мая 2014

Просто скрыть / показать с эффектом затухания / выхода `

/ Показать /

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 голосов
/ 17 декабря 2011

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

  1. Поместите UIView_1 ниже UIView_2 в Интерфейсном Разработчике.

  2. Размер UIView_2, чтобы занять все пространство под UINavigationBar.

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

<code>
CGRect uiview1_original_rect = UIView_1.frame;
CGRect uiview2_original_rect = UIView_2.frame;</p>

<p>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);</p>

<p>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);</p>

<p>[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) {</p>

<p>}];
...