文字列内の文字の座標(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.startIndex
しrange.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)
}
}