ios – 动画“inputView”键盘转换

前端之家收集整理的这篇文章主要介绍了ios – 动画“inputView”键盘转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
UITextField具有 inputView属性,可用于指定自定义键盘.将此清除为nil可提供默认键盘.

如果UITextField是第一个响应者,则在设置inputView时不会发生任何更改,但通过调用[textField reloadInputView],键盘更改将立即发生.

我希望能够在两种不同的输入方法之间切换.触发它的接口将是一个UISegmentedView安装为UITextField的inputAccessoryView.

我有这个工作,但过渡是非常突然的.部分原因是我在两者之间转换的微调器和键盘在iPad上有不同的尺寸.

我发现我在reloadInputView周围包装动画块,我将在两个键盘的视图帧之间获得平滑的动画.不幸的是,有一种视觉抖动,因为过渡不是动画:

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

或者,如果我在转换中包装重新加载,我可以得到一个很好的交叉淡入淡出,但我没有得到平滑的帧更改:

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

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

我想要的是动画和转换输入视图重新加载.我尝试将重新加载放在动画的过渡中,我也尝试将重新加载放在过渡中的动画中 – 似乎都没有帮助.

有任何想法吗?谢谢!

解决方法

我能够通过以下方式成功动画对inputView的更改,而不会出现任何故障:

>将新的inputView添加为现有inputView的子视图,然后再添加
>在完成动画选择后,将UIControl的inputView切换到自定义inputView.

作为一个例子,这里是如何快速淡入自定义inputView:

//start the view as invisible
_customInputView.alpha = 0.0f;

//add the custom inputView as a subview of the existing inputView
[self.inputView addSubview:_customInputView];

//animate the opacity change
[UIView animateWithDuration:0.25f 
                      delay:0.0f
                    options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         _customInputView.alpha = 1.0f;
                     } completion:^(BOOL finished) {
                         //switch the UIControl's inputView
                         self.inputView = _customInputView;
                     }];

猜你在找的iOS相关文章