确定Flex/Flash中的组件是否显示在用户屏幕上的最佳方法是什么?我正在寻找与Java的Component.isShowing()方法类似的方法。
show
和hide
事件触发以获得可见性,这似乎适用于ViewStack组件的第一个后代,但不适用于显示树的更下方。
确定Flex/Flash中的组件是否显示在用户屏幕上的最佳方法是什么?我正在寻找与Java的Component.isShowing()方法类似的方法。
show
和hide
事件触发以获得可见性,这似乎适用于ViewStack组件的第一个后代,但不适用于显示树的更下方。
6条答案
按热度按时间s2j5cfk01#
..。或者避免递归:
5lhxktic2#
您想要检查组件属性Visible是否为真,并且这是针对DisplayList中组件的所有父项的,我说的对吗?
3b6akqbq3#
对于Visible=False的对象的子级,UIComponent.Visible不一定有效。从文档中:
“在这两种情况下,对象的子级都不会发出SHOW或HIDE事件,除非该对象专门编写了这样做的实现。”
我编写了一个样例应用程序,证实了这一点。您可以做的是遍历显示列表,检查父级上的Visible是否为False。基本上“可见”给出了假阳性,但不应该给出假阴性。以下是我整理的一个快速实用程序:
我没有在这方面做过任何微不足道的测试,但它应该会让您开始使用。
qq24tv8q4#
虽然这看起来很奇怪,但既然您提到了它,我不相信有一个简单的测试来确定一个组件是否真的像Component.isShowing()所暗示的那样在屏幕上可见。
此外,在默认情况下,显示和隐藏事件不会冒泡,因此,如果您希望在ViewStack容器的子代中得到可见性更改的通知,则需要显式侦听它们。实现细节将根据您追求的是哪种行为而有所不同,但举一个简单的例子:
..。一旦标签的可见属性被绑定到其父面板,您将看到每个标签Fire的显示和隐藏事件。希望这说明了这一点;您可以以最适合您的应用程序的方式对其进行扩展。祝好运!
g6ll5ycj5#
我正试图以一种可重复使用的方式获得相同的信息。我几乎找到了一种使用getObjectsUnderPoint()的方法--它返回z有序的粒子点下的对象(即使它们不是兄弟,例如ViewStack、Popup、ECC)。
基本上,我在舞台的特定点下打开最上面的显示对象,然后在显示对象层次结构中向上移动以找到测试的对象。如果我找到它,该对象就是可见的(层次结构中不可见的对象应该已经被getObjectsUnderPoint调用过滤掉了)。
这里的问题是,你必须使用对象的非透明点(在我的例子中,我使用了5个像素的偏移量,因为边界变圆了),否则它将不会被这个函数拾取。
有什么改进的办法吗?
科斯玛
2jcobegt6#
这就是你真正需要的。“Application.app”检查是徒劳的。