改变窗口背景颜色

时间:2012-10-01 16:34:08

标签: objective-c macos cocoa

我想每秒更改窗口的背景颜色,所以这是我的代码:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(newColor) userInfo:nil repeats:YES];
}

-(void)newColor {
    int r;
    r = (arc4random()%250)+1;
    NSLog(@"%i", r);

    int g;
    g = (arc4random()%250)+1;
    NSLog(@"%i", g);

    int b;
    b = (arc4random()%250)+1;
    NSLog(@"%i", b);

    NSColor *theColor = [NSColor colorWithDeviceRed:(int)r green:(int)g blue:(int)b alpha:(float)1.0];
    [_window setBackgroundColor:theColor];
}

我认为我的问题在于用变量定义颜色,但我不确定。

2 个答案:

答案 0 :(得分:0)

我建议您进行以下更改..

#define ARC4RANDOM_MAX      0x100000000

-(void)newColor:(NSTimer *)sender {
//Give your void an NSTimer argument so you have to ability to invalidate the timer if you ever want to.
    float r = ((float)arc4random() / ARC4RANDOM_MAX);
    float g = ((float)arc4random() / ARC4RANDOM_MAX);
    float b = ((float)arc4random() / ARC4RANDOM_MAX);

//These will generate random floats between zero and one. NSColor wants floats between zero and one, not ints between 0-255.


    NSLog(@"R: %f | G: %f | B: %f",r,g,b);


    if (r >= 0.5 && g >= 0.5 && b >= 0.5) {
        [sender invalidate];
    }
//Example of invalidating sender


    NSColor *theColor = [NSColor colorWithDeviceRed:r green:g blue:b alpha:1.0f];
    [_window setBackgroundColor:theColor];
}

答案 1 :(得分:0)

只需更改newColor方法,如下所示

-(void)newColor
{
    int r;
    r = (arc4random()%250)+1;
    NSLog(@"%i", r);

    int g;
    g = (arc4random()%250)+1;
    NSLog(@"%i", g);

    int b;
    b = (arc4random()%250)+1;
    NSLog(@"%i", b);

    float red = (float)r/255;
    float blue = (float)b/255;
    float green = (float)g/255;

    NSLog(@"red-%f, blue-%f, green-%f",red, blue, green);
    NSColor *theColor = [NSColor colorWithDeviceRed green:green blue:blue alpha:1.0];
    [_window setBackgroundColor:theColor];
}