gpt4 book ai didi

ios - 动画 `inputView` 键盘转换

转载 作者:技术小花猫 更新时间:2023-10-29 11:08:02 34 4
gpt4 key购买 nike

UITextField 有一个 inputView可用于指定自定义键盘的属性。将此项清除为 nil 可提供默认键盘。

如果 UITextField 是第一响应者,则设置 inputView 不会发生任何变化,但会调用 [textField reloadInputView]键盘更改将立即发生。

我希望能够在两种不同的输入方法之间切换。触发此操作的界面将是作为 UITextFieldinputAccessoryView 安装的 UISegmentedView

我已经开始工作了,但是转换非常突然。部分原因是我在 iPad 上切换的微调器和键盘尺寸不同。

我发现我在 reloadInputView 周围包裹了一个动画 block ,我将在两个键盘的 View 框架之间获得平滑的动画。不幸的是,由于过渡不是动画的,因此存在视觉抖动:

[UIView animateWithDuration: 0.3 animations:^()
{
[firstResponder reloadInputViews];
}];

或者,如果我将重新加载包装在一个过渡中,我可以获得很好的交叉淡入淡出效果,但我不会获得平滑的帧变化:

[UIView transitionWithView: keyboardWindow
duration: 0.3
options: UIViewAnimationOptionTransitionCrossDissolve
animations: ^(){ [firstResponder reloadInputViews]; }
completion: nil];

(在第二个代码块中,我从 self.window 获得了 keyboardWindow,因为这个 View 是作为 UITextField 安装的inputAccessoryView 最终嵌套在键盘窗口下。)

我想要的是动画 转换输入 View 重新加载。我尝试将重载放置在动画的过渡中,我还尝试将重新加载放置在过渡的动画中 – 似乎都没有帮助。

有什么想法吗?谢谢!

最佳答案

您可以调用 resignFirstResponder 使输入 View 消失,然后在延迟后调用 becomeFirstResponder 使键盘出现,反之亦然。

下面在退出普通键盘后设置为inputView。

let delayTime = dispatch_time(DISPATCH_TIME_NOW,Int64(1 * (NSEC_PER_SEC/3)))

textField.resignFirstResponder()

dispatch_after(delayTime, dispatch_get_main_queue()) {
self.textField.inputView = currentInputView
self.textField.becomeFirstResponder()
}

这设置为键盘。

dispatch_after(delayTime, dispatch_get_main_queue()) {
self.textField.inputView = nil
self.textField.becomeFirstResponder()
}

关于ios - 动画 `inputView` 键盘转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27949105/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com