SwiftUI Slider 使用 VoiceOver 不解释双击
Posted
技术标签:
【中文标题】SwiftUI Slider 使用 VoiceOver 不解释双击【英文标题】:SwiftUI Slider using VoiceOver not interpreting double tap 【发布时间】:2021-12-30 14:45:58 【问题描述】:我正在使用 SwiftUI 构建 Slider
元素,并尝试使用双击手势将其值设置回默认值。这在非 VoiceOver 模式下工作正常。
根据苹果 (here) 的说法,在 VoiceOver 中,双击是使用三次敲击完成的。 (参见Take action on an item
部分)。但是,当我在 VoiceOver 模式下选择 Slider 并轻按三次时,我会听到三个提示“没有发生任何事情”的提示音,并且不会触发我的回调。
我的代码如下:
import SwiftUI
struct ContentView: View
@State var value: Float = 0.5
var body: some View
VStack
Slider(value: self.$value, in: 0...1)
.contentShape(Rectangle())
.border(Color.red)
.onTapGesture(count: 2, perform:
print ("Setting to default!")
self.value = 0.5
)
我已尝试添加可访问性 traits(至少,可能对我有意义的那些,例如 allowsDirectInteraction
),但似乎没有任何东西可以实现这一点 - 我错过了什么吗?
【问题讨论】:
我的回答是否为您最初的问题提供了适当的答案? ??? (希望你恢复得很好????) 【参考方案1】:"...当我在 VoiceOver 模式下选择滑块并轻按三次时,我会听到三个表示“什么都没有发生”的提示音...
如果没有为特定手势在所选项目上定义任何操作,VoiceOver
会提示您“没有发生任何事情”,这是正常的。 ?
“……我的回调没有被触发。”
手势识别器很棒,但它仅为 UI 设计,不适用于 VoiceOver
.⚠️
当您在VoiceOver
ON 状态下触摸屏幕时,屏幕阅读器会分析手势并与相应的动作进行一种映射。
它看起来像你的 UI 上方的布局,它通过它的定义读取你的手势,这就是为什么手势识别器在这种情况下不起作用的原因......无论在屏幕上点击 2、3 或更多:没有检测到,因为没有被解释为UI交互。?
为了达到这个目标,您为滑块插入特征 .allowsDirectInteraction
的想法很棒?。
为此,您必须通过转子激活direct touch
,然后直接触摸它所属的项目(您的情况下的滑块:请注意,触摸拇指无效,只有轨道对这个元素有好处,我不知道为什么?) ⟹如果你在项目框架之外触摸,它不会被检测到。 ⚠️
为了您的记录,这个特征在元素的框架内创建了一个区域,VoiceOer 不会在其中进行映射,只有常见的 UI 手势是已知的,这就是识别器在这种情况下工作的原因。
目前(ios 15),可以通过实现其accessibilityActivate专用功能来创建自己的可访问性元素并定义其激活时的操作,该功能将在单指触发时触发发生双击。
但是,据我所知,您提到的用一根手指连按三次无法定义或覆盖:它可能仅适用于具有自己操作的 Apple 项目(开发人员禁止使用黑框?)。
【讨论】:
以上是关于SwiftUI Slider 使用 VoiceOver 不解释双击的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI脑洞大开打造实时显示当前值的Slider(滑动器)