如何为NSColor更改设置动画?

时间:2012-11-30 07:23:32

标签: objective-c xcode macos cocoa

NSAnimation不会让我动画NSColor更改动画。我该怎么做?

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

只是一个建议。也许你可以使用淡入淡出和淡出,如下所示:

begin animation
obj.alpha = 0.0;
commit animation

begin animator
obj.color = newColor;
obj.alpha = 1.0;
commit animation