文字列の特定の部分に 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()
}
}
}
}