2017-09-05 52 views
0

我有两个视图,videoView(它是mainView)和subVideoView(它是mainView的子视图)。无法在动画过程中将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 
} 

回答

0

根据您的要求添加子视图中MAINVIEW并设置

mainView.clipsToBounds = true 

和在minimiseOrMaximiseViews方法中,您只需要管理YmainView用于显示和隐藏。

+0

我想最小化视图,即减少视图大小。我不想clipToBounds,因为它只是剪辑,并不会减少视图大小。 – user44776

+0

@moritz,添加了详细的图像,以更好地解释问题 – user44776

0

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

0

除非我错过了一些东西,否则通过动画videoView(主视图)的transform属性可以更轻松地实现此类动画。您将需要连接缩放和平移转换,因为缩放默认应用于视图的中心。

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

要制作一个反向动画,只需在动画块中设置videoView.transform = CGAffineTransformIdentity即可。

警告:您应该小心,虽然,与转换视图的frame属性。 frame财产是合成的,并从bounds,centertransform派生。这意味着设置视图的frame将重置其transform属性。换句话说,如果你使用transform来操纵视图,你很可能要避免直接设置它们的框架。