Как добавить анимацию при изменении скрытого режима просмотра? - PullRequest
42 голосов
/ 30 мая 2011

Я хочу добавить анимацию к виду при изменении его скрытого режима, т.е.

my_view.hidden=YES;

Я добавил кнопку на панели навигации.Когда мы нажимаем на него, новый вид становится невидимым.Он рисует в верхней части навигационной таблицы.

Ответы [ 12 ]

0 голосов
/ 09 июля 2017

Вот код, который я использовал для моделирования вида «растущий» и «уменьшающийся» при нажатии кнопки «показать больше ...» и «показать меньше ...». Смоделированный ответ от Palyancodr

Этот подход позволяет мне создавать оба представления в раскадровке, чтобы ограничения работали, как и ожидалось, на разных устройствах iOS, и мне не нужно настраивать код всех ограничений.

@IBAction func showMoreOrLessAction(_ sender: Any) {
    // if small view showing
    if showMoreLargeView.isHidden {
        showMoreSmallView.isHidden = true

        //showMoreLargeView.isHidden = false
        UIView.animate(withDuration: 0.2, delay: 0, options: [], animations: {
            self.showMoreLargeView.alpha = 1 // Here you will get the animation you want
        }, completion: { _ in
            self.showMoreLargeView.isHidden = false // Here you hide it when animation done
        })
    }
    else { // large view showing
        //showMoreSmallView.isHidden = false
        UIView.animate(withDuration: 0.2, delay: 0, options: [], animations: {
            self.showMoreSmallView.alpha = 1 // Here you will get the animation you want
        }, completion: { _ in
            self.showMoreSmallView.isHidden = false // Here you hide it when animation done
        })

        showMoreLargeView.isHidden = true
    }
}
0 голосов
/ 23 февраля 2016

Другая версия, если вы хотите использовать более сложные типы анимации или анимации, не поддерживаемые UIView

- (void)setHidden:(BOOL)hidden withAnimationDuration:(NSTimeInterval)duration
{
    CATransition* transition = ({
        CATransition* its = [CATransition animation];
        its.duration = duration;
        its.timingFunction =
            [CAMediaTimingFunction
             functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
        its.type = kCATransitionPush;
        its.subtype = (hidden ? @"fromBottom" : @"fromTop");
        its
    });

    UIView* containerView = self.superview;
    [containerView.layer removeAllAnimations];
    [containerView.layer addAnimation: transition forKey: kCATransition];

    self.hidden = hidden;

    if (!hidden) {
        [self.superview bringSubviewToFront: self];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...