Comment régler la taille de la police de SKLabelNode pour qu'elle soit de taille fixe(Swift)




sprite-kit (2)

J'ai écrit ceci pour la largeur, mais vous pouvez l'adapter à la taille pour adapter votre CGRect. Dans l'exemple, pg est un SKLabelNode initialisé avec la police que vous utilisez. Les arguments sont votre chaîne et la largeur cible, et le résultat est la taille que vous souhaitez affecter à votre SKLabelNode. Bien sûr, vous pouvez également mettre directement votre SKLabelNode. Si la taille est trop grande, la taille maximale est 50, mais c'est personnel.

 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: En fait, je viens de réaliser que j'avais aussi écrit ceci:

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
    }

J'ai un carré (200X200) avec un SKLabelNode dedans. L'étiquette montre le score et il peut atteindre un grand nombre. Je veux adapter le nombre dans le carré.

Comment est-ce que je peux changer la taille de texte (ou la taille) d'un SKLabelNode pour l'adapter dans une taille fixe.


La taille de l'image du SKLabelNode peut être comparée au rectangle donné. Si vous redimensionnez la police en fonction des tailles du rectangle de l'étiquette et du rectangle souhaité, vous pouvez déterminer la meilleure taille de police pour remplir l'espace autant que possible. La dernière ligne déplace commodément l'étiquette au centre du rectangle. (Il peut sembler décentré si le texte ne contient que des caractères courts comme des lettres minuscules ou de la ponctuation.)

Rapide

func adjustLabelFontSizeToFitRect(labelNode:SKLabelNode, rect:CGRect) {

    // Determine the font scaling factor that should let the label text fit in the given rectangle.
    let scalingFactor = min(rect.width / labelNode.frame.width, rect.height / labelNode.frame.height)

    // Change the fontSize.
    labelNode.fontSize *= scalingFactor

    // Optionally move the SKLabelNode to the center of the rectangle.
    labelNode.position = CGPoint(x: rect.midX, y: rect.midY - labelNode.frame.height / 2.0)
}

Objectif c

-(void)adjustLabelFontSizeToFitRect:(SKLabelNode*)labelNode rect:(CGRect)rect {

    // Determine the font scaling factor that should let the label text fit in the given rectangle.
    double scalingFactor = MIN(rect.size.width / labelNode.frame.size.width, rect.size.height / labelNode.frame.size.height);

    // Change the fontSize.
    labelNode.fontSize *= scalingFactor;

    // Optionally move the SKLabelNode to the center of the rectangle.
    labelNode.position = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect) - labelNode.frame.size.height / 2.0);
}




sklabelnode