scale9grid在儿童movieclip上运行

时间:2013-09-30 10:40:59

标签: actionscript-3 scaling movieclip

我正在开发一个UI项目,该项目要求自动调整大小按钮(基于标签长度)具有键盘或控制器焦点的焦点指示图形。这个图形显然必须与您想象的父级一致。

这会导致问题;父剪辑是9sliced,并且切片不会落到此剪辑的子Sprites / MovieClips。焦点指示器必须是可访问的属性,因为它必须能够打开或关闭。

目前唯一可以成像的解决方案是scale9Grid的极其程序化的重新实现,其中我将焦点指示器分成9并在父宽度/高度/ scaleX / scaleY改变时改变9个部分的属性。这也意味着当该按钮聚焦时打开和关闭所有9个部分

还有比这更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我建议您使用方法AppButton创建一些包装类setSkin(skin:MovieClip)(或者您可能已经拥有一个,因为您有一些通过标签功能调整大小)(其中skin是您的MovieClip ({1}}和width覆盖了setter,因此你可以在方法height中实现皮肤大小调整逻辑,每次调整宽度或高度都会被调整。

皮肤可能很复杂 - 与儿童中的其他影片剪辑(在您的情况下为焦点边框),因此不要将scale9Grid用于孔皮肤,但是将尺寸直接设置为具有scale9grid的子项以及< / em>,因此您的arrange()方法可以是这样的:

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; } } 添加更多功能 - 切换鼠标事件视图状态,设置文本标签,动画皮肤等。

这种方法适用于我多年,我们有基类AppButtonToggleButton类,并在每个项目中使用自定义皮肤解析和排列扩展它们。