gpt4 book ai didi

objective-c - 如何制作 NSColor 变化的动画?

转载 作者:行者123 更新时间:2023-12-03 17:31:50 24 4
gpt4 key购买 nike

NSAnimation 不允许我对 NSColor 更改进行动画处理。我该怎么做?

最佳答案

您可以使用blendedColorWithFraction:ofColor:。在您的动画方法中(无论哪种方法正在处理动画的当前值[如果没有,只需创建一个]):

NSColor *startColor = [NSColor redColor];
NSColor *targetColor = [NSColor blueColor];

float progress = [animation currentValue];
NSColor *currentColor = [startColor blendedColorWithFraction:progress ofColor:targetColor];

编辑:

您可以做的是创建 NSAnimation 的子类。您的子类只需重写 setCurrentProgress: 方法即可确定动画的进度。您可以以完全相同的方式配置动画的其余部分。在这种情况下,该协议(protocol)可能有点过头了,但它为您的子类动画提供了一种专用方法,将 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];

关于objective-c - 如何制作 NSColor 变化的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13640698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com