一、需求小屏切全屏,全屏再切換小屏原來位置ide
從小屏進入全屏時,將播放器所在的view放置到window上,用transform的方式作一個旋轉動畫,最終讓view徹底覆蓋window。 從全屏回到小屏時,用transform的方式作旋轉動畫,最終讓播放器所在的view回到原先的parentView上動畫
//進入全屏模式 func enterFullScreen() { self.smallPreViewFrame = self.preView.frame let rectInWindow = self.preView.convert(self.preView.bounds, to: UIApplication.shared.keyWindow) self.preView.removeFromSuperview() self.preView.frame = rectInWindow UIApplication.shared.keyWindow?.addSubview(self.preView) UIView.animate(withDuration: 0.5, animations: { self.preView.transform = self.preView.transform.rotated(by: .pi / 2) self.preView.bounds = CGRect(x: 0, y: 0, width: max(kScreenWidth, kScreenHeight), height: min(kScreenWidth, kScreenHeight)) self.preView.center = CGPoint(x: self.preView.superview!.bounds.midX, y: self.preView.superview!.bounds.midY) }) { (isFinished) in } } //退出全屏 func exitFullScreen() { let frame = self.view.convert(self.smallPreViewFrame, to: UIApplication.shared.keyWindow) UIView.animate(withDuration: 0.5, animations: { self.preView.transform = CGAffineTransform.identity self.preView.frame = frame }) { (isFinished) in // 回到小屏位置 self.preView.removeFromSuperview() self.preView.frame = self.smallPreViewFrame self.view.addSubview(self.preView) } }