UIBarButtonItem在其UIToolbar动画后没有响应触摸

时间:2014-10-31 13:02:57

标签: ios animation uiview uitoolbar uiviewanimation

示例上下文

首先,对于某些情况,我在这里尝试完成的是键盘出现时键盘上方会显示UIToolbar。以下是当前场景的设置:



注意#1:UINavigationController应该在这张照片中标记为UIViewController
注意#2 UIToolbar已通过UIViewController

放入Storyboards


问题

动画在我第一次调用我的动画功能时不会移动UIToolbar。

当发生键盘时,我的-moveTextViewToolbarOnScreen功能设置为触发。动画运行,^completion处理程序触发,只有UIToolbar根本不动。因此,作为临时解决方法,我在动画的^completion块中有一行代码,用于检查我的frame.y的{​​{1}}是否实际上应该在哪里(动画目的地),如果没有,再次调用动画功能。 这里的谜团是,为了让动画实际将UIToolbar移动到位,函数总是需要调用两次。

这是我的动画功能(注意完成块中的UIToolbar语句):

if()

在屏幕外移动-(void)moveTextViewToolbarOnScreen{ if (self.textViewToolbar.hidden) { self.textViewToolbar.hidden = NO; self.textViewToolbar.userInteractionEnabled = YES; } [UIView animateWithDuration:0.26f delay:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.textViewToolbar.alpha = 1.0; self.textViewToolbar.frame = self.textViewKeyboardToolbarOnScreenFrame; } completion:^(BOOL finished) { // TODO: Figure out why this workaround is necessary. Sometimes the _keyboardToolbar doesn't // animate into place the first time and needs this recursive push. if (self.textViewToolbar.frame.origin.y != self.textViewKeyboardToolbarOnScreenFrame.origin.y){ [self moveTextViewToolbarOnScreen]; } }]; } 非常简单:

UIToolbar


作为参考,这是我的动画目的地-(void)moveTextViewToolbarOffScreen{ [UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionCurveLinear animations:^{ self.textViewToolbar.alpha = 0.0; self.textViewToolbar.frame = self.textViewKeyboardToolbarOnScreenFrame; } completion:^(BOOL finished) { }]; }

self.textViewKeyboardToolbarOnScreenFrame

当键盘显示/隐藏它时,动画设置为:

 // 260 = keyboard height
 self.textViewKeyboardToolbarOnScreenFrame = 
      CGRectMake(0,
                 screenHeight - 260, 
                 keyboardToolBarWidth,
                 keyboardToolBarHeight
                 );

所以任何人都可以帮助我理解为什么我的// textEditKeyboardAppear listener [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; // textEditKeyboardDisappear listener [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; -(void)keyboardWillShow:(NSNotification *)notifcation { NSLog(@"keyboardWillShow"); [self moveTextViewToolbarOnScreen]; } -(void)keyboardWillHide:(NSNotification *)notifcation { NSLog(@"keyboardWillHide"); [self moveTextViewToolbarOffScreen]; } 第一次不会动画到位,需要额外(递归)调用我的UIToolbar函数?

任何想法?我很难过!


注意:早些时候我遇到了一个问题,-moveTextViewToolbarOffScreen按钮在UIToolbar最终动画完成后无法工作,但是一旦我意识到,我就解决了这个问题我只是用另一个UIToolbar框剪裁工具栏视图,并阻止按钮接收任何点击事件。

0 个答案:

没有答案