NSAnimation
変更をアニメーション化できませんNSColor
。どうすればいいですか?
質問する
441 次
2 に答える
4
使用できますblendedColorWithFraction:ofColor:
。アニメーション メソッド (アニメーションの現在の値を処理しているメソッド [ない場合は、作成する]):
NSColor *startColor = [NSColor redColor];
NSColor *targetColor = [NSColor blueColor];
float progress = [animation currentValue];
NSColor *currentColor = [startColor blendedColorWithFraction:progress ofColor:targetColor];
編集:
できることは、 のサブクラスを作成することですNSAnimation
。サブクラスは、setCurrentProgress:
メソッドをオーバーライドして、アニメーションの進行状況を判断するだけです。アニメーションの残りの部分は、まったく同じ方法で構成できます。このシナリオでは、プロトコルはやり過ぎかもしれませんが、サブクラス化NSColor
されたアニメーションに、アニメーションを作成したクラス インスタンスに戻すための専用の方法を提供します。
@protocol MyAnimationTarget
- (void) setColorOfSomething:(NSColor *);
@end
@interface MyAnimation : NSAnimation
@property id<MyAnimationTarget> target;
@property NSColor *color1;
@property NSColor *color2;
@end
@implementation MyAnimation
@synthesize target = _target;
@synthesize color1 = _color1;
@synthesize color2 = _color2;
- (void) setCurrentProgress:(NSAnimationProgress) d
{
[super setCurrentProgress:d];
NSColor *currentColor = [self.color1 blendedColorWithFraction:d ofColor:self.color2];
[self.target setColorOfSomething:currentColor];
}
@end
あなたの他のコードで:
MyAnimation *myAnim = [[MyAnimation alloc] init];
myAnim.target = self; // assuming self has a setColorOfSomething: method
myAnim.color1 = [NSColor redColor];
myAnim.color2 = [NSColor blueColor];
// set up other animation stuff
[myAnim startAnimation];
于 2012-11-30T07:36:19.323 に答える
0
ただの提案です。おそらく、次のようにフェードインとフェードアウトを使用できます。
begin animation
obj.alpha = 0.0;
commit animation
begin animator
obj.color = newColor;
obj.alpha = 1.0;
commit animation
于 2012-11-30T07:38:26.497 に答える