簡體   English   中英

動畫期間無法最小化主視圖旁邊的子視圖

[英]Unable to minimize subview alongside mainView during animation

我有兩個視圖,videoView(這是mainView)和subVideoView(這是mainView的subView)。

我試圖同時使用動畫最小化兩個視圖,如下面的代碼所示。 我能夠最小化videoView(即mainView)而不是subVideoView。

但是,當我隱藏用於最小化videoView(即mainView)的代碼時,我能夠最小化subVideoView。

我認為它必須與我制作動畫的方式有關。

有人可以建議我如何同時用動畫最小化(按比例)兩個視圖並得出以下結果。

在此處輸入圖片說明

現有代碼的結果 在此處輸入圖片說明

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
}

根據您的要求在mainView中添加subViews並設置

mainView.clipsToBounds = true

minimiseOrMaximiseViews方法中,您只需要管理mainView的 Y即可進行顯示和隱藏。

當我將兩個視圖(videoView和subVideoView)都設置為窗口的子視圖(即UIApplication.shared.keywindow )時,可以同時使用動畫最小化這兩個視圖。

除非我缺少任何東西,否則通過對videoView (主視圖)的transform屬性進行動畫處理,可以更輕松地實現這種動畫。 為此,您需要將縮放和平移轉換串聯起來,因為縮放默認情況下應用於視圖的中心。

訣竅在於,將變換應用於視圖會自動影響其所有子視圖,例如,將縮放變換應用於視圖會同時縮放視圖及其所有子視圖。

要制作反向動畫,只需在動畫塊內設置videoView.transform = CGAffineTransformIdentity

注意 :不過,使用轉換視圖的frame屬性時要小心。 frame屬性是合成的,並且是從boundscentertransform派生的。 這意味着設置視圖的frame重置其transform屬性。 換句話說,如果使用transform操作視圖,則很可能希望避免直接設置其框架。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM