我有一个在触摸和鼠标交互之间切换的应用程序。根据需要,我在两者之间进行转换。但是,当我从触摸切换到鼠标时,滚动条消失了。
这似乎是一个错误。我很快就会发布一个例子,但基本上只是在模式之间切换:
scroller.setStyle("interactionMode", "touch");
// later:
scroller.setStyle("interactionMode", "mouse");
// scrollers are invisible after this call
示例代码:
<s:Scroller id="myScroller" top="20" right="40">
<s:Group height="100" width="100">
<s:Rect width="100" height="400">
<s:fill>
<s:SolidColor color="red"/>
</s:fill>
<s:stroke>
<s:SolidColorStroke color="blue" weight="2"/>
</s:stroke>
</s:Rect>
</s:Group>
</s:Scroller>
ActionScript:
protected function button1_clickHandler(event:MouseEvent):void
{
if (myScroller.getStyle("interactionMode")=="mouse") {
myScroller.setStyle("interactionMode", "touch");
}
else {
myScroller.setStyle("interactionMode", "mouse");
}
}
您必须单击滚动条并在其处于触摸模式时移动它,然后滚动条消失并且不再出现。
设置回鼠标后,visible和includeInLayout属性都为true。
答案 0 :(得分:0)
看起来它与某些皮肤部件被重复使用但未被重置有关。来自Scroller design documents:
Scroller第一次检测到它需要显示ScrollBar 将确保一个存在
Scroller检测到它需要在触摸交互模式开始时显示ScrollBar,或者在交互模式下显示皮肤连接时间 什么都不是&#34;触摸&#34;
如果旧的ScrollBar部件已经存在,Scroller将使用其中一个ScrollBar将从工厂部件创建实例,将实例设置为相应的非工厂部件并调用 partAdded()为它。
例如,Scroller将从中创建一个实例 horizontalScrollBarFactory部分并将设置horizontalScrollBar 调用partAdded()的那个实例。
我查看了所有滚动条部分和缩放,可见和includeInLayout都是真或1.因此,似乎唯一的方法是强制它重新创建部分。
以下是一个解决方法。它会更改皮肤,验证然后更改回原始皮肤:
if (myScroller.getStyle("interactionMode")=="mouse") {
myScroller.setStyle("interactionMode", "touch");
}
else {
myScroller.setStyle("interactionMode", "mouse");
myScroller.setStyle("skinClass", skins.MinimalScrollerSkin);
myScroller.validateNow();
myScroller.setStyle("skinClass", spark.skins.spark.ScrollerSkin);
}