Wie viele andere auch ich ein Update für dieses Problem erforderlich. Mein Ansatz war viel einfacher als Chris Lösung. Ich habe eine Unterklasse von SKLabelNode
namens NORLabelNode
gemacht.
Es ist verfügbar unter GitHub und es ist auch eine Cocoapod verfügbar.
Es erstellt einfach eine Reihe von SKLabelNodes und diese als Unterknoten verwenden. Wenn Sie etwas Ähnliches selbst die Haupt Kern implementieren wollen, ist diese Methode:
- (NSArray *)labelNodesFromText:(NSString *)text{
NSArray *substrings = [text componentsSeparatedByString:@"\n"];
NSMutableArray *labelNodes = [[NSMutableArray alloc] initWithCapacity:[substrings count]];
NSUInteger labelNumber = 0;
for (NSString *substring in substrings) {
SKLabelNode *labelNode = [SKLabelNode labelNodeWithFontNamed:self.fontName];
labelNode.text = substring;
labelNode.fontColor = self.fontColor;
labelNode.fontSize = self.fontSize;
labelNode.horizontalAlignmentMode = self.horizontalAlignmentMode;
labelNode.verticalAlignmentMode = self.verticalAlignmentMode;
CGFloat y = self.position.y - (labelNumber * self.fontSize * self.lineSpacing);
labelNode.position = CGPointMake(self.position.x, y);
labelNumber++;
[labelNodes addObject:labelNode];
}
return [labelNodes copy];
}
Die oben etwas vereinfacht ist, da die Etiketten auch die meisten anderen Eigenschaften von ihren Eltern erben.
Der Zeilenabstand kann über eine CGFloat-Eigenschaft geändert werden. Abgesehen davon funktioniert es wie ein gewöhnliches SKLabelNode
und Sie können Text, Farbe, Schriftart, fontSize etc. im laufenden Betrieb ändern, wann immer Sie möchten.
Ich weiß, dass dies eine alte Antwort ist, aber der zweite Teil dieser Antwort stört mich, "UILabel stattdessen verwenden." Zuletzt wusste ich, dass "UILabel" nicht in einer "SKScene" verwendet werden kann, und erklärt hier nur, wie man ein 'UILabel' verwendet, nicht wie man es in einer' SKScene' verwendet. Der einzige Weg, an den ich denken kann, ist, dass Sie den gerenderten Inhalt von einem versteckten 'UILabel' einfangen und in einen' SKSpriteNode' legen können (ich versuche tatsächlich, diesen Ansatz zu vermeiden, der mich zu dieser Frage brachte) – Knight0fDragon