谁能清楚地解释UIAccessibilityConvertFrameToScreenCoordinates 的UIView期望它的第二个论点?有时它的行为如我所料,将 VoiceOver 的焦点矩形绘制在适当的元素上,但其他时候使用这个辅助函数就像巫毒一样!
Apple 的文档似乎没有解释。它声明参数必须是包含 CGRect 的 View ,但在某些实现中,不清楚哪个 View 是 CG 的当前上下文。有没有简单的方法来解决这个问题?
例如,我正在创建一个自定义 UITableViewCell,它通过覆盖单元格的 UIAccessibilityContainer 实现(见下文)具有自定义 VoiceOver 焦点顺序。无论我尝试什么,accessibilityFrame 都离我很远。我尝试发送对关联 UITableView、包含界面的父 UIView 和窗口本身的引用。我觉得我已经浏览了整个 View 堆栈!
以下不是自定义 UITableViewCell 类的完整代码,但应该让您了解我正在尝试做什么。
#pragma mark - Accessibility (UIAccessibilityContainer implementation)
- (id)accessibilityElementAtIndexNSInteger)index
{
return [self.accessibilityObjects objectAtIndex:index];
}
- (NSInteger)accessibilityElementCount
{
return self.accessibilityObjects.count;
}
- (NSInteger)indexOfAccessibilityElementid)element
{
return [self.accessibilityObjects indexOfObject:element];
}
- (void *)addAccessibilityElementUIView *)accessibleView{
if (self.accessibilityObjects == nil) {
self.accessibilityObjects = [NSMutableArray array];
}
UIAccessibilityElement *accessibilityElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
accessibilityElement.accessibilityLabel = accessibleView.accessibilityLabel;
//accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.contentView);
//accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.parentView); // parentView is a reference to the view controller's parent view
accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.tableView); // tableView is a reference to the cell's UITableView
[self.accessibilityObjects addObject:accessibilityElement];
}
我希望这对某人有意义。提前致谢。
Best Answer-推荐答案 strong>
让我们从文档中看一下这个函数的用途:
Converts the specified rectangle from view coordinates to screen coordinates.
因此,您将在其父 View 内传递该 View 的矩形,然后是父 View 本身。鉴于此信息,您将获得一个输出,即 View 的屏幕坐标。因此,答案是矩形的拥有 View ,您可以从中计算相对矩形。这通常是它的分层直接父 View ,但可能在 View 层次结构中更高。
例如,如果您的矩形是 {0, 0, view.width, view.height},并且您将 View 传递给此参数,则输出将是您传入的相同 Rectangle,初始x 和 y 坐标根据其在屏幕上的位置进行调整。
关于ios - 您应该为 UIAccessibilityConvertFrameToScreenCoordinates 使用哪个 View ?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/31008612/
|