SVProgressHUD和MBProgressHUD是iOS开发中常用的toast弹窗。他们使用十分广泛,他们都存在明显的优缺点。他们的贝塞尔曲线动画十分难修改。
弹出框有两种:
1.模态弹出窗,它弹出时无法进行其它操作,不会自动消失,需要调用隐藏弹出窗函数才能消失(SVProgressHUD在显示其它toast弹出窗时时间到了也会消失)。
2.toast弹出框,会自动消失的提示框。
SVProgressHUD使用十分广泛,优点是:
1.采用异步显示弹出框,通知隐藏弹出框,发个通知就能隐藏弹出框;
2.具有跨页面显示功能(在B页面操作后显示弹出框,返回A页面能看到弹出框);
3.弹出框只影响弹出框的部分,点击非弹出框(会自动消失的toast弹窗)部分仍旧能点击操作;
4.能实现弹出时带震动效果。
缺点也很显然:
1.显示模态弹出框(不会自动消失的弹出框)需要时间,当一个发送一个请求时显示模态弹出框,请求结束隐藏模态弹出框。若请求响应极快只用了十几毫秒,就会出现模态弹出框没有取消,一直在存在。出现该问题的原因是SVProgressHUD是异步实现显示的,需要时间的,当显示了模态弹出窗后,在它没有真正显示出来前请求已经结束,发送了隐藏弹出窗,但是实际由于它没有显示出来,导致实际上没有隐藏弹出框,当它显示出来后就没有对应隐藏弹出框对应处理。你总不能让后台返回的慢些吧!这样不是降低用户体验吗?
2.不能滑动立即移除不想看的提示框。
SVProgressHUD实现震动效果:
- (void)setDefaultSVProgressHUD {
[SVProgressHUD setHapticsEnabled:YES];
}
MBProgressHUD优缺点和SVProgressHUD正好相反。
MBProgressHUD优点:
1.实时显示,一对一显示隐藏,不存在SVProgressHUD的由于请求过快隐藏不了问题。
缺点:
1.一般都把它加在[[UIApplication sharedApplication].delegate window]上,而[[UIApplication sharedApplication].delegate window]又依赖于具体页面。若app启动时首页没有显示出来就弹出toast弹框,app会闪退。
2.由于加在具体的[[UIApplication sharedApplication].delegate window]上,没有跨页面的显示能力。在B页面操作后显示弹出框,返回A页面不能看到弹出框。有的人使用启动一个线程显示弹出框,这样会造成内存释放问题,浪费资源。有的人采用弹出toast框后延迟一段时间再返回或进入下一个页面,这样严重降低用户体验。
3.需要找到对应的弹出窗加在的对象,然后隐藏。我以前就在使用它时遇到这个问题,被领导狠批评了一顿。在A页面发送了多个请求,其中根据后台返回的情况跳转到另一个页面,由于没有把所有情况都考虑取消模态弹出窗,导致进入B页面发送请求,然后返回A面后弹出框一直在转,无法取消,无法再次放回上一层页面,而app卡在哪里。我们不能完全依赖于程序猿的代码完备性,而应该像SVProgressHUD一样随时取消弹出框有冗余机制。
4.它的toast弹出框出现时,无法点击非弹出框下面的页面。
他们的优缺点互补,但是一个app通常只有一种类型的弹出窗,他们的动画又难以修改。SVProgressHUD优点更多,但是还存在缺点。他们都不时完美的弹出框。
5.不能滑动立即移除不想看的提示框。
完美的弹出窗应该具有他们两个者的优点,而没有他们的缺点。如跨页面弹出,实时方便显示取消,点击toast弹出框后面的上下控件能操作,能很容易修改显示的模态弹出框动画。这样的弹出框就需要自动定义window类的单例弹出框。具体见《多页面悬停控件和如何获得多UIWindow的页面UIWindow》。
原文地址:https://blog.csdn.net/jia12216/article/details/128113929
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_15261.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!