문자열에서 문자의 좌표 (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 구문은 정말 오래되었습니다 (Swift 2). 변경 range.startIndexrange.lowerBound. substringToIndex이제 substring (to : Index)라고 불리지 만 더 이상 사용되지 않으므로 subscript를 사용해야합니다 self[..<range.lowerBound]. Btw range(of: String)문자의 인덱스를 찾고 있다면 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)
    }
}