dzkcc-mflow 0.0.42 → 0.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/libs/BaseView.d.ts +0 -2
- package/dist/libs/BaseView.js +0 -2
- package/dist/libs/UIManager.d.ts +7 -4
- package/dist/libs/UIManager.js +42 -26
- package/dist/mflow-tools.zip +0 -0
- package/package.json +1 -1
package/dist/libs/BaseView.d.ts
CHANGED
|
@@ -3,8 +3,6 @@ import { IView, IEventManager, ICocosResManager } from '../core';
|
|
|
3
3
|
export declare abstract class BaseView extends Component implements IView {
|
|
4
4
|
/** @internal */
|
|
5
5
|
private readonly __isIView__;
|
|
6
|
-
/** @internal */
|
|
7
|
-
private __group__;
|
|
8
6
|
private _eventProxy?;
|
|
9
7
|
private _eventHandlers;
|
|
10
8
|
protected get event(): IEventManager;
|
package/dist/libs/BaseView.js
CHANGED
package/dist/libs/UIManager.d.ts
CHANGED
|
@@ -53,10 +53,7 @@ export interface UIPreloadConfig {
|
|
|
53
53
|
/** 预加载延迟(毫秒) */
|
|
54
54
|
delay?: number;
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
__isIView__: boolean;
|
|
58
|
-
}
|
|
59
|
-
type ICocosView = IInternalView & Component;
|
|
56
|
+
type ICocosView = IView & Component;
|
|
60
57
|
declare abstract class CcocosUIManager implements IUIManager {
|
|
61
58
|
getTopView(): IView | undefined;
|
|
62
59
|
open<T extends keyof UIRegistry>(viewClass: T, args?: UIOpenOptions): Promise<InstanceType<UIRegistry[T]>>;
|
|
@@ -121,6 +118,12 @@ export declare class UIManager extends CcocosUIManager {
|
|
|
121
118
|
* 获取所有活跃的视图节点(排除遮罩节点)
|
|
122
119
|
*/
|
|
123
120
|
private _getActiveViews;
|
|
121
|
+
/**
|
|
122
|
+
* 从给定的Node对象上获得IView类型的脚本
|
|
123
|
+
* @param target
|
|
124
|
+
* @returns
|
|
125
|
+
*/
|
|
126
|
+
private _getIViewFromNode;
|
|
124
127
|
/**
|
|
125
128
|
* 通过prefab创建Node对象
|
|
126
129
|
* @param args
|
package/dist/libs/UIManager.js
CHANGED
|
@@ -184,6 +184,31 @@ class UIManager extends CcocosUIManager {
|
|
|
184
184
|
_getActiveViews() {
|
|
185
185
|
return UIRoot.children.filter(child => child !== _uiMask && child.name !== '__UIMask__');
|
|
186
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* 从给定的Node对象上获得IView类型的脚本
|
|
189
|
+
* @param target
|
|
190
|
+
* @returns
|
|
191
|
+
*/
|
|
192
|
+
_getIViewFromNode(target) {
|
|
193
|
+
const comps = target.components;
|
|
194
|
+
for (let i = 0; i < comps.length; i++) {
|
|
195
|
+
const comp = comps[i];
|
|
196
|
+
if ("__isIView__" in comp && comp.__isIView__) {
|
|
197
|
+
/**
|
|
198
|
+
* 这里需要注意:
|
|
199
|
+
* 1、_view2group中存储的是通过getComponent获取的。
|
|
200
|
+
* 2、这里是通过所node.components获取的。
|
|
201
|
+
* 3、这俩种方式获得的引用可能是不同的(_view2group.get(comp) == undefined)
|
|
202
|
+
* 4、所以这里需要通过comp.constructor来获取视图类型,然后通过getComponent获取引用,确保一致。
|
|
203
|
+
* 5、但我选择了_view2group使用node当作key,这样更稳定。
|
|
204
|
+
*/
|
|
205
|
+
// const viewType = comp.constructor as new () => ICocosView;
|
|
206
|
+
// return target.getComponent(viewType) as ICocosView;
|
|
207
|
+
return comp;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
console.warn(`No view found in ${target.name}`);
|
|
211
|
+
}
|
|
187
212
|
/**
|
|
188
213
|
* 通过prefab创建Node对象
|
|
189
214
|
* @param args
|
|
@@ -282,7 +307,7 @@ class UIManager extends CcocosUIManager {
|
|
|
282
307
|
if (!view) {
|
|
283
308
|
return;
|
|
284
309
|
}
|
|
285
|
-
const group = this._view2group.get(view);
|
|
310
|
+
const group = this._view2group.get(view.node);
|
|
286
311
|
if (group && group.trim() != "") {
|
|
287
312
|
// 栈式UI:调用 _internalCloseAndPop 来处理返回逻辑
|
|
288
313
|
this._internalCloseAndPop(group, false);
|
|
@@ -387,15 +412,7 @@ class UIManager extends CcocosUIManager {
|
|
|
387
412
|
}
|
|
388
413
|
// 获取最后一个视图节点(最顶层)
|
|
389
414
|
const target = activeViews[activeViews.length - 1];
|
|
390
|
-
|
|
391
|
-
for (let i = 0; i < comps.length; i++) {
|
|
392
|
-
const comp = comps[i];
|
|
393
|
-
if ("__isIView__" in comp && comp.__isIView__) {
|
|
394
|
-
return comp;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
console.warn(`No view found in ${target.name}`);
|
|
398
|
-
return undefined;
|
|
415
|
+
return this._getIViewFromNode(target);
|
|
399
416
|
}
|
|
400
417
|
//----------------------------------------------------------
|
|
401
418
|
_load(viewKey) {
|
|
@@ -499,7 +516,7 @@ class UIManager extends CcocosUIManager {
|
|
|
499
516
|
top.node.removeFromParent();
|
|
500
517
|
}
|
|
501
518
|
// 标记视图所属组并入栈
|
|
502
|
-
this._view2group.set(view, group);
|
|
519
|
+
this._view2group.set(view.node, group);
|
|
503
520
|
stack.push(view);
|
|
504
521
|
addChild(view.node);
|
|
505
522
|
this._adjustMaskLayer();
|
|
@@ -531,8 +548,8 @@ class UIManager extends CcocosUIManager {
|
|
|
531
548
|
try {
|
|
532
549
|
// 移除当前栈顶视图
|
|
533
550
|
const removed = stack.pop();
|
|
551
|
+
this._view2group.delete(removed.node);
|
|
534
552
|
yield this._remove(removed, destroy);
|
|
535
|
-
this._view2group.delete(removed);
|
|
536
553
|
// 恢复上一个视图
|
|
537
554
|
const top = stack[stack.length - 1];
|
|
538
555
|
if (top) {
|
|
@@ -612,6 +629,12 @@ class UIManager extends CcocosUIManager {
|
|
|
612
629
|
console.warn(`No stack found for group ${group}`);
|
|
613
630
|
return;
|
|
614
631
|
}
|
|
632
|
+
//forEach 方法会按插入顺序遍历所有 初始存在的元素,即使元素在遍历过程中被删除,也不会影响剩余元素的遍历(已删除的元素不会被重复遍历,但未遍历的元素仍会被处理)。因此可直接在回调中判断并删除目标元素。
|
|
633
|
+
this._view2group.forEach((value, key, map) => {
|
|
634
|
+
if (value === group) {
|
|
635
|
+
map.delete(key);
|
|
636
|
+
}
|
|
637
|
+
});
|
|
615
638
|
// 清空栈中所有视图,不播放动画
|
|
616
639
|
while (stack.length > 0) {
|
|
617
640
|
const view = stack.pop();
|
|
@@ -619,9 +642,6 @@ class UIManager extends CcocosUIManager {
|
|
|
619
642
|
this._remove(view, destroy, true);
|
|
620
643
|
}
|
|
621
644
|
}
|
|
622
|
-
for (const view of this._view2group.keys()) {
|
|
623
|
-
this._view2group.delete(view);
|
|
624
|
-
}
|
|
625
645
|
// 调整遮罩层级
|
|
626
646
|
this._adjustMaskLayer();
|
|
627
647
|
}
|
|
@@ -630,19 +650,15 @@ class UIManager extends CcocosUIManager {
|
|
|
630
650
|
*/
|
|
631
651
|
_internalCloseAll(destroy) {
|
|
632
652
|
const activeViews = this._getActiveViews();
|
|
633
|
-
for (const
|
|
634
|
-
const
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
this._remove(comp, destroy, true);
|
|
639
|
-
break;
|
|
640
|
-
}
|
|
653
|
+
for (const target of activeViews) {
|
|
654
|
+
const comp = this._getIViewFromNode(target);
|
|
655
|
+
if (comp) {
|
|
656
|
+
this._remove(comp, destroy, true);
|
|
657
|
+
break;
|
|
641
658
|
}
|
|
642
659
|
}
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
}
|
|
660
|
+
// 情况所有UI组引用
|
|
661
|
+
this._view2group.clear();
|
|
646
662
|
// 清空所有栈
|
|
647
663
|
this._groupStacks.clear();
|
|
648
664
|
// 调整遮罩
|
package/dist/mflow-tools.zip
CHANGED
|
Binary file
|
package/package.json
CHANGED