5

私は現在、プロジェクトに最終的なタッチをかけています。アニメーションsetHidden:NSViewでCocoaバインディング経由

現在のところ、UIロジックの多くは(すべてではないが)ココアバインディングに依存しています。 ユーザーインターフェイス要素(ラベル、ボタンなど)には、「隠し」バインドが定義されているものがあります。特定のイベントがトリガされると、これらの要素の可視性がトグルされます。

私は可視性の変更をアニメーション化しようとしています(不透明度をアニメーション化して、おそらくスケールをアニメーション化しています)。これは、関連するレイヤーのプロパティを設定したり、レイヤーにアニメーションを追加したりするなど、さまざまな方法で簡単に行うことができます。しかし、私はバインディングの振る舞いに完全に頼っているので、実際にはできませんこれは直接です。

私は、関連する要素のキーkCAOnOrderInkCAOnOrderOutのためのアクションを定義することにより、レイヤのアクションを使用して実装を試してみましたが、setHidden:が最も可能性の高いNSView代わりのCALayerでトリガされているとして、それは本当に、動作しませんでした - - それは意味をなさない

私の質問は、setHidden:がCocoa Bindingsによって呼び出されているときに、どのようにNSViewでsetHidden:をアニメーション化しますか?

ありがとうございます。

答えて

0

アニメーションsetHiddenは、オンまたはオフのため視覚効果がありません。可視性をアニメートする場合は、代わりにsetAlpha(またはレイヤーのsetOpacity)を使用します。これらは0.0と1.0の間の値をとります。状態情報のために隠しフラグを設定する必要がある場合は、-performSelector:withObject:afterDelayを呼び出して、に必要なものを隠し値に設定するセレクタに渡します。のアニメーションが完了した後。代わりに、アニメーションが終了してからsetHiddenを呼び出すときに、明示的なアニメーションが呼び出されるようにデリゲートを設定することもできます。

+0

は 'setHidden:'のCALayer *上*アニメーション可能です。順序入/出キーのデフォルトのアクションでは、実際にレイヤーの不透明度をアニメートさせるCATransitionを使用します。 – phluid

+0

はい。隠しは、値を変更できるという意味でアニメーション可能ですが、可能な値は2つだけです。 Core Animationは、中間の値を補間します。非表示の場合は、YESまたはNOのいずれかです。しかし、あなたがしたいように聞こえるように聞こえるのは、setHiddenが呼び出されたときに自動的にフェードアニメーションをトリガーすることです。あれは正しいですか?もしそうなら、私はあなたがバインディングだけでそれを行うことはできないと思う。おそらく、コードを書く必要があります。アルファプロパティにバインドして、0または1のいずれかに設定することができます。探していると思われるかもしれませんが、どのように接続しているかわかりません。 –

0

NSViewAnimationをご覧ください。任意のNSViewを取り、フレーム、サイズ、または可視性をアニメートできます。

2

これは、NSViewのをフェードアウトします...

[[someView animator] setAlphaValue:0.0f]; 
関連する問題