如何在叠加出现时禁用主UI?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在叠加出现时禁用主UI?相关的知识,希望对你有一定的参考价值。

我已经构建了一个流媒体音频应用程序,如下所示:

enter image description here

当流丢失时,我覆盖此屏幕:

enter image description here

我的问题是,在Voiceover ON的情况下,所有底层控件仍然处于活动状态:我可以向它们全部滑动,并调整它们的值。

以下是我的代码片段,用于信号丢失和重新获得的时间:

@objc func lostStream() {
    DispatchQueue.main.async {
        self.lossOfSignalBlocker.alpha = 0.0
        self.lossOfSignalBlocker.frame = self.view.bounds
        self.view.addSubview(self.lossOfSignalBlocker)
        self.lossOfSignalBlocker.isUserInteractionEnabled = true
        //UIView.animate(withDuration: 0.2) { self.lossOfSignalBlocker.alpha = 1.0 }
        UIView.animate( withDuration: 0.2, animations: { self.lossOfSignalBlocker.alpha = 1.0 } )

        //Announce loss of signal to Voiceover user.
        UIAccessibilityPostNotification(
            UIAccessibilityAnnouncementNotification,
            "Signal Lost" as NSString
        )
    }
}

@objc func regainedStream() {
    DispatchQueue.main.async {
        UIView.animate( withDuration: 0.2, animations: { self.lossOfSignalBlocker.alpha = 0.0 } )
        { _ in
            self.lossOfSignalBlocker.removeFromSuperview()
        }
    }
}

如何禁用主UI,以便只有叠加层响应任何与画外音相关的操作?

答案

UIAccessibility元素(例如视图)上,有一个名为accessibilityElementsHidden的属性。将此值设置为true应该隐藏“重新连接”视图到达所涵盖的视图。

考虑在背景中将qzexswpoi上的此值设置为true。

有关更多详细信息,请查看文档:UITableView

另一答案

好!我已经成功了。除了将“accessibilityElementsHidden”设置为TRUE之外,您还必须通过使用“UIAccessibilityScreenChangedNotification”通知调用“UIAccessibilityPostNotification”来告知应用程序屏幕已更改。

这是现在代码的样子:

https://developer.apple.com/documentation/objectivec/nsobject/1615080-accessibilityelementshidden

以上是关于如何在叠加出现时禁用主UI?的主要内容,如果未能解决你的问题,请参考以下文章

为什么对象页面部分标题进入大写字母以及如何禁用它

如何禁用在android片段类中按下的后退按钮

发生配置更改时如何不重置我的片段?

根据活动(即可见)片段以编程方式启用或禁用按钮

片段交易后如何禁用按钮?

如何在 Android 片段中禁用屏幕截图?