gpt4 book ai didi

swift - NSLayoutManager 在 NSTextView 中为 mousePosition 返回错误的 glyphIndex

转载 作者:行者123 更新时间:2023-11-30 10:50:43 24 4
gpt4 key购买 nike

我有一个 NSTextView 子类作为 NSSplitViewController 中的右侧项目,左侧​​面板是一个 NSOutlineView。为了在 TextView 中按下命令键时处理鼠标单击,我添加了以下内容来查找鼠标下方的字形:

override func mouseDown(with event: NSEvent) {
guard
let lm = self.layoutManager,
let tc = self.textContainer
else { return }

let localMousePosition = convert(event.locationInWindow, to: nil)
var partial = CGFloat(1.0)
let glyphIndex = lm.glyphIndex(for: localMousePosition, in: tc, fractionOfDistanceThroughGlyph: &partial)

print(glyphIndex)
}

但是,这会导致索引过高,大约为 10 左右,从而选择了错误的字形。我的 TextView 只有等宽字符,因此偏移不是由额外的字形引起的。

有趣的是,如果我折叠左侧面板(在代码或 Storyboard中),我会得到正确的索引。但x方向的偏移量大于左面板的宽度。

我在这里缺少什么,上面的代码有错误吗?

最佳答案

根据上面 @Willeke 的评论,我对代码进行了以下更改:

localMousePosition = convert(event.locationInWindow, from: nil)

if enclosingScrollView?.frame.width == window?.frame.width {
// left panel is collapsed, so use convert: to:
localMousePosition = convert(event.locationInWindow, to: nil)
}

似乎有效。

问题是我也在 mouseMoved 中使用 localMousePosition = Convert(event.locationInWindow, to: nil) (localMousePosition 是 View 的属性)。将其更改为 localMousePosition = Convert(event.locationInWindow, from: nil) 使一切正常。再次感谢 @Willeke 指出了这一点。

关于swift - NSLayoutManager 在 NSTextView 中为 mousePosition 返回错误的 glyphIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com