SVProgressHUD和MBProgressHUD的优缺点与SVProgressHUD震动实现

简介: SVProgressHUD和MBProgressHUD的优缺点与SVProgressHUD震动实现

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》。

目录
相关文章
MBProgressHUD和SVProgressHUD各自的缺点及解决方案
MBProgressHUD和SVProgressHUD各自的缺点及解决方案
310 0
|
人工智能 自然语言处理 数据挖掘
《深度解析:VAEs如何重塑数据生成与重建格局》
变分自编码器(VAEs)是人工智能领域中强大的生成模型,广泛应用于图像生成、语音合成及医疗数据分析。其核心由编码器和解码器组成,通过将数据映射到低维潜在空间并重建,实现高效的数据生成与重建。VAEs的潜在空间具有连续性,并引入概率分布以支持创新生成。损失函数引导编码与解码优化,确保高质量的重建效果。VAEs在图像、医疗和自然语言处理等领域展现出巨大潜力,为各行业带来新的发展机遇。
404 18
|
人工智能 自然语言处理 知识图谱
英伟达nGPT重塑Transformer,AI训练速度暴增20倍!文本越长,加速越快
英伟达提出nGPT(Normalized Transformer),通过单位范数归一化和超球面上的表示学习,显著提升了Transformer模型的训练速度和性能。实验显示,nGPT在处理4k长度序列时,训练速度比传统Transformer快10倍,且在多个下游任务中表现出色。论文地址:https://arxiv.org/pdf/2410.01131
263 12
|
Swift iOS开发
iOS 用一个布局来解决嵌套问题—— UICollectionViewCompositionalLayout
iOS 用一个布局来解决嵌套问题—— UICollectionViewCompositionalLayout
iOS 用一个布局来解决嵌套问题—— UICollectionViewCompositionalLayout
|
供应链 安全 区块链
深入浅出区块链技术:从原理到应用
【10月更文挑战第24天】 在数字时代,区块链技术以其独特的去中心化、不可篡改和透明性特点,正逐渐改变着我们的世界。本文将带你一探究竟,从区块链的基础原理出发,逐步深入到它的应用场景,让你不仅了解区块链“是什么”,更能明白它“能做什么”。无需担心技术术语的晦涩难懂,我们将用最通俗易懂的语言,为你揭开区块链的神秘面纱。
315 0
|
数据安全/隐私保护
github报错(完美解决):获取token。remote: Support for password authentication was removed on August 13, 2021.
这篇文章介绍了如何在GitHub上解决因密码认证被移除而导致的推送错误,通过创建和使用个人访问令牌(token)来代替密码进行身份验证。
3692 0
|
Swift 索引
Swift开发——元组
Swift中的元组是一种数据结构,用于组合不同类型的值。它们不是独立的数据类型,而是以有序序列形式存在,用圆括号括起,元素间用逗号分隔。元组可以有任意数量和类型的元素,可变性取决于其定义。常用于函数返回多个值。示例代码展示了元组的创建、访问、解包及赋值。元组可以通过标签来标识元素,支持嵌套和比较。在函数返回值和并行赋值场景中,元组特别有用。
338 0
Swift开发——元组
|
Arthas 缓存 监控
Watch 命令的参数介绍 | 学习笔记
快速学习 Watch 命令的参数介绍
1204 119
Watch 命令的参数介绍 | 学习笔记
|
iOS开发
解决Error (Xcode): File not found:XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
解决Error (Xcode): File not found:XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
472 0
|
缓存 移动开发 JavaScript
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
1176 1