Я использую класс 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
}