3

私はNSTextFieldラベルとして文字列を示すを持っています。内容が大きすぎて一度に表示できない場合は、このラベルを右から左にアニメーション化したいと思います。

私はこれNSTimerまでこれを行ってきましたが、それは機能しますが、それはあまり良い解決策ではありません。ラベルはNSTextFieldCell、テーブルビューのに表示されます。それらはしばしば同期しなくなり、CPU/GPUリソ​​ースを大量に消費していると思います。

これを行う別の方法はありCore Animationますか?

あなたがここで見ることができるように、私はレイヤーでそれを試しました: CALayerとdrawRect

しかし、私もそれを機能させることができませんでした。

よろしくお願いします。

4

2 に答える 2

8

NSTextFieldの位置は、次のようなアニメーターで簡単にアニメーション化できます。

[[textField animator] setFrameOrigin:NSMakePoint(x,y)];

次のように「CATrancation」コードに埋め込むこともできます。

[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[[textField animator] setFrameOrigin:NSMakePoint(x,y)];
[CATransaction commit];

アニメーションデリゲートが必要な場合は、CABasicAnimationを使用できます

CABasicAnimation* animation = [CABasicAnimation animation];
animation.delegate = self;
NSDictionary *animations = [NSDictionary dictionaryWithObjectsAndKeys:animation,@"frameOrigin",nil]; 
[textField setAnimations:animations];
[[textField animator] setFrameOrigin:NSMakePoint(x,y)];

デリゲートメソッドは

- (void)animationDidStart:(CAAnimation *)theAnimation;
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag;

テキストフィールドをマスクする必要がある場合は、他のNSViewに埋め込むだけです。

于 2012-11-29T22:43:59.397 に答える
1

まず、他の回答で提供されている機能の1つを使用してラベルをアニメーション化します。次に、重ならないように側面に別のビューを表示する場合は、次のことができます。

  • 希望する制限のあるサブビューにラベルを挿入します
  • ラベルが後ろに留まっていることを確認するには、bringSubviewtoFront:またはsendSubviewToBack:を使用します
于 2012-12-06T07:51:14.287 に答える