关于SVProgressHUD 使用中的小坑 2018-11-13

  1. 问题描述:在键盘隐藏的时候需要一个toast 提示 [SVProgressHUD showSuccess:@"键盘隐藏了"]; 但是真实的情况确实,toast 很快的隐藏了,没有按照预设的时间,而是提前隐藏了,一闪而过,通过源码调试,发现在走位的执行的过程中,意外的执行了dismiss ,最终确认确实是工程的代码中有地方调用了dismiss ,如下
罪魁祸手:全局的一个配置,控制器退出或者弹出的时候,采用第三方库 Aspects 对viewWillDisappear 挂了钩子
    [UIViewController aspect_hookSelector:@selector(viewWillDisappear:) withOptions:AspectPositionAfter usingBlock:^(id 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;
}

你可能感兴趣的:(关于SVProgressHUD 使用中的小坑 2018-11-13)