Bir String'deki bir karakterin koordinatları (x, y) nasıl alınır
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
Swift sözdiziminiz gerçekten eski (Swift 2). Değişim range.startIndex
için range.lowerBound
. substringToIndex
artı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)
}
}