1

私はCoreAnimation、CALayer、およびこれらすべてのものに完全に慣れていないので、我慢してください。ラベルとして使用するカスタムNSTextFieldがあります。コンテンツがその位置をアニメーション化するようにしたいので、ラベルの幅に対して長すぎる場合は、文字列全体が表示されます。これで、アニメーション自体は正常に機能しています。私はこれをCABasicAnimationで実装しました:

- (void)awakeFromNib {    
    CALayer *newLayer = [CALayer layer];

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
    [animation setFromValue:[NSValue valueWithPoint:NSMakePoint(0, 0)]];
    [animation setToValue:[NSValue valueWithPoint:NSMakePoint(-self.attributedStringValue.size.width, 0)]];
    [animation setDuration:5.0];
    [animation setRepeatCount:HUGE_VAL];

    [newLayer addAnimation:animation forKey:@"position"];

    [self setLayer:newLayer];
    [self setWantsLayer:YES];

}

唯一の問題は、drawRect:メソッドが画面に表示されているものだけを描画することです。そのため、drawRect:メソッドをオーバーライドして、属性付きの文字列全体を描画すると思いました。しかし、これを行うと、何も描画されません...誰かが私を正しい方向に向けることができますか?

ありがとうございました!

4

2 に答える 2

0

一般に、特にアニメーション化するCALayerオブジェクトの場合は、可能な限りdrawRectをオーバーライドしないようにします。それは本当に恐ろしいパフォーマンスにつながる傾向があります。

「drawRect:メソッドは画面に表示されているものだけを描画する」とはどういう意味ですか?

現在表示されている文字列の部分のみを描画しますか?

于 2012-08-20T19:18:07.037 に答える
0

私はNSTimerを使用することになりました。最も美しい解決策ではありませんが、少なくともそれは機能します。

于 2012-10-21T13:12:53.733 に答える