Bir String'deki bir karakterin koordinatları (x, y) nasıl alınır

Dec 21 2020

Bir String'deki bir karakterin xy koordinatını almam gerekiyor, ancak herhangi bir güncel cevap bulamadım. Bunu nasıl başarabilirim? Bu makaleyi burada buldum: Swift: Bir UILabel'deki bir harfin konumunu (x, y) nasıl bulabilirim? ancak .rangeOfString artık kullanılamıyor:

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)
}

Nasıl tekrar çalıştırılacağını biliyor musun?

Yanıtlar

1 LeoDabus Dec 21 2020 at 03:23

Swift sözdiziminiz gerçekten eski (Swift 2). Değişim range.startIndexiçin range.lowerBound. substringToIndexartık alt dize (to: Index) olarak adlandırılıyor, ancak kullanımdan kaldırıldı, alt simge kullanmalısınız self[..<range.lowerBound]. Btw range(of: String)Bir karakterin dizinini arıyorsanız String kullanmaya gerek yoktur . Toplama yöntemini kullanabilirsiniz firstIndex(of: Element):

extension StringProtocol {
    func characterPosition(character: Character, with font: UIFont = .systemFont(ofSize: 18.0)) -> CGPoint? {
        guard let index = firstIndex(of: character) else {
            print("\(character) is missed")
            return nil
        }
        let string = String(self[..<index])
        let size = string.size(withAttributes: [.font: font])
        return CGPoint(x: size.width, y: 0)
    }
}