防止旋转一个特定的UIView动画

时间:2016-08-21 09:24:14

标签: ios swift animation uiview rotation

我有一个全屏UIView。当我旋转手机时,视图会缩小一点(您会看到黑色背景),然后再次展开以全屏显示。它基本上按预期动画。 屏幕上的其他视图也会相应地生成动画。

我可以针对某个特定视图阻止这种情况发生吗? 我希望全屏视图只保持全屏而不显示黑色背景的动画,但保持其他视图为其旋转设置动画。

有点像Apple在相机应用中的表现。 "取景器"不动画它的旋转,但按钮做。

我的ViewController中有以下代码。 liveView是提到的全屏UIView

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

    coordinator.animateAlongsideTransition(in: self.liveView, animation: { (context) in

        if let connection = (self.liveView.layer as! AVCaptureVideoPreviewLayer).connection {
            connection.videoOrientation = AVCaptureVideoOrientation(ui: UIApplication.shared.statusBarOrientation)
        }

        }, completion: nil)

}

AVCaptureVideoOrentation是一个扩展程序,基本上会将UIInterfaceOrientation转换为AVCaptureVideoOrientation并使用switch语句。

由于 - 约瑟夫

1 个答案:

答案 0 :(得分:0)

您是否尝试过self.liveView.layer.removeAllAnimations()

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

    coordinator.animateAlongsideTransition(in: self.liveView, animation: { (context) in

        if let connection = (self.liveView.layer as! AVCaptureVideoPreviewLayer).connection {
            connection.videoOrientation = AVCaptureVideoOrientation(ui: UIApplication.shared.statusBarOrientation)
        }


        self.liveView.layer.removeAllAnimations()


        }, completion: nil)

}