Domanda

Prima di chiedere le mie domande, questo è da Apple documentazione Re: Come determinare la larghezza di una stringa utilizzando Quarzo:

  

Se le misure di testo sono importanti per la vostra applicazione, è possibile   per calcolare utilizzando le funzioni di Quartz 2D. Tuttavia, si potrebbe prima   considerare l'utilizzo di ATSUI, la cui forza è nel layout del testo e   misurazione. ATSUI ha diverse funzioni che ottengono metriche del testo. Non   solo è possibile ottenere metriche testo dopo layout, ma in rari casi   avete bisogno di loro, è possibile ottenere prima-layout di metriche del testo. a differenza di   Quarzo, per il quale è necessario eseguire i calcoli da soli, ATSUI   calcola le misure per voi. Ad esempio, è possibile ottenere il   immagine rettangolo di delimitazione per il testo chiamando la funzione ATSUI   ATSUMeasureTextImage.

     

Se si decide che il testo quarzo adatta alle vostre esigenze meglio di ATSUI (o   Cacao), è possibile seguire questa procedura per misurare la larghezza del testo prima   Quarzo disegna:

     
      
  1. Chiamare la funzione CGContextGetTextPosition per ottenere la posizione di testo corrente.
  2.   
  3. Imposta la modalità di disegno di testo per kCGTextInvisible utilizzando la funzione CGContextSetTextDrawingMode.
  4.   
  5. Disegna il testo chiamando la funzione CGContextShowText per disegnare il testo nella posizione attuale testo.
  6.   
  7. Determinare la posizione del testo finale chiamando la funzione CGContextGetTextPosition.
  8.   
  9. Sottrarre la posizione iniziale dalla posizione finale per determinare la larghezza del testo.
  10.   

Ecco le mie domande:

  1. E 'davvero questo il modo migliore per determinare la larghezza di una stringa utilizzando core grafico? Sembra fragile e dal momento che il mio testo coesiste con elementi grafici 2D, vorrei utilizzare lo stesso contesto per tutto il rendering. Speravo ci sarebbe qualche metodo compatto, come:

    CGContextGetTextWidthAndHeight(context, text);
    
  2. Ho letto che ATSUI è obsoleto e sta per essere sostituita da Core Text. È vero, e se è così, è in iOS?

È stato utile?

Soluzione

Su iPhone SDK, c'è una famiglia di metodi su NSString che forniscono ciò che si desidera.

A partire da iOS 7.0, questi metodi sono :

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

Nelle versioni precedenti di iOS che abbiamo avuto questi, ormai deprecato:

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

Altri suggerimenti

Quando si eseguono operazioni attingendo thread diversi thread UI, è necessario utilizzare la tecnica che descritto. Questo è particolarmente importante notare quando si utilizzano le cose come CATiledLayer, che svolge è il rendering in modo asincrono su sfondo discussioni, o quando si disegna grafici su ordinazione in background per qualsiasi altro motivo.

Sono d'accordo con PGB quando si sta facendo la grafica "semplici" e si sono garantiti per essere in esecuzione sul thread principale. Tuttavia, sizeWithFont sta facendo la stessa cosa, come la tecnica hai descritto - è semplicemente facendo per voi utilizzando UIGraphicsGetCurrentContext ()

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top