Ios 自定义UISlider的可访问性

Ios 自定义UISlider的可访问性,ios,uiaccessibility,Ios,Uiaccessibility,我已经创建了一个带有两个拇指的自定义范围UISlider。但是在画外音模式下,我无法上下滑动来调整拇指 UIAccessibilityElement *minElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; minElement.accessibilityFrame = [self convertRect:currentThumbRect

我已经创建了一个带有两个拇指的自定义范围UISlider。但是在画外音模式下,我无法上下滑动来调整拇指

UIAccessibilityElement *minElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
minElement.accessibilityFrame = [self convertRect:currentThumbRect
                                             toView:nil];
minElement.accessibilityLabel = NSLocalizedString(@"Minimum", nil);
minElement.accessibilityTraits = UIAccessibilityTraitAdjustable;

[_accessibleElements addObject:minElement];

UIAccessibilityElement *maxElement = [[UIAccessibilityElement alloc]
                                       initWithAccessibilityContainer:self];
maxElement.accessibilityFrame = [self convertRect:currentUpperThumbRect
                                            toView:nil];
maxElement.accessibilityLabel = NSLocalizedString(@"Maximum", nil);
maxElement.accessibilityTraits = UIAccessibilityTraitAdjustable;

[_accessibleElements addObject:maxElement]
我在上面添加了代码,这样画外音可以分别识别两个拇指,但我无法调整拇指。想在画外音中调整拇指吗


问题已解决:

我使用“UIAccessibilityCustomAction”添加自定义行为。在“自定义行为”中,可以使用“上下滑动”来选择操作并双击以执行该操作,而不是上下滑动来调整值

UIAccessibilityElement *minElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
minElement.accessibilityLabel = NSLocalizedString(@"Minimum", nil);
UIAccessibilityCustomAction *increaseMinAction = [[UIAccessibilityCustomAction alloc] initWithName:NSLocalizedString(@"Increase minimum", @"action to increase min")
                                                                                                 target:self selector:@selector(accessibilityMinIncrement)];
UIAccessibilityCustomAction *decreaseMinAction = [[UIAccessibilityCustomAction alloc] initWithName:NSLocalizedString(@"Decrease minimum", @"action to decrease min")
                                                                                                 target:self selector:@selector(accessibilityMinDecrement)];
minElement.accessibilityCustomActions = @[increaseMinAction, decreaseMinAction];
[_accessibleElements addObject:minElement];

当用户向上或向下滑动时,将使用
accessibilitycrement
accessibilitycrement
调用可调元素。当这种情况发生时,它将更改其
可访问性值
。如果该值没有改变,VoiceOver将解释为已达到可能值的边界(允许的最低值或高度值),并将播放“叮”声,向用户表明该手势没有效果

普通的
UIAccessibilityElement
没有(据我所知)实现递增和递减方法,而且您似乎没有修改这些元素的值。因此,当用户关注其中一个元素时,该方法不会实现,值也不会改变,因此VoiceOver播放“叮当”声


一种可能的解决方案是子类化并让每个旋钮元素保持当前值,或者让每个旋钮元素向代理请求值,并将递增和递减方法转发给该代理

您可以使用
自定义操作
来解决您的问题,但我认为这不是带画外音的
UISlider
的最佳选择

最初,您使用带有
可调
特性的
递增
递减
方法遵循正确的路径

执行时遇到的问题:在我看来,最好的方法是定义前两种方法,以便根据旋钮位置调整滑块值