Frage

Bevor ich meine Fragen stellen, das ist von der Apple-Dokumentation Re: wie die Breite einer Zeichenkette bestimmen Quarz mit:

  

Wenn Text Messungen an Ihre Anwendung wichtig sind, ist es möglich,   berechnen sie Funktionen Quartz 2D verwenden. Sie könnten jedoch auch zuerst   mit ATSUI, deren Stärke in Textlayout betrachten und   Messung. ATSUI hat mehrere Funktionen, die Textmetriken erhalten. Nicht   nur können Sie nach-Layout-Textmetriken erhalten, aber in den seltenen Fällen,   Sie brauchen sie, können Sie vor-Layout-Textmetriken erhalten. nicht wie   Quarz, für die Sie die Berechnungen selbst durchführen müssen, ATSUI   berechnet die Messungen für Sie. Zum Beispiel können Sie die erhalten   Bild umschließende Rechteck für Text durch die ATSUI Funktion aufrufen   ATSUMeasureTextImage.

     

Wenn Sie sich entscheiden, dass Quartz Text Ihre Bedürfnisse besser als ATSUI (oder   Kakao), können Sie diese Schritte zur Messung der Breite des Textes folgen vor   Quarz zieht es:

     
      
  1. Rufen Sie die Funktion CGContextGetTextPosition die aktuelle Textposition zu erhalten.
  2.   
  3. Geben Sie den Text Zeichenmodus zu kCGTextInvisible die Funktion CGContextSetTextDrawingMode verwenden.
  4.   
  5. Ziehen Sie den Text durch die Funktion CGContextShowText Aufruf den Text an der aktuellen Textposition zu ziehen.
  6.   
  7. Bestimmen Sie die Endfassung Position durch die Funktion CGContextGetTextPosition aufrufen.
  8.   
  9. Ziehen Sie die Startposition aus der Endposition die Breite des Textes zu bestimmen.
  10.   

Hier sind meine Fragen:

  1. Ist das wirklich der beste Weg, um die Breite einer Zeichenkette mit Core Graphics zu bestimmen? Es scheint, dünn und da mein Text koexistiert mit 2D grafischen Elementen, würde Ich mag den gleichen Kontext für all Rendering verwenden. Ich hatte gehofft, es würde einige kompakte Methode sein, wie:

    CGContextGetTextWidthAndHeight(context, text);
    
  2. Ich habe gelesen, dass ATSUI veraltet ist und geht von Core Text ersetzt werden. Ist das wahr und wenn ja, ist es in iOS?

War es hilfreich?

Lösung

Auf dem iPhone SDK gibt es eine Familie von Verfahren auf NSString das bieten, was Sie wollen.

Wie von iOS 7.0, diese Methoden sind :

- boundingRectWithSize:options:attributes:context:
- sizeWithAttributes:

Bei älteren Versionen von iOS wir diese hatten, jetzt veraltet:

– sizeWithFont:  
– sizeWithFont:forWidth:lineBreakMode:  
– sizeWithFont:constrainedToSize:  
– sizeWithFont:constrainedToSize:lineBreakMode:  
– sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:

Andere Tipps

Bei der Durchführung von Operationen auf Threads außer dem UI-Thread zeichnen, müssen Sie die Technik verwenden, die Sie beschrieben. Dies ist besonders wichtig zu beachten, wenn Dinge wie CATiledLayer verwenden, die asynchron auf Hintergrund-Threads es Rendering durchführt, oder wenn aus irgendeinem anderen Grunde im Hintergrund eigene Grafiken zeichnen.

ich mit PGB zustimmen, wenn Sie den „einfachen“ Grafiken tun und Sie werden garantiert auf dem Haupt-Thread ausgeführt werden. Jedoch ist sizeWithFont das Gleiche wie die Technik tun Sie beschrieben - es tut es einfach für Sie mit UIGraphicsGetCurrentContext ()

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top