Mit einem CALayer Text in einem UITextView hervorheben, der sich über mehrere Zeilen erstreckt

8

Dies ist eine Fortsetzung der Erste CGRect für Text in einem UITextView zum Hervorheben mit einem CALayer . Ich habe Probleme mit dem richtigen Rechteck für die Bereiche in jedem Zeilenfragment.

%Vor%

Das ist mein aktueller Versuch. Ich verwende grundsätzlich enumerateLineFragmentsForGlyphRange: usingBlock: um durch jede Zeile. Dann bin ich mit enumerateEnclosingRectsForGlyphRange: withinSelectedGlyphRange: usingBlock: um sicherzustellen, dass der Bereich des Textes in der aktuellen Zeile passt sich mit dem Bereich Linie und hat die gleiche Y-Koordinate. Manchmal funktioniert das und manchmal nicht.

Es scheint, dass wenn der Suchtext in der Nähe einer Rückkehr ist, er den Highlight-Weg abzieht. (die y-Koordinate).

In diesem Screenshot "Gibt den Bereich der generierten Zeichen zurück" soll hervorgehoben sein.

Es scheint, wenn der Text nicht in der Nähe eines Rückgabe- oder Whitespaces ist, funktioniert dies korrekt:

Vermisse ich etwas?

UPDATE:

ich das Problem ein wenig nach unten verengt haben, glaube ich enumerateLineFragmentsForGlyphRange: usingBlock: wird Linien überspringt die Renditen

.     
Myron Slaw 20.12.2013, 01:42
quelle

1 Antwort

8

Ich habe die Lösung gefunden:

Anstatt enumerateEnclosingRectsForGlyphRange zu verwenden: Ich verwende die NSString-Methode enumerateSubstringsInRange: options: usingBlock:

Ich zähle die Zeilenfragmente wie gewöhnlich auf, aber statt zu versuchen, die einschließende rect-Enumerationsmethode zu verwenden, nummeriere ich jedes Zeichen in der Zeile, während ich das rect für die Ebene erstelle.

%Vor%

}

Ich arbeite immer noch an mehreren Übereinstimmungen, ich werde den Code aktualisieren, sobald das funktioniert.

    
Myron Slaw 29.12.2013, 06:36
quelle