动画转换仅用于超级视图

时间:2018-10-03 08:05:25

标签: swift core-animation ios-autolayout

我正在尝试为父级outerView的比例设置动画,但让子级innerView保持其大小,以便父视图变换仅在动画过程中对其进行裁剪。由于某种原因,反向转换会将子视图缩放到更大的尺寸。

没有反向转换,父子转换相等。

    @IBAction func transformAction(_ sender: Any) {
    let animation = UIViewPropertyAnimator(duration: 5, curve: .linear) {
        self.outerView.transform = self.outerView.transform.scaledBy(x: 1, y: 0.1)
        self.innerView.transform = self.outerView.transform.inverted()
    }

    animation.addCompletion { _ in
        self.outerView.transform = CGAffineTransform.identity
        self.innerView.transform = CGAffineTransform.identity
    }

    animation.startAnimation()
}

Layput of views

enter image description here

1 个答案:

答案 0 :(得分:1)

yyyy-MM-dd HH:mm:ss.SSSinnerView的兄弟姐妹放在outerView中,当然parentViewinnerView重叠。

然后像已经进行的那样为outerView的{​​{1}}设置动画。

最后,还要设置transform的高度的动画。 (确保outerViewparentView。)

(以上假设parentView.clipsToBounds的内容需要垂直压缩。当然,如果没有这样的内容,则不需要true并可以设置动画的高度outerView。)

顺便说一句,动画的最终结果确实有parentView回到了原始高度。但是由于outerView剪切,您在动画中看不到它。正是在动画期间,变换变得混乱了。