如何获取字符串中字符的坐标(x,y)
How to get the coordinates (x,y) of a character in a String
我需要获取字符串中字符的 xy 坐标,但找不到任何最新答案。我怎样才能做到这一点?我在这里找到了这篇文章:Swift : How do I find the position(x,y) of a letter in a UILabel?
但是 .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)
}
你知道如何让它重新工作吗?
您的 Swift 语法真的很旧 (Swift 2)。将 range.startIndex
更改为 range.lowerBound
。 substringToIndex
现在称为 substring(to: Index) 但已弃用,您应该使用下标 self[..<range.lowerBound]
。顺便说一句,如果您要查找字符的索引,则无需使用 String 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)
}
}
我需要获取字符串中字符的 xy 坐标,但找不到任何最新答案。我怎样才能做到这一点?我在这里找到了这篇文章:Swift : How do I find the position(x,y) of a letter in a UILabel? 但是 .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)
}
你知道如何让它重新工作吗?
您的 Swift 语法真的很旧 (Swift 2)。将 range.startIndex
更改为 range.lowerBound
。 substringToIndex
现在称为 substring(to: Index) 但已弃用,您应该使用下标 self[..<range.lowerBound]
。顺便说一句,如果您要查找字符的索引,则无需使用 String 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)
}
}