2013-09-30 33 views
0

我正在开发一个UI项目,它要求自动调整大小按钮(基于标签长度)具有用于键盘或控制器焦点的焦点指示图形。这个图形显然必须按照您的想象与家长进行缩放。scale9grid在子动画片上运行

这会导致问题;父剪辑9剪切,并且该剪切不落入该剪辑的子Sprites/MovieClip。重点指标必须是无障碍财产,因为它必须能够打开或关闭。

目前唯一能够成像的解决方案是scale9Grid的一个非常程式化的重新实现,其中我将焦点指示符分为9,并在父宽度/高度/ scaleX/scaleY被更改时改变9个部分的属性。这也意味着当该按钮集中时打开和关闭所有9个部件

有没有比这更好的方法?

回答

1

我建议你创建一些包装类AppButton(或者可能是你已经有一个,因为你必须通过标签功能的一些调整大小)用方法setSkin(skin:MovieClip)(其中皮肤是MovieClip从库)和widthheight覆盖的制定者,所以你可以在这里实现调用方法arrange()中的皮肤调整大小逻辑,每次调用宽度或高度都会改变。儿童与其他影片剪辑(集中在你的情况下边框),所以不要使用scale9Grid属性的孔皮肤,但集大小直接与集儿童scale9Grid属性他们以及, -

皮肤可能会很复杂所以你arrange方法是这样的:

private function arrange():void 
{ 
    var child:DisplayObject; 
    for(var i:int = 0; i < numChildren; i++) 
    { 
     child = getChildAt(i); 
     child.width = width; 
     child.height = height; 
    } 
} 

这也是值得做的项目按钮的外观一个皮肤格式,所以你可以使用一个包装的所有按钮。

稍后,您可以添加更多功能到这个AppButton - 切换鼠标事件的视图状态,设置文本标签,动画皮肤等。

这种方法对我来说多年工作,我们有基地ToggleButtonLabelButton extends ToggleButton类,并通过自定义皮肤分析和排列扩展它们在每个项目。

+0

这实际上听起来像是一种非常聪明的方式来处理按钮和组件。我一定会在未来实施这个。目前我被卡住了一个糟糕的API,但我正在努力改写它。 – Glitcher