美文网首页
UIWebView查看网页视频,自动横向全屏的解决办法

UIWebView查看网页视频,自动横向全屏的解决办法

作者: 五鲜谱 | 来源:发表于2017-03-03 11:14 被阅读318次
废话少说,先上代码(Swift 3):

viewDidLoad()中注册通知:

override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(deviceDidRotate), name: .UIDeviceOrientationDidChange, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(toLandscapeRight), name: .UIWindowDidBecomeVisible, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(toPortrait), name: .UIWindowDidBecomeHidden, object: nil)
}

deinit()中移除通知:

deinit {
        NotificationCenter.default.removeObserver(self, name: .UIDeviceOrientationDidChange, object: nil)
        NotificationCenter.default.removeObserver(self, name: .UIWindowDidBecomeVisible, object: nil)
        NotificationCenter.default.removeObserver(self, name: .UIWindowDidBecomeHidden, object: nil)
    }

通知的响应方法:

@objc fileprivate func deviceDidRotate() {
        UIApplication.shared.isStatusBarHidden = false
    }
    
    @objc fileprivate func toLandscapeRight() {
        let value = UIInterfaceOrientation.landscapeRight.rawValue
        // Trick: ViewController 生命周期,第一次设置转横屏,强制设置两次(不然第一次设置不成功)
        if allowTime > 0 {
            allowTime -= 1
            UIDevice.current.setValue(value, forKey: "orientation")
            let value2 = UIInterfaceOrientation.portrait.rawValue
            UIDevice.current.setValue(value2, forKey: "orientation")
        }
        UIDevice.current.setValue(value, forKey: "orientation")
    }
    
    @objc fileprivate func toPortrait() {
        let value = UIInterfaceOrientation.portrait.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
    }
总结:

实际使用中,发现在添加UIWebView的ViewController中,第一次设置横屏会有没反应的情况出现。使用了很trick的方法:添加了一个Int 类型的值allowTime,设置初始值为3,允许初次设置横屏时,多设置几下,这样从用户体验上就没有任何问题了。

相关文章

网友评论

      本文标题:UIWebView查看网页视频,自动横向全屏的解决办法

      本文链接:https://www.haomeiwen.com/subject/ibvlgttx.html