• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 您应该为 UIAccessibilityConvertFrameToScreenCoordinates 使用哪个 View ?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:06:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

谁能清楚地解释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-推荐答案


让我们从文档中看一下这个函数的用途:

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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap