在交互模式之间切换时滚动条消失



我有一个在触摸和鼠标交互之间切换的应用程序。根据需要,我在两者之间进行切换。然而,当我从触摸切换到鼠标时,滚动条消失了。

它看起来像一个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);
}

最新更新