Pisałem to dla szerokości, ale możesz dostosować ją do wysokości, aby pasowała do twojego CGRect. W tym przykładzie pg jest zainicjalizowanym kodem SKLabelNode za pomocą używanej czcionki. Argumenty to Twój ciąg i docelowa szerokość, a wynikiem jest rozmiar, który chcesz przypisać do swojego SKLabelNode. Oczywiście możesz również umieścić bezpośrednio swój SKLabelNode. Jeśli rozmiar jest zbyt duży, maksymalny rozmiar to 50, ale to jest osobiste.
func getTextSizeFromWidth(s:String, w:CGFloat)->CGFloat {
var result:CGFloat = 0;
var fits:Bool = false
pg!.text=s
if(s != ""){
while (!fits) {
result++;
pg!.fontSize=result
fits = pg!.frame.size.width > w;
}
result -= 1.0
}else{
result=0;
}
return min(result, CGFloat(50))
}
Edit: Właściwie, po prostu sobie sprawę, że to było również napisane:
extension SKLabelNode {
func fitToWidth(maxWidth:CGFloat){
while frame.size.width >= maxWidth {
fontSize-=1.0
}
}
func fitToHeight(maxHeight:CGFloat){
while frame.size.height >= maxHeight {
fontSize-=1.0
}
Czy ktoś może dodać objc dla tego kodu. dzięki. – GeneCode
Należy zauważyć, że może zajść potrzeba dodatkowego dopełnienia między węzłem etykiety a prostokątem. 'MIN (rect.size.width/(labelNode.frame.size.width + PADDING), rect.size.height/(labelNode.frame.size.height + PADDING));' – Wouter