我正在使用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
}