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
Другие вопросы по тегам