線形多段法は非常に遅いので、代わりにここで見つかったコードをバイナリアルゴリズムに変換しようとしています。実装は機能していますが、得られる結果が正確ではないため、欠落していることがいくつかあるようです(つまり、幅から20ピクセル程度を加算または減算すると、同じ切り捨てが行われます。文字列..それはもう少し正確で、より近いカットを持っている必要があります):
-(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)];
}
誰かがそれで何が悪いのかを見送ることができますか?(これはカテゴリメソッドであるためself
、NSStringも同様です。