-
Notifications
You must be signed in to change notification settings - Fork 0
UI框架
紫雪 edited this page Jan 8, 2020
·
1 revision
这一次的UI框架,一改之前的作风,之前都是使用Mono派生类来制作的,这次我脱离了Mono机制,使用了原生类作为基类来控制UI内容,要说思路,整体是这么一个样子的。
首先,我们打开界面,需要连带打开父亲界面;
接着,打开界面可能会产生关闭别的界面操作;
然后,关闭界面;
最后,产生回退界面。
整体上就是这么一个思路。来看看使用方法。
public void OpenUI(string name, UILayer layer, params object[] arms)
public IUIModelControl GetShowUI(string name, UILayer layer = UILayer.None)
public void RecoveryUIModel(IUIModelControl ui, bool manager)
public void AddUpdate(IUIModelControl control)
public void ClearAllUI()
整个框架当中,提供出来的就这么几个接口,按照名字不难知道是什么样子的。
打开界面;
获取界面;
回收界面;
添加监听界面;
清理所有界面;
其中,添加监听界面这个内容,主要是因为我们界面是集成非mono类来的,所以它的更新需要别人来启动他,所以我们通过管理类来进行了统一的控制更新,也在一定范围上使用内存换取了运行速度吧。
最后说一下详细的思路。
根据之前的资源加载,预防异步加载出现界面打开顺序的问题,我们维持了一个列表,其实应该叫队列更加准确,但是这个内容我们一样需要中间删除,所以使用的依然是列表,原理就是打开界面的时候,我们压入这个列表当中,从列表第一个开始打开界面直到最后。
然而我们打开关联的界面,也就是这个界面的父界面的时候,我们使用的是内部关联方法,因为是异步加载,使用的都是委托回调内容,我们把数据存储进入委托当中,当委托加载完成之后,我们最后才打开最开始需要打开的界面,当这些内容都已经完成之后,我们才会去索引列表的下一个内容。打开最开始需要打开的界面时,我们还需要去做关闭界面的操作,这里的关闭界面指的是关闭别的界面操作。
比如:
我有一个界面A,他关联的界面是B、C,关闭排除界面是D,现在存在的界面有E、F和D,这个时候我们打开A界面,那么当A界面完全打开之后,我们只剩下D、B、C、A四个界面,其中E和F是因为A的打开最后给关闭掉了的。这就是这次设计当中打开界面连带打开父亲界面和关闭不相关的界面。
当然,上面这些内容,都是可以控制的,比如我不关闭别人,不被别人关闭,不参与回退界面等等。
其实这里面的回退界面没有用处,为什么呢,是因为我们的界面没有隐藏的这个概念,所以说回退界面就失去作用了,设计的原意是说关闭某些界面,某些界面隐藏,所以回退才有效果,如果没有这个内容,那么回退列表也就失去效果了。
添加监听和清理,这些都没有什么特别的内容了。