在我的应用中,下划线出现了一个奇怪的问题。我没有其他与字体相关的属性(大小,样式,粗体等)的问题,只有下划线。
我在NSTextView theView中有文本数据。下划线在文本中的任何地方都是正确的。
我使用这样的代码:
dataPointers?[0] = UnsafeMutablePointer<UInt8>.allocate(capacity: totalBytes)
cachedBMs[appDel.nextFrameIndex] = NSBitmapImageRep(bitmapDataPlanes: dataPointers, pixelsWide: Int(viewFrame.size.width * 2), pixelsHigh: Int(viewFrame.size.height * 2), bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: NSCalibratedRGBColorSpace, bytesPerRow: Int(bytesPerRow), bitsPerPixel: 32)
cachedBMs[appDel.nextFrameIndex]?.size = NSSize(width: viewFrame.size.width, height: viewFrame.size.height)
cachedBMsDataPointer[appDel.nextFrameIndex] = dataPointers?[0]
cachedBMsSize[appDel.nextFrameIndex] = totalBytes
if let bitmap = cachedBMs[appDel.nextFrameIndex]
{
theView = NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: originalView))!
theView.cacheDisplay(in: viewFrame, to: bitmap)
cachedBMsDataPointer[appDel.nextFrameIndex] = bitmap.bitmapData
}
然后,我使用该位图缓冲区为OpenGL创建一些纹理(我知道,我应该使用Metal,很快我会使用)并将它们渲染到另一个窗口。并非所有下划线都是可见的。文件开头的那些丢失。文件末尾的那些是正确的。
文本可以很长,超过5000行。如果我从文件中间删除了一部分文本,则文件开头的下划线会正确显示在OpenGL视图中。这就是为什么我在执行操作之前先克隆NSTextView的原因,否则会花费很长时间以至于干扰用户在窗口中编辑NSTextView。
我逐个遍历了属性,并且每次在文件的开头和结尾以及在我的OpenGL窗口中看到下划线而看不到下划线的情况下,它们都是相同的。
如上所述,所有其他文本属性始终正确。
文本源可以是RTF文件,也可以是从另一个应用程序粘贴的文本,也可以直接输入到NSTextView中。无论来源如何,行为都是相同的。