多线自动输入文本框类(使用SKNode作为父级)基本上使用2个元素创建:
修改此文本框类后,可以使用任何框架宽度&高度,我意识到我没有编程NSMutableArray来自动更改其内容,使其很好地适合背景节点(也涉及一些填充)。所以在这里我想知道如何做到这一点,因为NSString只能返回字符数而不是宽度&每个字符串的高度(点数可能有助于我以某种方式创建字符约束)。
现在,NSMutableArray使用每个NSString&的硬编码最大字符数。整个阵列的最大行数(它现在是5行,当达到该限制时,会创建一个新的"页面" /数组)。这迫使我每次更改背景节点框架大小时手动重新调整这些参数,这会破坏允许背景框架更改的类的目的。
事情是,我试图以这样的方式解决这个问题,当我在github上发布这个类时,我希望解决方案考虑任何fontName& fontSize的。
我有什么方法可以解决这个问题?
答案 0 :(得分:2)
我做过类似的事情。对于你想要的东西,它并不是100%工作,但应该足够相似。它使用根节点,从那里,它将使用NSString
数组构建多行文本,而SKLabelNode
数组又将用于构建NSString
。
我将概述我的所作所为。我还应该说我只在设置新文本时运行它。换句话说,我不承担每帧导出信息的惩罚。只有一次。
一般步骤是:
sizeWithAttributes
' s NSDictionary
。例如,在我的代码中,NSFontAttributeName : [UIFont fontWithName:self.fontName size:self.size]
包含: size = [line sizeWithAttributes:attributes];
if (size.width > maxTextWidth) {
needNewline = YES;
}
。这将用于检查宽度,如果宽度超过框架宽度,则超出线条。因此代码可能类似于:
SKLabelNode
一旦你有了一系列的行,你就可以创建你的孩子func Convert(img image.Image) *image.RGBA {
b := img.Bounds()
rgba := image.NewRGBA(b)
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
r32, g32, b32, _ := img.At(x, y).RGBA()
c := color.RGBA{uint8(r32>>8), uint8(g32>>8), uint8(b32>>8), 255}
rgba.SetRGBA(x, y, c)
}
}
return rgba
}
了。我将它们添加到根目录,这允许我将组移动到需要的任何位置。
这里的真正关键是线阵列生成。