Cách lấy tọa độ (x, y) của một ký tự trong chuỗi
Tôi cần lấy tọa độ xy của một ký tự trong Chuỗi, nhưng không thể tìm thấy bất kỳ câu trả lời cập nhật nào. Làm thế nào tôi có thể đạt được điều này? Tôi tìm thấy bài viết này ở đây: Swift: Làm cách nào để tìm vị trí (x, y) của một chữ cái trong Nhãn UIL? nhưng .rangeOfString không còn khả dụng nữa:
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)
}
Bạn có biết làm thế nào để làm cho nó hoạt động trở lại?
Trả lời
Cú pháp Swift của bạn thực sự cũ (Swift 2). Thay đổi range.startIndexthành range.lowerBound. substringToIndexbây giờ được gọi là chuỗi con (thành: Chỉ mục) nhưng nó không được dùng nữa, bạn nên sử dụng chỉ số con self[..<range.lowerBound]. Btw không cần phải sử dụng Chuỗi range(of: String)nếu bạn đang tìm kiếm chỉ mục của một nhân vật. Bạn có thể sử dụng phương pháp thu thập 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)
}
}