Open szmichaelyb opened 3 years ago
暂停可以对每个alert进行设置
有三个队列相关的设置
/** 设置 是否加入到队列 -> 格式: .LeeQueue(YES) */
@property (nonatomic , copy , readonly ) LEEConfigToBool LeeQueue;
/** 设置 优先级 -> 格式: .LeePriority(1000) */
@property (nonatomic , copy , readonly ) LEEConfigToInteger LeePriority;
/** 设置 是否继续队列显示 -> 格式: .LeeContinueQueue(YES) */
@property (nonatomic , copy , readonly ) LEEConfigToBool LeeContinueQueueDisplay;
使用LeeContinueQueueDisplay
设置暂停的效果
当该Alert/ActionSheet关闭后 继续显示队列中的其他弹窗
.LeeContinueQueue(YES)
当该Alert/ActionSheet关闭后 不继续显示队列中的其他弹窗 (相当于暂停了), 然后你可以通过手动调用+ (void)continueQueueDisplay;
来继续显示
.LeeContinueQueue(NO)
这个暂停 只是 暂停 当前弹窗到队列中显示?
我一直理解的是:当前即将要弹起来的弹窗可能不会加入队列,但是优先级又没有队列中优先级最高的那个弹框优先级高。 此时,我希望让当前弹框显示(如果优先级没有队列中优先级最高的那个弹框高,框架不会让其显示),那么我可以暂停队列,然后让当前弹窗展示。
请问我这么理解不对吗?
如果理解正确,我是否可以这么做:
在弹当前弹框时,先查询一下弹框队列是否为空:
/** 队列是否为空 */
+ (BOOL)isQueueEmpty;
(1) 如果不为空,我手动暂停该队列(这里缺少一个全局暂停队列的函数):
/** 暂停队列显示 */
+ (void)suspendQueueDisplay;
如果队列为空,就不用管了。
(2) 当前弹框,相关操作执行完毕了,再次查询队列是否为空,不为空,继续队列:
/** 继续队列显示 */
+ (void)continueQueueDisplay;
另外,最近在对LEEAlert做工具类封装, 探求不从外界传一个 LeeContinueQueue(YES) 来暂停队列,因为发现既然全局提供了继续队列的函数,为啥就不提供暂停的函数呢?这么设计是基于什么考虑呢?
首先不是所有弹窗都有队列的需求, 也不是所有队列的弹窗都有暂停的需求, 你可以看到默认是.LeeContinueQueue(YES), 也就是说 如果你有一堆弹窗需要队列且队列显示可能会因为某种原因中断 然后又因某种原因继续显示的, 这就可以很好的满足你的需求了
按照你的需求 你封装工具类 需要封装暂停功能, 那么可以把你封装的所有弹窗设置.LeeContinueQueue(NO)
, 然后强制调用+ (void)continueQueueDisplay;方法. 效果一样的
刚才测试了一下,发现了一些问题,是我理解不对么?
使用场景如下:
场景一:
(1) 先run一堆弹框,都加入队列;
(2) 最后在run一个不加入队列的弹框,但在当前弹框设置暂停当前队列。
测试结果:
发现最后run的弹框只要优先级低于队列弹框优先级最高的那个弹框,暂停队列不起作用; 并且,最后run的这个弹框,连展示的机会都没有~
场景二:
(1) 先run一堆弹框,都加入队列;
(2) 最后在run一个加入队列的弹框,但在当前弹框设置暂停当前队列。
测试结果:
不管最后run的弹窗优先级设置高低,暂停队列,能起作用,是正常的~
我描述的有些问题, 总结一下
优先级和队列是两个东西, 他俩可以组合
当前如果有一个显示中的弹窗, 此时要显示一个新的弹窗:
(都无队列)如果新弹窗优先级比正在显示的高 则正在显示的弹窗会被关闭, 然后显示新的弹窗.
(都无队列)如果新弹窗优先级比正在显示的低 则正在显示的弹窗不会被关闭, 新的弹窗也不会显示.
(都有队列)如果新弹窗优先级比正在显示的高 则正在显示的弹窗会被关闭, 然后显示新的弹窗, 新弹窗关闭后 继续显示低优先级的弹窗
(都有队列)如果新弹窗优先级比正在显示的低 则正在显示的弹窗不会被关闭, 新弹窗会在队列中等待, 正在显示的弹窗关闭后 继续显示低优先级的弹窗.
有无队列的关键区别在于: 被关闭后是否还能继续被显示.
关于队列继续属性的理解不是很清楚
大佬,想知道队列继续属性(LeeContinueQueueDisplay)的设置,是针对当前即将要弹的弹框吗? 如果,我想要弹当前弹框之前,先暂停队列,然后等当前弹窗要执行的某些任务执行完毕后,再继续队列。
有没有全局设置的办法?
目前只看到 :
没看到全局设置暂停队列的方法,能不能全局加一个: