我有一个在触摸和鼠标交互之间切换的应用程序。根据需要,我在两者之间进行切换。然而,当我从触摸切换到鼠标时,滚动条消失了。
它看起来像一个bug。我很快会发布一个例子,但基本上只是在模式之间切换:
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。
看起来它与一些皮肤部分被重用但不被重置有关。从卷轴设计文档:
第一次Scroller检测到它需要显示一个ScrollBar将确保存在
scroll检测到需要在触摸交互模式开始时显示ScrollBar,或者在交互模式下的皮肤附着时显示ScrollBar
<触摸>如果旧的ScrollBar部件已经存在,则ScrollBar将使用该部件,否则ScrollBar将从工厂部件创建一个实例,将该实例设置为相应的非工厂部件并调用partAdded()
例如,滚动将创建一个实例从horizontalScrollBarFactory部分,并将设置horizontalScrollBar
触摸>
我看了所有的滚动条部分和规模,可见和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);
}