在交互模式之间切换时,滚动条消失了吗?

时间:2015-10-12 04:44:56

标签: actionscript-3 flex flex4

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

这似乎是一个错误。我很快就会发布一个例子,但基本上只是在模式之间切换:

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。

1 个答案:

答案 0 :(得分:0)

看起来它与某些皮肤部件被重复使用但未被重置有关。来自Scroller design documents

  

Scroller第一次检测到它需要显示ScrollBar   将确保一个存在

     

Scroller检测到它需要在触摸交互模式开始时显示ScrollBar,或者在交互模式下显示皮肤连接时间   什么都不是&#34;触摸&#34;

     

如果旧的ScrollBar部件已经存在,Scroller将使用其中一个ScrollBar将从工厂部件创建实例,将实例设置为相应的非工厂部件并调用   partAdded()为它。

     

例如,Scroller将从中创建一个实例   horizo​​ntalScrollBarFactory部分并将设置horizo​​ntalScrollBar   调用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);
}