2015-06-22 22 views

cevap

25

SKLabelNode çerçevesinin boyutu verilen dikdörtgene göre karşılaştırılabilir. Yazı tipini etiketin dikdörtgeninin ve istenen dikdörtgenin boyutlarına göre ölçeklendirirseniz, alanı olabildiğince doldurmak için en iyi yazı tipi boyutunu belirleyebilirsiniz. Son satır, etiketi kolayca dikdörtgenin merkezine taşır. (Metin küçük harfler veya noktalama gibi sadece kısa karakterler olup olmadığı merkez dışında görünebilir.)

Swift

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) 
} 

Objective-C yazdım

-(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); 
} 
+0

birisi bu kodu için objc ekleyebilir. Teşekkürler. – GeneCode

+0

Etiket düğümü ve dikdörtgen arasında ek bir dolgu isteyebilirsiniz. 'MIN (rect.size.width/(labelNode.frame.size.width + PADDING), rect.size.height/(labelNode.frame.size.height + PADDING)); – Wouter

1

Bu genişlik için, ancak CGRect'inize uyması için yüksekliğe uyarlayabilirsiniz. Örnekte, pg, kullandığınız yazı tipiyle başlatılan bir SKLabelNode'dur. Argümanlar, String'iniz ve hedef genişliğinizdir ve sonuç, SKLabelNode'unuza atamak istediğiniz boyuttur. Tabii ki, doğrudan SKLabelNode'u da koyabilirsiniz. Boyut çok büyükse, maksimum boyut 50'dir, ancak bu kişiseldir.

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)) 
} 

Düzenleme: Ben de bu yazmıştı Aslında sadece fark:

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 
    } 
İlgili konular