Ich versuche, die code found here in einen binären Algorithmus stattdessen zu konvertieren, da die lineare Methode schrecklich langsam ist. Ich habe eine funktionierende Implementierung, aber Theres scheint etwas zu sein, das ich vermisse, da die Ergebnisse, die ich bekomme, nicht genau sind (das heißt, wenn ich 20 oder so Pixel von der Breite addiere oder subtrahiere, bekomme ich dasselbe gekürzt string..it sollte ein wenig genauer und haben einen genaueren Schnitt) sein:Trunkieren Sie einen NSString zu Breite
-(NSString*)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont*)font addQuotes:(BOOL)addQuotes
{
int min = 0, max = self.length, mid;
while (min < max) {
mid = (min+max)/2;
NSString *currentString = [self substringWithRange:NSMakeRange(min, mid - min)];
CGSize currentSize = [currentString sizeWithFont:font];
if (currentSize.width < width){
min = mid + 1;
} else if (currentSize.width > width) {
max = mid - 1;
} else {
min = mid;
break;
}
}
return [self substringWithRange:NSMakeRange(0, min)];
}
Kann jemand den Schläger sehen vor, was daran falsch sein könnte? (Dies ist eine Kategorie-Methode, so self
ist ein NSString
Warum müssen Sie das selbst berechnen? Was machst du mit der Schnur? Wenn Sie es nur innerhalb eines Labels anzeigen, können Sie das Label so konfigurieren, dass es für Sie abgeschnitten wird. Sie können sogar zulassen, dass das Label die Schriftgröße ein wenig verkleinert, damit der Text angepasst werden kann, um ein Abschneiden zu verhindern. –
Ich zeichne es und muss am Ende eine Ellipse hinzufügen. Ich möchte auch Zitate um ihn herum, so dass die DrawInRect withLineBreakMode ist keine Option hier, da es würde die Ende Zitat abgeschnitten .. – Snowman
Thx Kumpel für Ihren Link oben .. Ich suchte nach meinem Problem Lösung wie verrückt, aber endlich gefunden in deinem Beitrag .. – Rendy