我正在移除UIComponent
,但最后一部分可见。
它仅在我移动鼠标或其他东西时重绘。我试图在其父级validateNow()
上尝试setTimeout(validateNow, 100)
,但它没有帮助。当我通过setTimeout
调用它时,似乎这些工件很少显示,但在所有情况下都没有解决问题。请引导我某人阅读有关validateNow()
,其工作原理以及如何正确制作这些内容的信息。
代码如下:
protected var bubble: SpeechBubble;
// creation
bubble = new SpeechBubble();
map.addChild(bubble);
//...
// removing
bubble.visible = false;
map.removeChild(bubble);
map.validateNow();
setTimeout(map.validateNow, 100);
地图是Google Map for Flex。
答案 0 :(得分:2)
发生这种情况的原因是因为您正在搞乱谷歌地图绘图逻辑。您应该查看Google提供的developer guide。它在controls section中提到要创建自定义控件,您需要扩展ControlBase
。
答案 1 :(得分:1)
您可能需要在调用validateNow()之前触发失效。现在调用validate会导致代码检查是否设置了任何失效标志(属性,显示列表或大小),然后为每个调用调整失效的适当方法(commitProperties,updateDisplayList,measure)喜欢它只是没有清楚地调用图形或重新绘制,所以你可能需要调用
bubble.invalidateDisplayList();
bubble.validateNow();
也希望其中一个解决方案适合你,一般来说在给定时间强制验证通常不是一个好主意,因为框架组件应该在其生命周期中触发适当的失效和后续验证,但我不能说我自己没有这样做:)。
肖恩
答案 2 :(得分:-2)
您可以使用 includeInLayout 属性
bubble.visible = false;
bubble.includeInLayout = false;
示例演示了此属性
希望有所帮助