如何仅在UITextView为空/非空状态切换时触发动画?
实现UITextView状态切换时仅触发一次动画
你可以通过记录上一次的空状态来避免重复触发动画,具体实现步骤如下:
- 在视图控制器类中添加私有属性,跟踪UITextView之前的空状态:
private var wasTextViewEmpty = true
- 在初始化方法(比如
viewDidLoad)中,根据UITextView的初始内容初始化状态变量:
override func viewDidLoad() { super.viewDidLoad() wasTextViewEmpty = yourTextView.text?.isEmpty ?? true }
- 修改
textViewDidChange代理方法,仅当状态发生切换时触发动画:
func textViewDidChange(_ textView: UITextView) { let currentIsEmpty = textView.text?.isEmpty ?? true // 仅在空/非空状态切换时执行动画 if currentIsEmpty != wasTextViewEmpty { if currentIsEmpty { // 调用文本变为空时的动画 playEmptyStateAnimation() } else { // 调用文本变为非空时的动画 playNonEmptyStateAnimation() } // 更新状态记录,避免重复触发 wasTextViewEmpty = currentIsEmpty } }
核心逻辑是:通过对比当前文本的空状态和上一次记录的状态,只有当两者不一致(即状态发生切换)时,才执行对应动画并更新状态变量。这样就能保证每次状态切换只触发一次动画,不会在用户连续输入或删除文本时重复执行。
内容的提问来源于stack exchange,提问作者David Henry
相关产品推荐
相关产品推荐

