文字列内の文字の座標(x、y)を取得する方法

Dec 21 2020

文字列内の文字のxy座標を取得する必要がありますが、最新の回答が見つかりませんでした。どうすればこれを達成できますか?私はここでこの記事を見つけました:Swift:UILabelで文字の位置(x、y)を見つけるにはどうすればよいですか?しかし、.rangeOfStringはもう利用できません:

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

それを再び機能させる方法を知っていますか?

回答

1 LeoDabus Dec 21 2020 at 03:23

Swift構文は本当に古いです(Swift2)。に変更range.startIndexrange.lowerBoundます。substringToIndex現在はsubstring(to:Index)と呼ばれていますが、非推奨ですself[..<range.lowerBound]。添え字を使用する必要があります。ところでrange(of: String)、文字のインデックスを探している場合は、文字列を使用する必要はありません。あなたは収集方法を使うことができます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)
    }
}