Podobnie jak wiele innych Musiałem także poprawkę tego problemu. Moje podejście było o wiele prostsze niż rozwiązanie Chrisa. Zrobiłem podklasę SKLabelNode
o nazwie NORLabelNode
.
Jest dostępna pod numerem GitHub. Dostępny jest również kokos.
Po prostu tworzy zestaw SKLabelNodes i używa ich jako podwęzłów. Jeśli chcesz zaimplementować coś podobnego się głównym istota jest ta metoda:
- (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];
}
Powyższe jest nieco uproszczona jako etykiety dziedziczą też większość innych właściwości od ich rodziców.
Przełożenie linii można zmienić za pomocą właściwości CGFloat. Poza tym działa tak jak zwykły SKLabelNode
i można zmienić tekst, kolor, czcionkę, rozmiar czcionki itp. W locie, kiedy tylko masz na to ochotę.
Wiem, że to stara odpowiedź, ale druga część tej odpowiedzi nurtuje mnie: "Użyj zamiast tego UILabel". Ostatnio wiedziałem, że 'UILabel' nie może być użyte wewnątrz' SKScene', a wyjaśnione tutaj wyjaśnia tylko jak używać 'UILabel', a nie jak używać go w' SKScene'. Jedyny sposób, jaki mogę wymyślić, to to, że możesz przechwycić renderowaną zawartość z ukrytej 'UILabel' i umieścić ją w' SKSpriteNode' (tak naprawdę próbuję uniknąć tego podejścia, które doprowadziło mnie do tego pytania) – Knight0fDragon