我正在尝试将此处找到的代码转换为二进制算法,因为线性方法非常慢。我有一个有效的实现,但似乎有些东西我错过了,因为我得到的结果并不精确(也就是说,如果我从宽度中添加或减去 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 也是。