태그 보관물: TextField

TextField.maxScrollV not updated when TextField.height changed

현재 진행중인 작업에서 텍스트 편집 기능을 만들다가 텍스트필드 관련 플래시 플레이어 버그를 하나 발견했습니다. 텍스트필드에서 Event.CHANGE 이벤트가 발생했을 때, 텍스트필드의 높이가 변하는 경우 scrollV나 maxScrollV값이 제때 반영되지 않습니다.
만일 CHANGE 이벤트를 사용하여 텍스트 스크롤바와 같은 기능을 개발한다고 하면, 이로 인해서 오류가 발생할 여지가 생기는 것이죠. 그래서, 일단 이 내용을 어도비에 버그로 신고해 두었습니다.
http://bugs.adobe.com/jira/browse/FP-7234

어도비의 담당자도 문제 재현했다고 코멘트를 단 것으로 보아, 언제가 될지는 모르지만, 향후 플래시 플레이어 업데이트에서 수정 될 것으로 기대됩니다.

그렇다고 그때까지 마냥 기다릴 수만은 없으므로, 이 문제를 우회하는 방법도 공유합니다. 해결책은 매우 간단한데, TextField.height와 TextField.textHeight를 호출해 주기만 하면 됩니다.
아래 샘플의 첫 번째 텍스트필드를 보면, 텍스트 편집 시에 엔터키를 눌러 텍스트필드의 크기가 변했을 때 scrollV와 maxScrollV가 제대로 반영되지 않는 것을 볼 수 있습니다.

세 번째의 경우처럼, height와 textHeight를 호출해 주기만 하면 두 속성이 모두 정상적으로 변경된 것을 확인할 수 있습니다. 아마도 스크롤 관련 값을 업데이트하는 코드가 높이를 설정하는 코드에 들어가 있기 때문인 것으로 추측되네요.
두 번째와 같이 height나 textHeight 중 하나만 호출해도 오동작을 하므로, 꼭 두 개의 속성을 함께 호출해 주어야 합니다.

3D rotation sample.

RotationX, rotationY 및 rotationZ를 이용하여 무비클립을 3차원으로 회전시키는 샘플 파일을 만들어 봤습니다. Use rotationZ rather than rotation on TextField 포스트에도 언급했듯이, 텍스트필드도 정상적으로 화면에 표시가 됩니다.

선을 드래그하면 X, Y 및 Z 축 한 가지만 회전되고, 면을 드래그하면 X축과 Y축을 동시에 제어할 수 있습니다. 마찬가지로 더블클릭하면 해당하는 속성만 0으로 초기화됩니다.

나중에 이미지 편집기 기능 개선할 때 적용시켜야겠네요.

I made a sample movie rotating a movieclip in 3D space with rotationX, rotationY and rotationZ. Like I said on Use rotationZ rather than rotation on TextField, the textfield is displayed properly.
Drag on the blue lines or the gray circle to rotate the movieclip.
ムービクリプを3次元で回転する簡単なサンプルを作って見ました。Use rotationZ rather than rotation on TextField ポストで言った通り、テキストフィルドも正しく表れるんです。
青いラインやグレー円をドラグすると、ムービクリプを回転出来ます。

Source file is here.

Use rotationZ rather than rotation on TextField.

플래시 플레이어 9 이전 버전에서는, 폰트를 임베드하지 않은 다이나믹 또는 인풋 텍스트필드를 회전하거나 투명도를 적용하면 텍스트필드의 화면에 표시되지 않는 문제가 있었습니다. 그래서 어쩔 수 없이 폰트를 임베드 시키거나, 스테이틱 텍스트로 사용했어야 했죠.

그런데 플래시 플레이어 10에서는 텍스트필드에 투명도를 주거나 회전시키는 것이 가능합니다. 문제는 rotation을 이용하여 회전시키면 이전과 마찬가지로 화면에 표시되지 않는다는 것입니다. 대신 rotationZ를 사용하여 회전하면 문제없이 디스플레이 됩니다.

In Flash Player 9 or older version, dynamic or input textfields do not displayed on screen if they are rotated or applied transparency. So you have to embed a font or have to use static textfields.

In Flash Player 10, you can rotate or apply transparency to textfields without embeding any font. But you have to use rotationZ not rotation property.

Flash Player 9と以前のバージョンで、テキストフィルドを回転するとか、透明度を適用すると、そのテキストフィルドが画面に表れなかったんです。だからフォントを挿入する、或はステーチックテキストフィルドを使用するしかないんです。

Flash Player 10では、フォントを挿入しなくても、テキストフィルドを回転するのが出来ます。だが、rotationじゃなくrotationZ属性を使うんです。