在动画期间无法在mainView旁边最小化子视图

时间:2017-09-05 10:45:51

标签: ios swift uiview uiviewanimation uianimation

我有两个视图,videoView(它是mainView)和subVideoView(它是mainView的子视图)。

我正在尝试同时使用动画最小化两个视图,如下面的代码所示。我可以最小化videoView(即mainView)而不是subVideoView。

然而,当我隐藏代码以最小化videoView(即mainView)时,我能够最小化subVideoView。

我相信它必须以我动画的方式做点什么。

有人可以建议我如何同时最小化两个视图(按比例)动画,最后得到以下结果。

enter image description here

现有代码的结果 enter image description here

func minimiseOrMaximiseViews(animationType: String){


        UIView.animate(withDuration: 0.5, delay: 0, options: [],

            animations: { [unowned self] in  
                switch animationType {
                case "minimiseView" :

                    // Minimising subVideoView

                    self.subVideoView.frame =   CGRect(x:       self.mainScreenWidth - self.minSubVideoViewWidth - self.padding,
                                                       y:       self.mainScreenHeight - self.minSubVideoViewHeight - self.padding,
                                                       width:   self.minSubVideoViewWidth,
                                                       height:  self.minSubVideoViewHeight)

                    // Minimising self i.e videoView

                    self.frame = CGRect(x:      self.mainScreenWidth - self.videoViewWidth - self.padding,
                                        y:      self.mainScreenHeight - self.videoViewHeight - self.padding,
                                        width:  self.videoViewWidth,
                                        height: self.videoViewHeight)

                    self.layoutIfNeeded()

                case "maximiseView":

                    // Maximising videoView

                    self.frame = CGRect(x: 0, y: 0, width: self.mainScreenSize.width, height: self.mainScreenSize.height)

                    // Maximising subVideoView

                    self.subVideoView.frame =   CGRect(x:       self.mainScreenWidth - self.maxSubVideoViewWidth - self.padding,
                                                       y:       self.mainScreenHeight - self.maxSubVideoViewHeight - self.padding - self.buttonStackViewBottomPadding - buttonStackViewHeight,
                                                       width:   self.maxSubVideoViewWidth,
                                                       height:  self.maxSubVideoViewHeight) 
                default:
                    break
}

3 个答案:

答案 0 :(得分:0)

根据您的要求,在 mainView 中添加子视图并设置

mainView.clipsToBounds = true

并在minimiseOrMaximiseViews方法中,您只需管理 mainView Y 轴即可显示和隐藏。

答案 1 :(得分:0)

当我将两个视图(videoView和subVideoView)设置为窗口的子视图,即UIApplication.shared.keywindow时,我可以使用动画同时最小化两个视图。

答案 2 :(得分:0)

除非我遗漏了某些东西,否则通过动画transform(主视图)的videoView属性可以更轻松地实现这种动画。您需要为此进行连接缩放和平移变换,因为默认情况下缩放应用于视图的中心。

诀窍是将变换应用于视图会自动影响其所有子视图,例如将缩放变换应用于视图会缩放视图及其所有子视图。

要制作反向动画,只需在动画块内设置videoView.transform = CGAffineTransformIdentity

警告:但是,您应该小心使用已转换视图的frame属性。 frame属性是合成的,源自boundscentertransform。这意味着设置视图frame会重置其transform属性。换句话说,如果您使用transform操纵视图,则很可能希望避免直接设置其框架。