MDCFlexibleHeaderView的子视图的子视图的协调动画

时间:2018-10-11 05:11:33

标签: ios swift material-design

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

0 个答案:

没有答案