2

文字列の特定の部分に tapGestureRecognizers をアタッチできるカスタム UILabel クラスがあります。今、UILabel のテキストをアニメーション化して、一度に 1 文字ずつ印刷しようとしています。私のコードは一度に 1 文字ずつ TextStorage に追加しているようですが、テキストはアニメーションなしで同時に表示されます。一度に 1 文字ずつ TextStorage に追加するのは間違った方法ですか? ありがとう

class CustomLabel: UILabel {

    let layoutManager = NSLayoutManager()
    let textContainer = NSTextContainer(size: CGSize.zero)
    var textStorage = NSTextStorage() {
        didSet {
            textStorage.addLayoutManager(layoutManager)
        }
    }
    var onCharacterTapped: ((_ label: UILabel, _ characterIndex: Int) -> Void)?

    let tapGesture = UITapGestureRecognizer()

    override var attributedText: NSAttributedString? {
        didSet {
            if let attributedText = attributedText {

                DispatchQueue.main.async {

                    for (index, char) in attributedText.string.characters.enumerated() {

                        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5 * Double(index)) {
                            print("character ch is: \(char) at index: \(index)")
                            let text = NSAttributedString(string: String(char))
                            self.textStorage = NSTextStorage(attributedString: text)
                        }
                    }
                }

            } else {
                textStorage = NSTextStorage()
            }
        }
    }
}
4

0 に答える 0