菜鸟教程小白 发表于 2022-12-13 11:06:09

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


                                            <p><p>谁能清楚地解释<a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIAccessibilityConvertFrameToScreenCoordinates" rel="noreferrer noopener nofollow">UIAccessibilityConvertFrameToScreenCoordinates</a> 的UIView期望它的第二个论点?有时它的行为如我所料,将 VoiceOver 的焦点矩形绘制在适当的元素上,但其他时候使用这个辅助函数就像巫毒一样!</p>

<p>Apple 的文档似乎没有解释。它声明参数必须是包含 CGRect 的 View ,但在某些实现中,不清楚哪个 View 是 CG 的当前上下文。有没有简单的方法来解决这个问题?</p>

<p>例如,我正在创建一个自定义 UITableViewCell,它通过覆盖单元格的 UIAccessibilityContainer 实现(见下文)具有自定义 VoiceOver 焦点顺序。无论我尝试什么,accessibilityFrame 都离我很远。我尝试发送对关联 UITableView、包含界面的父 UIView 和窗口本身的引用。我觉得我已经浏览了整个 View 堆栈!</p>

<p>以下不是自定义 UITableViewCell 类的完整代码,但应该让您了解我正在尝试做什么。</p>

<pre><code>#pragma mark - Accessibility (UIAccessibilityContainer implementation)

- (id)accessibilityElementAtIndex:(NSInteger)index
{
    return ;
}

- (NSInteger)accessibilityElementCount
{
    return self.accessibilityObjects.count;
}

- (NSInteger)indexOfAccessibilityElement:(id)element
{
    return ;
}

- (void *)addAccessibilityElement:(UIView *)accessibleView{
    if (self.accessibilityObjects == nil) {
      self.accessibilityObjects = ;
    }

    UIAccessibilityElement *accessibilityElement = [ 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&#39;s parent view
    accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.tableView); // tableView is a reference to the cell&#39;s UITableView

    ;
}
</code></pre>

<p>我希望这对某人有意义。提前致谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>让我们从文档中看一下这个函数的用途:</p>

<pre><code>Converts the specified rectangle from view coordinates to screen coordinates.
</code></pre>

<p>因此,您将在其父 View 内传递该 View 的矩形,然后是父 View 本身。鉴于此信息,您将获得一个输出,即 View 的屏幕坐标。因此,答案是矩形的拥有 View ,您可以从中计算相对矩形。这通常是它的分层直接父 View ,但可能在 View 层次结构中更高。 </p>

<p>例如,如果您的矩形是 {0, 0, view.width, view.height},并且您将 View 传递给此参数,则输出将是您传入的相同 Rectangle,初始x 和 y 坐标根据其在屏幕上的位置进行调整。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 您应该为 UIAccessibilityConvertFrameToScreenCoordinates 使用哪个 View ?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31008612/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31008612/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 您应该为 UIAccessibilityConvertFrameToScreenCoordinates 使用哪个 View ?