Mic*_*vis 11 apache-flex flash events components
确定Flex/Flash中的组件是否显示在用户屏幕上的最佳方法是什么?我正在寻找类似于Java的Component.isShowing()方法.
在show和hide事件触发的知名度,这似乎是一个ViewStack组件的第一后裔工作,但没有进一步下跌的显示树.
小智 11
...或避免递归:
public static function isVisible(obj:DisplayObject):Boolean
{
while (obj && obj.visible && obj !== Application.application)
{
obj = obj.parent;
}
return obj && obj.visible;
}
Run Code Online (Sandbox Code Playgroud)
您想检查组件属性是否为true,这是否适用于DisplayList中组件的所有父项,我是否正确?
public static function isVisible(c : UIComponent) : Boolean {
if (c == null) return false;
if (c is Application) return c.visible;
return c.visible && isVisible(c.parent);
}
Run Code Online (Sandbox Code Playgroud)
UIComponent.visible不一定对于visible = false的对象的子节点有效.来自文档:
"在任何一种情况下,对象的子节点都不会发出show或hide事件,除非该对象专门编写了一个实现来执行此操作."
我写了一个示例应用程序,证实这是真的.你可以做的是走上显示列表检查父母可见是否为假.基本上"可见"会产生误报,但不应该给出假阴性.这是我放在一起的快速实用程序:
package
{
import flash.display.DisplayObject;
import mx.core.Application;
public class VisibilityUtils
{
public static function isDisplayObjectVisible(obj : DisplayObject) : Boolean {
if (!obj.visible) return false;
return checkDisplayObjectVisible(obj);
}
private static function checkDisplayObjectVisible(obj : DisplayObject) : Boolean {
if (!obj.parent.visible) return false;
if (obj.parent != null && !(obj.parent is Application))
return checkDisplayObjectVisible(obj.parent);
else
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我没有做过比这更简单的测试,但它应该让你开始.
| 归档时间: |
|
| 查看次数: |
11769 次 |
| 最近记录: |