iOS 13で操作できないように画面(View)をロックする
2021/01/12
古い方法
iOS 13で画面をロックするための便利なメソッドが非推奨になりました。
// ロック
UIApplication.shared.beginIgnoringInteractionEvents()
// 解除
UIApplication.shared.endIgnoringInteractionEvents()
'beginIgnoringInteractionEvents()' was deprecated in iOS 13.0: Use UIView's userInteractionEnabled property instead
代わりに各viewのuserInteractionEnabledを使いなさいって事なんでしょうけど、下に引っ張って閉じられるモーダル画面の場合にはviewだけではインタラクションを無効にできません。
新しい方法
そういった場合にはoverlayViewを作ってwindow全体を覆ってしまうようにします。移行しやすいように同じ名前のメソッドでUIWindowを拡張しておきます。
extension UIWindow {
func beginIgnoringInteractionEvents() {
let overlayView = UIView(frame: bounds)
overlayView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
overlayView.tag = 10000
addSubview(overlayView)
}
func endIgnoringInteractionEvents() {
viewWithTag(10000)?.removeFromSuperview()
}
}
// ロック
UIApplication.shared.delegate?.window??.beginIgnoringInteractionEvents()
// 解除
UIApplication.shared.delegate?.window??.endIgnoringInteractionEvents()