Swift: Как мне найти положение (x,y) буквы в UILabel?
Я пытаюсь найти позицию письма в labelText . Код в Objective C является
NSRange range = [@"Good,Morning" rangeOfString:@","];
NSString *prefix = [@"Good,Morning" substringToIndex:range.location];
CGSize size = [prefix sizeWithFont:[UIFont systemFontOfSize:18]];
CGPoint p = CGPointMake(size.width, 0);
NSLog(@"p.x: %f",p.x);
NSLog(@"p.y: %f",p.y);
Кто-нибудь, скажите, пожалуйста, как мы пишем приведенный выше код в swift? Мне сложно вычислить диапазон строки.
4 ответа
Наконец-то я бы порекомендовал следующий вариант:
extension String {
func characterPosition(character: Character, withFont: UIFont = UIFont.systemFontOfSize(18.0)) -> CGPoint? {
guard let range = self.rangeOfString(String(character)) else {
print("\(character) is missed")
return nil
}
let prefix = self.substringToIndex(range.startIndex) as NSString
let size = prefix.sizeWithAttributes([NSFontAttributeName: withFont])
return CGPointMake(size.width, 0)
}
}
Код клиента:
let str = "Good,Morning"
let p = str.characterPosition(",")
Безопасный способ найти диапазон - использовать if-let
заявление с rangeOfString
может вернуть nil
значение. Пройдите следующий код:
if let range = str.rangeOfString(",") {
let prefix = str.substringToIndex(range.startIndex)
let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14.0)])
let p = CGPointMake(size.width, 0)
}
Попробуйте этот код::
let range : NSRange = "Good,Morning".rangeOfString(",");
let prefix: NSString = "Good,Morning".substringToIndex(range.location);
let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(18.0)])
let p : CGPoint = CGPointMake(size.width, 0);
NSLog("p.x: %f",p.x)
NSLog("p.y: %f",p.y)
Ничего действительно не меняется при преобразовании этого в быстрый синтаксис
var range: NSRange = "Good,Morning".rangeOfString(",")
var prefix: String = "Good,Morning".substringToIndex(range.location)
print(prefix) //Good