- 问题描述:在键盘隐藏的时候需要一个toast 提示 [SVProgressHUD showSuccess:@"键盘隐藏了"]; 但是真实的情况确实,toast 很快的隐藏了,没有按照预设的时间,而是提前隐藏了,一闪而过,通过源码调试,发现在走位的执行的过程中,意外的执行了dismiss ,最终确认确实是工程的代码中有地方调用了dismiss ,如下
罪魁祸手:全局的一个配置,控制器退出或者弹出的时候,采用第三方库 Aspects 对viewWillDisappear 挂了钩子
[UIViewController aspect_hookSelector:@selector(viewWillDisappear:) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> aspectInfo,BOOL animation){
UIViewController *controller = aspectInfo.instance;
[SVProgressHUD dismiss];
DDLogDebug(@"消失了");
} error:nil];
原因说明:键盘消失的时候这个监听方法也执行了,打印输出是键盘对象,也是一个控制器UIInputViewController 继承自ViewController,键盘隐藏的时候,该控制器执行了viewWillDisappear等一套UIViewContoller 的方法,刚好,我们监听到该方法的时候,手动执行了dismiss,该方法的执行会导致源码里面的backgroundView.alpha = 0, 但是我们的toast 还没有执行结束,视图被提前变成透明了,所以就看不到了,其实toast 的动画方法还没有执行结束,只是你看不到了而已,大概原因就是这样子,下面是源码的部分
dismiss的时候会执行
- (void)fadeOutEffects
{
if(self.defaultStyle != SVProgressHUDStyleCustom) {
// Remove blur effect
self.hudView.effect = nil;
}
// Remove background color
self.hudView.backgroundColor = [UIColor clearColor];
// Fade out views
self.backgroundView.alpha = 0.0f;//这里是关键:hud 的一个背景视图
self.imageView.alpha = 0.0f;
self.statusLabel.alpha = 0.0f;
self.indefiniteAnimatedView.alpha = 0.0f;
self.ringView.alpha = self.backgroundRingView.alpha = 0.0f;
}
网友评论