Координирующая анимация подпредставлений подпредставления MDCF FlexibleHeaderView - PullRequest
0 голосов
/ 11 октября 2018

Я использую класс MDCFlexibleHeaderViewController, который содержит объект MDCFlexibleHeaderView.Я добавил пользовательское представление (которое само имеет подпредставления) как подпредставление MDCFlexibleHeaderView.Пользовательский вид хорошо отображается в развернутом состоянии.Когда заголовок сворачивается, свойства подпредставлений пользовательского представления (такие как размер и происхождение) должны меняться при изменении высоты заголовка.Однако у меня возникают проблемы с изменением размера и перемещением подвидов пользовательского представления.Когда я заменяю пользовательский вид двумя подпредставлениями.Анимация, вызванная прокруткой, работает нормально.Это заставляет меня думать, что есть проблема с анимацией подпредставлений подпредставления во время прокрутки.Я почти уверен, что мог бы генерировать весь код динамически, но код для UIViewController был бы очень многословным.Есть ли способ анимировать подпредставления подпредставления, чтобы движения и изменение размеров были абсолютно плавными?

код для управления анимацией показан ниже?

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView == headerViewController.headerView.trackingScrollView {
        headerViewController.headerView.trackingScrollDidScroll()
        /*if let headerview = headerview {
            headerview.bounds.size.height = headerViewController.headerView.scrollPhaseValue
            headerview.frame.origin = CGPoint(x: 0, y: 0)
            resizeViews(header: headerview)
        }*/

        if let imageview = imageview {
            imageview.bounds.size.height = 56.0 * headerViewController.headerView.scrollPhasePercentage + 44.0
            imageview.bounds.size.width = 56.0 * headerViewController.headerView.scrollPhasePercentage + 44.0
            imageview.frame.origin = CGPoint(x: 16, y: 16)
        }

        if let control = control{
            control.frame.origin.y = 106.0 * headerViewController.headerView.scrollPhasePercentage + 36
            control.frame.origin.x = 68 * (1.0 - headerViewController.headerView.scrollPhasePercentage)
            control.bounds.size.width = self.view.bounds.size.width - 76 * (1.0 - headerViewController.headerView.scrollPhasePercentage)
        }
    }
}

Пользовательский вид относится ккак заголовок в методе, показанном выше.

функция ниже должна изменить размеры представлений

func resizeViews(header: ProfileHeaderView){
    header.profileImageView.frame.size.width = profileImageViewWidth * 0.56 * headerViewController.headerView.scrollPhasePercentage + 44.0
    header.profileImageView.frame.size.height = profileImageViewWidth * 0.56 * headerViewController.headerView.scrollPhasePercentage + 44.0
    header.stackView.frame.size.width = stackViewWidth * headerViewController.headerView.scrollPhasePercentage
    header.stackView.frame.size.height = stackViewHeight * headerViewController.headerView.scrollPhasePercentage
    header.tagline.frame.size.width = labelWidth * headerViewController.headerView.scrollPhasePercentage
    header.tagline.frame.size.height = labelHeight * headerViewController.headerView.scrollPhasePercentage
    header.subscribeSettingsButton.frame.size.width = sbWidth * headerViewController.headerView.scrollPhasePercentage
    header.subscribeSettingsButton.frame.size.height = sbHeight * headerViewController.headerView.scrollPhasePercentage
}
...